
如果把上网比作寄快递,DNS(域名系统)就是那个把“收件人名字(域名 如 www.google.com)翻译成详细地址(IP地址 如 140.205.60.14X)的超级快递员。
电脑无法直接识别字母,只能通过一串数字(IP地址)在网络中找到目标。
DNS的工作过程,就是一次高效的“多级缓存与层层问路”的过程。
当你在浏览器输入网址并敲下回车,DNS会按以下顺序“四步走”:
1. 翻自家小本本(浏览器 & 系统缓存)
电脑非常懒,它首先会在自己的“内存小本子”里翻找,看看最近有没有访问过这个网站。
· 检查浏览器缓存:浏览器通常会记住最近访问过的网站 IP。
· 检查系统缓存(Hosts文件):如果浏览器没记住,它会去操作系统的底层档案(Hosts文件)里找。
这一步是秒开的,如果找到了,直接拿去上网,过程结束。
2. 问小区保安(本地 DNS 服务器)
如果自己没记录,电脑就会向你连接的网络服务商(如电信、移动)发起询问。网络服务商那里有一台本地 DNS 服务器(也叫递归解析器),它就像一个无所不知的“小区保安”。
· 保安一看,如果自己记录里有这个地址,就直接告诉你(递归查询)。
· 如果保安也不知道,他就会代表你去外面的“大网络”里打听(此时变成迭代查询)。
3. 全球兜圈打听(迭代查询三部曲)
本地 DNS 服务器开始了它的“环球问路”之旅,这个过程非常快(毫秒级)
第一站:问根域名服务器(.)
根服务器是全球互联网的“总机”。它不直接知道具体网站的 IP,但它知道下一步该去哪。它会告诉本地 DNS:“这个 .com 结尾的网址,你得去问 COM 顶级服务器。”
第二站:问顶级域名服务器(.com / .cn / )
本地 DNS 找到 COM 服务器,COM 服务器翻了翻名单说:“这个 taobao.com 的管事人(权威服务器)在某某地方,你去那问吧。”
第三站:问权威域名服务器taobao.com
终于找到了管 taobao.com 这块地的“村长”(权威服务器)。村长一查户口本,把确切的 IP 地址交给了本地 DNS 服务器。
4. 顺藤摸瓜回家(结果返回与缓存)
· 带路回府:本地 DNS 服务器拿到真正的 IP 后一路跑回你的电脑,把地址交给你。
·偷偷记小抄:为了下次别人再问能快点,本地 DNS 和你的电脑都会把这个域名和 IP 的对应关系悄悄记在自己的缓存里(会设置一个过期时间)。
一句话总结:
DNS 的工作过程就像“查通讯录”。先翻自己的备忘录(本地缓存),没有就打给秘书(本地 DNS),秘书也不知道就去查全球名录(根 -> 顶级 -> 权威服务器),最后把查到的电话号码(IP地址)告诉你,让你顺利拨通对方的电话(访问网站)。
如何在Linux系统中刷新DNS缓存?
在 Linux 系统中刷新 DNS 缓存的方法,取决于系统使用的 DNS 服务管理器(不同发行版可能采用不同工具),以下是常见的几种方式:
1. 适用于使用 systemd-resolved 的系统(主流发行版如 Ubuntu 18.04+、Debian 10+、CentOS 8+ 等)
systemd-resolved 是许多现代 Linux 发行版默认的 DNS 解析服务,刷新缓存命令如下:
1. 打开终端( Ctrl + Alt + T )。
2. 执行以下命令(需要管理员权限):
bash
sudo systemctl restart systemd-resolved
该命令会重启 DNS 服务,同时清除缓存。
2. 适用于使用 dnsmasq 的系统(部分旧版 Ubuntu、Debian 等)
dnsmasq 是轻量级 DNS 缓存服务,刷新方法:
1. 打开终端。
2. 执行重启命令:
bash
sudo /etc/init.d/dnsmasq restart
或
bash
sudo systemctl restart dnsmasq
3. 适用于使用 nscd 的系统(如 CentOS 7 等)
nscd (Name Service Cache Daemon)用于缓存 DNS 等服务信息,刷新命令:
1. 打开终端。
2. 执行:
bash
sudo /etc/init.d/nscd restart
或
bash
sudo systemctl restart nscd
4. 通用方法(清空 /etc/resolv.conf 缓存记录)
若上述方法不适用,可尝试直接清除 DNS 配置文件的缓存记录(部分系统有效):
1. 打开终端。
2. 执行:
bash
sudo rm -f /etc/resolv.conf
sudo systemctl restart network # 重启网络服务,重新生成 resolv.conf
如何确认系统使用的 DNS 服务?
可通过以下命令查看当前运行的 DNS 服务,再选择对应刷新方法:
bash
sudo systemctl list-unit-files | grep -E ‘resolved|dnsmasq|nscd’
输出中显示 enabled 或 running 的服务即为当前使用的 DNS 服务。
刷新 DNS 缓存后,系统会重新向 DNS 服务器请求解析,可解决因旧缓存导致的域名解析问题(如 ERR_NAME_NOT_RESOLVED )。
