Domain IP Lookup

一次递归 DNS 查询,逐跳详解

浏览器

想访问 example.com

解析器

运营商 / 1.1.1.1

根 + TLD

谁负责 .com?

权威服务器

真正的答案

这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存

DNS 基础

DNS 如何工作:从域名到 IP 地址

3 分钟阅读

在浏览器中输入 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 顶级域服务器再指向该域名自己的名称服务器。
  • 权威名称服务器:保存该域名真实记录的服务器。它们所说的,按定义就是真相。

逐步看一次查询

  1. 先检查本地缓存

    您的浏览器有自己的 DNS 缓存,操作系统也有。如果其中任何一个保存着 example.com 未过期的答案,查询在几微秒内就结束了,完全不会产生任何网络流量。

  2. 询问递归解析器

    未命中时,存根解析器会把查询发送给已配置的递归解析器,也就是一个 UDP 数据包,通常发往 53 端口。

  3. 解析器询问根服务器

    如果解析器没有任何缓存,它就从最顶层开始。根服务器并不知道 example.com,但会回复:这是 .com 的名称服务器。

  4. 解析器询问顶级域服务器

    .com 服务器回复一个引荐:example.com 的权威名称服务器是这些。仍然不是答案,而是又一个指针。

  5. 解析器询问权威名称服务器

    这一台拥有真正的区域文件。它返回 A 记录:93.184.216.34,以及一个 TTL,说明该答案可以被重复使用多久。

  6. 答案被缓存并返回

    解析器在 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 工具。

常见问题