互联网的"电话簿":把 www.example.com 翻译成机器之间真正用来通信的 IP 地址。一次点击背后,是一次跨越多级服务器的分布式查询。
DNS 命名空间按层级拆分管理,没有任何一台服务器"知道全世界所有域名"
域名从右往左读,每一段对应一层授权。以 www.example.com. 为例(注意末尾还有一个不显示的"根"点):最右端的根(Root)是整棵树的顶点,全球共有 13 组逻辑根服务器(A–M);往左一级是顶级域(TLD),如 .com、.cn、.org,由 ICANN 授权的注册局运营;再往左是二级域 example,也就是域名持有者在注册局注册的名字;最左端的 www 则是该域内的主机记录。
每一层都有自己的域名服务器:根服务器不直接回答具体域名,但知道"想查 .com 就去找 .com 的 TLD 服务器";TLD 服务器知道"example.com 这个域由谁的权威服务器负责";权威域名服务器(Authoritative DNS)才是某一个域最终记录(IP、MX、TXT 等)的存放者。网站管理员通过域名注册商修改权威 DNS 上的记录,全球解析器则按 TTL 逐步同步这些变更。
因为互联网上的域名数以亿计、每秒查询量以万亿计,任何单点都扛不住。分层授权让每一层只管自己那一段:注册局只管 TLD,企业只管自己的域,根只管 TLD 的清单。新增一个域名不需要通知全世界,只要在对应的权威服务器上添加记录即可——这正是 DNS 能随互联网规模线性扩展的关键设计。
很多人混淆这两者——它们发生在解析链路的不同位置
递归查询(Recursive Query):本机浏览器/操作系统只问一次——"告诉我 www.example.com 的 IP",对方必须一管到底,要么给最终答案,要么给错误(不存在/超时)。承担这个角色的是递归解析器(Recursive Resolver),通常是运营商 DNS、公共 DNS(如 8.8.8.8、1.1.1.1)或你自建的本地缓存(如 systemd-resolved、AdGuard Home)。
迭代查询(Iterative Query):递归解析器向根、TLD、权威服务器追问时使用。被问的服务器不帮你继续查,只返回"下一步建议问谁"( referral):根服务器说"我不知道 example.com,但 .com 的服务器在这";TLD 服务器说"example.com 的权威服务器在这"。解析器拿着这份指引自己往下走,直到权威服务器给出最终记录。
简单记忆:客户端 → 递归解析器之间是递归;递归解析器 → 根/TLD/权威之间是迭代。递归解析器会把最终结果按记录的 TTL 缓存在本地,下次同一查询直接命中缓存,省去整段链路。
解析器不只查 IP,DNS 里还存着邮件路由、别名等各种记录
| 记录类型 | 作用 | 示例值 | 规范来源 |
|---|---|---|---|
A | 域名 → IPv4 地址,最基础的地址记录 | 93.184.216.34 | RFC 1035 |
AAAA | 域名 → IPv6 地址(128 位) | 2606:2800:220:1::33 | RFC 3596 |
CNAME | 别名:把一个域名指向另一个域名 | www.example.com → example.cdn.net | RFC 1035 |
MX | 邮件交换:指定该域的收信服务器及优先级 | 10 mail.example.com | RFC 1035 |
NS | 名称服务器:声明该域由哪台权威 DNS 负责 | ns1.example.com | RFC 1035 |
TXT | 任意文本记录,常用于 SPF、DKIM、域名所有权验证 | v=spf1 include:_spf.example.com ~all | RFC 1035 |
实际排查时最常用的是 A / AAAA(网站打不开先查它)、CNAME(排查 CDN 回源链)和 MX(排查收不到邮件)。用 dig example.com A、dig example.com AAAA 即可逐类型查询。
假设递归解析器缓存已失效,需要从根开始逐级追问
| 步骤 | 谁 → 谁 | 动作 |
|---|---|---|
| 1 | 浏览器 → 本地存根 | 浏览器要访问 www.example.com,先查本机 hosts 与操作系统缓存 |
| 2 | 存根 → 递归解析器 | 缓存未命中,向配置好的递归解析器(运营商/公共/自建)发起递归查询 |
| 3 | 解析器 → 根服务器 | 缓存未命中,向根服务器问 www.example.com,根返回 .com TLD 地址(迭代) |
| 4 | 解析器 → .com TLD | TLD 返回 example.com 的权威服务器地址(迭代) |
| 5 | 解析器 → 权威服务器 | 权威服务器返回 www.example.com 的 A 记录(93.184.216.34) |
| 6 | 解析器 → 浏览器 | 解析器按 TTL 缓存结果,并把最终 IP 返回给浏览器 |
| 7 | 浏览器 → 目标 IP | 浏览器用这个 IP 建立 TCP/TLS 连接,加载网页 |
www.example.com)翻译成机器之间用来路由报文的 IP 地址(IPv4 或 IPv6),同时承载邮件路由(MX)、别名(CNAME)等记录。没有它,我们只能靠背一串数字上网。