三个层级都被称作“DNS 服务器”
存根解析器
您自己的设备
递归解析器
运营商、路由器或 1.1.1.1
权威服务器
域名自己的 DNS
递归解析器与权威解析器详解
“DNS 服务器”这个词常被笼统地用来指代两种截然不同的角色。把它们区分开来,整个系统就容易理解得多。
递归解析器:负责跑腿
递归解析器是您的设备实际打交道的那一个,通常由您的 ISP 或路由器设定,也可以手动配置为 1.1.1.1 或 8.8.8.8 这样的公共选项。它的工作是接下您的查询,并做完回答它所需的一切:先查自己的缓存,未命中的话,就沿着根服务器、TLD 服务器、再到该域名自己的权威服务器这条链路一路查下去,最后把最终答案交还给您。
权威服务器:握有真正的答案
权威域名服务器是某个特定域名记录的事实来源,该域名的 A、AAAA、MX 等记录,真正存放的就是这唯一的一处。它不会替您去查找任何东西,只会直接回答自己负责的域名,对其他一切则拒绝(或转发到别处)。
- 您的递归解析器是共享的基础设施,通常要为数以百万计、与它没有任何特殊关系的不同域名作答。
- 一个域名的权威服务器通常数量不多,并且专属于这一个域名(或一小组相关域名)。
- 直接执行查询的工具,比如通过 Node.js 自带的 DNS 解析器、经由公共递归解析器来解析域名,走的是与您的浏览器相同的“递归到权威”的链路,只是少了外面包裹的那层浏览器。
其实还有第三种角色:存根解析器
您自己的设备很少会亲自走完整条链路。它运行的是一个轻量的存根解析器,这是一小段系统层面的软件,本身没有真正的逻辑,唯一的工作就是把应用程序的 DNS 问题转发给已配置的递归解析器(您的 ISP、路由器,或手动设置的 1.1.1.1 之类的选项),再把答案交回去。这就是为什么在笔记本电脑或手机上更改“DNS 设置”,根本不会改变 DNS 的工作方式,它只是改变了存根解析器所转发的递归解析器。越来越多的情况下,这一转发步骤本身会通过加密通道进行,即基于 HTTPS 的 DNS(DoH)或基于 TLS 的 DNS(DoT),因此本地网络上的观察者再也无法以明文读取正在查询哪些域名。
这种区分也解释了为什么“我的 DNS 服务商”和“我的域名的权威域名服务器”通常是同一回事,而“我正在使用的 DNS 服务器”(比如 1.1.1.1)则是完全不同的、通用的递归解析器,对您的域名没有任何特别的了解,它只是个信使。
| 角色 | 运行位置 | 了解的内容 |
|---|---|---|
| 存根解析器 | 您自己设备的操作系统 | 一无所知,只负责转发问题 |
| 递归解析器 | 您的 ISP、路由器,或 1.1.1.1 之类的公共服务 | 每个域名都知道一点,但没有哪个特别熟悉,替所有域名跑腿 |
| 权威域名服务器 | 域名所有者的 DNS 服务商 | 完整而确切地掌握一个域名(或一小组域名)的全部细节 |
为什么这种区分能消除如此多的困惑
大量的 DNS 排障工作,归根结底就是弄清这三层中究竟是哪一层造成了某个令人困惑的现象,而人们常常猜错,因为这三层在口语里都被叫作“DNS 服务器”。一个域名直接向自己的权威域名服务器查询时解析正确,通过某家 ISP 的递归解析器却解析错误,这直接指向该解析器的缓存或配置,而不是域名所有者所能控制的任何东西。反过来,无论询问哪个递归解析器都解析错误的域名,则指向权威一侧。能在几秒之内干净利落地做出这种划分,正是高效排查 DNS 与瞎猜之间的主要区别。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
相关阅读
实际如何选择 TTL
理解 DNS TTL:为什么变更需要时间才能生效
TTL 决定一条 DNS 应答在被再次查询之前会缓存多久,这正是 DNS 变更无法在各处立即生效的真正原因。了解如何权衡并选择合适的值。
两种寻址方案,并行运行
IPv4
192.0.2.10
32 位,约 43 亿个地址,已耗尽
IPv6
2606:4700::6810:84e5
128 位,约 3.4×10³⁸ 个地址
A 记录与 AAAA 记录:IPv4 和 IPv6 详解
A 记录返回 IPv4 地址,AAAA 记录返回 IPv6 地址。同一个域名拥有两个相互独立的地址族,这也是为什么两者都要检查。
一次递归 DNS 查询,逐跳详解
浏览器
想访问 example.com
解析器
运营商 / 1.1.1.1
根 + TLD
谁负责 .com?
权威服务器
真正的答案
这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存
什么是 DNS?它是如何工作的
用通俗的语言讲解域名系统:从您输入域名,到浏览器连上服务器,中间究竟发生了什么。