一次递归 DNS 查询,逐跳详解
浏览器
想访问 example.com
解析器
运营商 / 1.1.1.1
根 + TLD
谁负责 .com?
权威服务器
真正的答案
这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存
DNS 如何工作:从域名到 IP 地址
在浏览器中输入 example.com,页面几乎立刻出现。在这两个瞬间之间,一个遍布全球的分布式数据库回答了一个问题:这个名称对应哪个 IP 地址?这个系统就是 DNS,即域名系统。
值得好好理解它,因为几乎每一个令人困惑的网站问题,比如修改迟迟不生效、邮件消失、网站在一台设备上正常而在另一台上却不行,追根溯源都与 DNS 解析和缓存的实际行为有关。
一次递归 DNS 查询,逐跳详解
浏览器
想访问 example.com
解析器
运营商 / 1.1.1.1
根 + TLD
谁负责 .com?
权威服务器
真正的答案
这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存
四个参与者
- 存根解析器:内置在您操作系统中的小型 DNS 客户端。它几乎什么都不知道,会立刻把任务委托出去。
- 递归解析器:通常由您的运营商运行,或者是
1.1.1.1、8.8.8.8这样的公共解析器。它是一路追查答案并将其缓存的主力。 - 根服务器和顶级域服务器:它们不知道答案,但知道谁知道。根服务器指向
.com;.com顶级域服务器再指向该域名自己的名称服务器。 - 权威名称服务器:保存该域名真实记录的服务器。它们所说的,按定义就是真相。
逐步看一次查询
先检查本地缓存
您的浏览器有自己的 DNS 缓存,操作系统也有。如果其中任何一个保存着
example.com未过期的答案,查询在几微秒内就结束了,完全不会产生任何网络流量。询问递归解析器
未命中时,存根解析器会把查询发送给已配置的递归解析器,也就是一个 UDP 数据包,通常发往 53 端口。
解析器询问根服务器
如果解析器没有任何缓存,它就从最顶层开始。根服务器并不知道
example.com,但会回复:这是.com的名称服务器。解析器询问顶级域服务器
.com服务器回复一个引荐:example.com的权威名称服务器是这些。仍然不是答案,而是又一个指针。解析器询问权威名称服务器
这一台拥有真正的区域文件。它返回
A记录:93.184.216.34,以及一个 TTL,说明该答案可以被重复使用多久。答案被缓存并返回
解析器在 TTL 时长内缓存结果,把它交给您的操作系统,再由操作系统交给浏览器。直到现在,才能开始与服务器建立 TCP 连接。
递归与权威:真正重要的区别
人们经常把这两者混为一谈,并因此造成实际的调试失误。
| 递归解析器 | 权威名称服务器 | |
|---|---|---|
| 职责 | 代表您去查找答案 | 存储并发布答案 |
| 示例 | 1.1.1.1、8.8.8.8、您的运营商 | Cloudflare DNS、Route 53、您的域名注册商 |
| 是否缓存? | 是,这是它的主要工作 | 否,它就是源头 |
| 由谁配置? | 您或您的网络 | 域名所有者 |
实际的后果是:当您修改 DNS 记录时,权威服务器会立即更新。而全球每一台递归解析器会继续提供其缓存的副本,直到 TTL 过期。这段时间差,就是人们所说的 DNS 传播。
解析器实际返回什么
一个响应不只是一个地址。它携带记录类型、值和 TTL,还有标志位,说明该答案是权威的,还是来自缓存。一个域名会同时发布许多种记录类型:A 和 AAAA 用于地址,MX 用于邮件路由,NS 用于其名称服务器,TXT 用于验证和策略。
example.com. 3600 IN A 93.184.216.34
example.com. 3600 IN AAAA 2606:2800:220:1::248
example.com. 3600 IN MX 10 mail.example.com.
example.com. 86400 IN NS ns1.example.com.名称后面的数字是以秒为单位的 TTL。IN 表示互联网类。其余部分是记录类型及其值。
DNS 在实际中哪里会出问题
- 修改尚未传播。权威服务器是正确的;您和它之间的某个缓存则不是。无需修复,只需等待。
- 名称服务器指向了错误的服务商。您在域名注册商处编辑了记录,但域名实际委派给的是主机商的名称服务器,所以这些修改会被忽略。
- 缺少末尾的点。在区域文件中,不带末尾点的
mail.example.com可能被解释为相对于该区域,从而生成mail.example.com.example.com。 - 没有
AAAA记录,却有纯 IPv6 的客户端。对它们来说网站无法访问,而对其他所有人则完全正常。
核心要点
如果 DNS 问题出现在一台设备上而另一台没有,几乎总是缓存的问题,而不是记录坏了。在改动任何东西之前,先检查权威应答。
使用首页上的查询工具,您可以查看任意域名的上述每一种记录,它会分别独立查询,因此即使某个域名缺少其中一种类型,其余的仍然会显示。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
常见问题
相关阅读
一次递归 DNS 查询,逐跳详解
浏览器
想访问 example.com
解析器
运营商 / 1.1.1.1
根 + TLD
谁负责 .com?
权威服务器
真正的答案
这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存
什么是域名服务器?域名委派的工作原理
这个设置决定了由哪家服务商掌管您的 DNS,也是您的记录修改有时完全没有效果的原因。
几乎每个 DNS 区域都会遇到的记录
DNS 记录类型详解:完整参考
每一种值得了解的记录类型:它的作用、长什么样,以及人们常犯的错误,全部浓缩在一页参考中。
实际如何选择 TTL
什么是 DNS TTL?如何选择合适的值
一个数字,决定了变更多快生效,也决定了您产生多少 DNS 流量。下面教您如何有意识地选择它。