计算机连接的是 IP 地址,人记住的是名称。域名系统(DNS)负责在两者之间翻译——每秒数十亿次,大多直接来自缓存,只需几毫秒。
参与者
- 存根解析器:操作系统或浏览器里的小型 DNS 客户端。
- 递归解析器:负责查找答案的服务器,由你的运营商运营,或使用 1.1.1.1、8.8.8.8 这样的公共服务。
- 根服务器:知道到哪里去找每个顶级域。
- 顶级域服务器:负责
.com、.cn、.si等,知道每个域名由哪些域名服务器负责。 - 权威域名服务器:保存域名的真实记录。
一次查询,逐步拆解
当你打开 www.example.com 而缓存中没有任何记录时:
- 你的设备向递归解析器查询
www.example.com的 A(IPv4)和 AAAA(IPv6)记录。 - 解析器询问一台根服务器,得到
.com的服务器。 - 它再询问一台 .com 服务器,得到
example.com的域名服务器(即它的 NS 记录)。 - 它询问 example.com 的某台域名服务器,得到地址。
- 解析器把答案返回给你,并将其缓存。
缓存与 TTL
每条记录都带有以秒为单位的 TTL(生存时间)。解析器在这段时间内保留答案,之后才重新查询。这就是 DNS 速度快的原因,也是修改需要时间生效的原因:TTL 为一小时的记录,在你修改后最长可能仍从缓存中提供一小时。计划迁移前请先调低 TTL。
不只是地址
DNS 还会告诉世界:
- 邮件该投递到哪里(MX),
- 哪些名称是别名(CNAME),
- 哪些服务器可以发信、哪些证书颁发机构可以签发证书(用于 SPF/DMARC 的 TXT,以及 CAA),
- 哪些服务器是权威的(NS、SOA),
- 以及反过来,某个 IP 地址对应哪个名称(PTR)。
每种记录都有一篇简短指南:A、AAAA、CNAME、MX、TXT、NS。
安全:DNSSEC 与加密 DNS
DNSSEC 利用发布在 DNS 中的签名,让解析器验证答案确实来自域名所有者。DNS over HTTPS 和 DNS over TLS 则加密你与解析器之间的连接,让网络上的其他人无法读取或篡改你的查询。它们解决的是不同的问题,配合使用效果更好。
实时查看
DNS 查询会实时查询所有常见记录类型,并显示 TTL 和 DNSSEC 状态——用 cloudflare.com 试试吧。