← 返回题目列表

DNS 的解析过程是怎样的?

高频 中等 第 11 / 27 题 更新于 2026/07/28
DNS域名解析递归查询权威服务器

简化版

DNS 把域名解析成 IP,过程是逐级查缓存 + 分层查询:先查浏览器缓存 → 系统缓存 → hosts 文件 → 本地 DNS 服务器;本地 DNS 没有就替你去问 根域名服务器 → 顶级域(TLD)服务器 → 权威域名服务器,一层层拿到最终 IP,再逐级缓存返回。域名是分级的(..comexample.com),查询也就沿着这个层级走。

详细版

完整解析流程(访问 www.example.com):

  1. 浏览器缓存:浏览器先查自己缓存过的域名→IP;
  2. 操作系统缓存 + hosts 文件:查系统 DNS 缓存,以及本地 hosts 文件(hosts 里配了就直接用);
  3. 本地 DNS 服务器(递归解析器,通常是运营商或 8.8.8.8 这类):以上都没命中,就请求它。它若有缓存直接返回,没有则代替你去递归查询
    • 根域名服务器.):根不知道具体 IP,但告诉你「去问 .com 的 TLD 服务器」;
    • 顶级域 TLD 服务器.com):它告诉你「去问 example.com 的权威服务器」;
    • 权威域名服务器example.com):它保存着 www.example.com 的真实记录,返回 IP;
  4. 本地 DNS 把 IP 缓存(按 TTL)后返回给你,浏览器拿到 IP 去建连。

完整版教学

一、域名是分级的,查询也分级

理解 DNS 的钥匙是域名的层级结构www.example.com 从右往左是逐级细分的:

.                  根(root)
└── com            顶级域 TLD
    └── example    二级域
        └── www    主机名

没有一台服务器存着全世界所有域名(那不可能),而是分层分布式管理:根服务器管「各 TLD 在哪」,TLD 服务器管「该顶级域下各域名的权威服务器在哪」,权威服务器管「该域名的具体记录」。查询就沿着这个层级从根往下问,一级级被指引到最终答案。这是一个巨大的分布式数据库

二、多级缓存:绝大多数查询根本到不了根服务器

如果每次解析都从根开始查,根服务器早就被压垮了。实际上 DNS 靠多级缓存把绝大部分查询挡在前面:

  • 浏览器缓存、操作系统缓存、hosts、本地 DNS 服务器缓存,任何一层命中就直接返回;
  • 常用域名(如各大网站)几乎总在本地 DNS 的缓存里,根本不用往上查。

所以真正走完「根 → TLD → 权威」全程的查询很少,多数在本地就解决了。缓存的有效期由记录的 TTL 控制(详见「DNS 缓存与 TTL」那道题)。

三、递归查询 vs 迭代查询

解析过程里其实有两种查询模式(详见「递归查询和迭代查询」那道题):

  • 你 → 本地 DNS:递归查询——你只管问一次,本地 DNS 负责一路查到底、把最终 IP 给你;
  • 本地 DNS → 根/TLD/权威:迭代查询——每一级不直接给答案,只给「下一步该问谁」的指引,本地 DNS 顺着指引一级级问下去。

这样概括:本地 DNS 对你是「全包」的递归,对上游是「自己一步步问」的迭代。

四、hosts 文件的特殊地位

hosts 文件(Windows 在 C:\Windows\System32\drivers\etc\hosts,Linux/Mac 在 /etc/hosts)是本地的「域名→IP」静态映射表,优先级高于 DNS 查询。配了它就直接用、不走 DNS。

用途:本地开发(把域名指到 127.0.0.1)、临时绕过 DNS、屏蔽广告域名(指到无效 IP)。这也是为什么「改了 hosts 立即生效」——它在 DNS 查询之前就拦截了。

五、常见误区

  • ❌ 以为每次解析都从根服务器开始——绝大多数命中本地各级缓存,到不了根。
  • ❌ 以为有一台服务器存所有域名——DNS 是分层分布式的,根/TLD/权威各管一段。
  • ❌ 忽略 hosts 文件——它优先于 DNS 查询,配了就直接用。
  • ❌ 把「你→本地DNS」和「本地DNS→上游」的查询模式混为一谈——前者递归、后者迭代。

六、常见误区与追问

考点正确口径
浏览器/系统缓存先查本机缓存和 hosts
递归解析器代客户端完成多级查询
权威 DNS最终回答某个域名记录
browser cache
-> OS cache / hosts
-> recursive resolver
-> root -> TLD -> authoritative
-> cache result by TTL
-> return IP

面试讲 DNS 解析,要区分“谁替我一路问到底”和“谁只告诉我下一站”。

  • 误区:浏览器每次都从根 DNS 开始查。 浏览器、系统、递归解析器都会缓存,命中缓存时不会走完整链路。
  • 误区:根 DNS 保存所有域名 IP。 根服务器主要告诉你顶级域服务器在哪里,不保存所有业务域名记录。
  • 误区:DNS 解析只发生在输入 URL 时。 页面中的子资源、接口域名、重定向目标都可能触发新的解析。
  • 追问:递归查询和迭代查询在流程里怎么体现? 客户端通常递归问本地解析器,本地解析器再迭代询问 root、TLD、权威 DNS。
  • 追问:为什么第一次访问慢,第二次快? 第一次可能要完整递归解析,第二次常命中缓存,省掉多次网络往返。
  • 追问:hosts 文件在哪个阶段生效? 系统解析阶段会查 hosts,命中后可绕过后续 DNS 查询。

七、加强记忆

DNS 解析 = 逐级查缓存(浏览器 → 系统/hosts → 本地 DNS)+ 分层查询(根 → TLD → 权威)。域名是分级的,查询沿层级从根往下被指引到权威服务器拿 IP,再逐级缓存返回。你对本地 DNS 是递归(全包),本地 DNS 对上游是迭代(一步步问);多级缓存让多数查询根本到不了根,hosts 文件优先级最高。