如果把上网比作寄快递,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 )。