基于本文回答
0
评论

DNS 的解析过程是怎样的?

知识点图片

DNS(Domain Name System,域名系统)的解析过程是将人类易读的域名(如 www.google.com)转换为机器易读的 IP 地址(如 142.250.190.46)的过程。

可以将这个过程想象成在图书馆找一本书,或者层层向上级部门询问的过程。

以下是 DNS 解析的详细步骤(假设你第一次访问该网站,没有任何缓存):

核心角色

在介绍流程前,先认识一下几个关键角色:

  1. 客户端(Client):你的电脑或手机。
  2. 本地 DNS 服务器(Local DNS / Recursive Resolver):通常由你的网络运营商(ISP)提供,或者你手动设置的(如 Google 的 8.8.8.8)。它是帮你跑腿的“苦力”。
  3. 根域名服务器(Root Nameserver):全球互联网的最高层级,管理顶级域(如 .com, .cn)。
  4. 顶级域名服务器(TLD Nameserver):管理特定后缀的服务器(如管理所有 .com 的服务器)。
  5. 权威域名服务器(Authoritative Nameserver):域名持有者配置的服务器,它知道最终的 IP 地址。

详细解析流程(8个步骤)

当你在浏览器输入 www.example.com 并回车时:

第一阶段:检查缓存(就在你身边找)

解析速度最快的是直接从缓存读取,不需要去互联网上问。

  1. 浏览器缓存:浏览器会先检查自己有没有访问过这个网站的记录。如果有且没过期,直接使用。
  2. 操作系统缓存(OS Cache / hosts 文件):如果浏览器没找到,会去问操作系统。操作系统会检查本地的 hosts 文件和 DNS 缓存。
  3. 路由器缓存:如果电脑也没找到,请求会发给路由器,路由器通常也有 DNS 缓存。

第二阶段:递归查询(委托给本地 DNS 服务器)

如果本地都没找到,请求就会发给本地 DNS 服务器(LDNS)

  1. ISP DNS 缓存:本地 DNS 服务器收到请求后,先查自己的缓存。如果有,直接返回给你。如果没有,它就要开始“跑腿”了。

第三阶段:迭代查询(全球接力问路)

本地 DNS 服务器代表你去互联网上层层询问。

  1. 询问根域名服务器(Root Server)

    • 本地 DNS 问根服务器:“你知道 www.example.com 的 IP 是多少吗?”
    • 根服务器回答:“我不知道具体 IP,但它是 .com 结尾的。我给你 .com 顶级域名服务器 的地址,你去问它。”
  2. 询问顶级域名服务器(TLD Server)

    • 本地 DNS 根据刚才得到的地址,去问 .com 服务器:“你知道 www.example.com 的 IP 吗?”
    • .com 服务器回答:“我不知道具体 IP,但我知道 example.com 这个域名是在哪家注册的。我给你它的 权威域名服务器 的地址,你去问它。”
  3. 询问权威域名服务器(Authoritative Server)

    • 本地 DNS 去问权威服务器:“你是 example.com 的老大,你应该知道 www.example.com 的 IP 吧?”
    • 权威服务器回答:“是的,我知道。它的 IP 地址是 93.184.216.34。”

第四阶段:返回结果与缓存

  1. 保存并返回
    • 本地 DNS 服务器拿到了 IP,它会做两件事:
      1. 缓存这个结果(根据 TTL 时间),下次有人问同样的域名,它就不用再跑一遍了。
      2. 把 IP 返回给你的操作系统。
    • 操作系统也缓存一份,然后把 IP 给浏览器。
    • 浏览器拿到 IP,终于可以向目标服务器发起 TCP 连接(三次握手)并请求网页了。

两个重要概念

为了理解得更透彻,需要区分两种查询方式:

  1. 递归查询 (Recursive Query)

    • 发生在你和本地 DNS 服务器之间
    • 意思就是:“我把任务交给你了,你必须给我一个最终结果(要么是 IP,要么是报错),别让我自己再去跑。”
  2. 迭代查询 (Iterative Query)

    • 发生在本地 DNS 服务器和根/TLD/权威服务器之间
    • 意思就是:“我告诉你下一步去哪里找,但我不会帮你去问,你自己去问下一级。”

总结图解

plaintext
用户
 |
(1) 输入 www.example.com
 |
 v
[ 浏览器/OS 缓存 ] --(2) 有?--> 结束
 | (没有)
 v
[ 本地 DNS 服务器 ] --(3) 有缓存?--> 结束
 | (没有,开始跑腿)
 |
 +---(4) 问根服务器 (.) ---------> [ 根域名服务器 ]
 |                                      |
 | <----(5) 回复: 去找 .com 服务器 -----+
 |
 +---(6) 问 TLD 服务器 (.com) ---> [ .com 顶级域名服务器 ]
 |                                      |
 | <----(7) 回复: 去找权威服务器 -------+
 |
 +---(8) 问权威服务器 (example.com) -> [ 权威域名服务器 ]
                                        |
   <----(9) 回复: IP 是 93.184.216.34 --+
 |
 v
[ 本地 DNS 服务器 ] (存入缓存)
 |
 v
(10) 返回 IP 给用户
右滑查看面试常问