世界最大的分布式系统:DNS
2025-11-18
“13.215.239.219”。
他不假思索地报出这样一段数字。
周围的人一头雾水,他究竟想表达什么?
他有点着急,“个人网站呀,他新开发的,去浏览器里输入就能看到”。
无人为之所动。
他有些泄气,“plantree.me,同样可以访问”。
将人类的语言世界,与计算机网络世界连接的底层奥秘,就在于 DNS (Domain Name System)。
1. DNS 的诞生
互联网基于 HTTP 协议,这是一个应用层协议,更底层的传输协议栈是 TCP/IP。
在 TCP/IP 中,找到网络上的一台机器,依靠 IP 地址,目前有 IPv4 和 IPv6 两个版本。
其中 IPv4 大致如此:127.255.255.255,而 IPv6 则是:2001:db8:2de:0:0:0:0:e13。
这是一种计算机容易理解的形式,人类则不然。
很难想象,当你想要访问某个网站的时候,要输入 IPv4 那一段夹杂数字和.的字符串。
输入 plantree.me 远比13.215.239.219 简单,而且容易理解。
域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
用户输入域名后,DNS 将其翻译为对应的 IP 地址,请求被发送给相应的网络服务。
整个过程对使用者完全透明。
DNS 最早是 1983 年由保罗·莫卡派乔斯(Paul Mockapetris)发明,原始的技术规范发布在 RFC 882。
目前已经稳定运行了超过 40 年!
另外,根据 Cloudflare 的官方 文档🔗,1.1.1.1 解析器平均每天处理 约 1.9 万亿 次查询,而该解析器,还只是众多 DNS 解析器中的一个。
毫无疑问,DNS 几乎是互联网诞生以来存在时间最久、流量最多,也是规模最大的一个分布式系统,是互联网的重要基建。
使用起来却如此简单,几乎感受不到它的存在。
这样一个设计精妙的系统,背后一定做对了什么。
2. 使用指南
对于普通用户,使用 DNS 是一件和呼吸一样轻松的事情。
因为 DNS 解析的方式内置在操作系统里,像 Windows 和 Linux,都提供了类似 gethostbyname() 的系统调用接口,同时有用于加速查找的缓存设计。
浏览器这一类上层应用,会在适当的时候调用,将域名转换为正确的 IP 地址。
对于网站发布者,通常需要配置 DNS 记录,帮助 DNS 系统将 IP 地址与该域关联。
常见的记录类型有:
- A 记录:保存域的 IP 地址的记录
- AAAA 记录:包含域的 IPv6 地址的记录
- CNAME 记录:将一个域或子域转发到另一个域,不提供 IP 地址
- NS 记录:存储 DNS 条目的名称服务器
- MX 记录:将邮件定向到电子邮件服务器
- TXT 记录:可让管理员在记录中存储文本注释
我自己比较常用的是 A 记录和 CNAME 记录,前者负责将主域与服务器 IP 绑定,后者将子域转发到类似 Netlify 这样的服务托管商。
3. 架构
一次完整的 DNS 查询过程大致如此:
当你访问 www.example.com 时,
-
客户端向本地 DNS(递归解析器)发起查询
承担所有后续工作的是递归解析器(resolver),通常是运营商或公共 DNS(如
1.1.1.1)。 -
如果没有缓存,递归解析器询问根服务器
根服务器不会告诉你 IP,而是指向
.comTLD 服务器。 -
向 TLD 服务器询问
TLD 返回
example.com的权威 DNS 地址。 -
向权威 DNS 询问
最终得到
example.com的 IP。 -
结果缓存,并返回客户端
后续一段时间内再次查询,无需重复整个流程。
由此可见,DNS 的整体架构,很像是一棵树。
树的顶层,是一组根服务器(根域),目前有 13 个,并通过 Anycast 技术架设镜像,减少单点故障。
根域下一层,是 TLD 服务器(顶级域),例如 com 是网址 example.com 的顶级域。
顶级域下一层,是权威服务器(权威域),权威服务器包含特定于其服务域名的信息(例如,example.com)。这里通常也是域名查找的最后一步。
层次关系非常清楚。
所有域名和 IP 地址的关联都存储在这棵树上。
每一层都只掌握下一层的信息,关系简单。
每一层都有冗余(Anycast 技术)和缓存(Cache/TTL),容错的同时,减少查询延时。
每一层之间的数据通信,可以通过 UDP/TCP/HTTP 等多种纯文本协议,结构清晰,易于迭代。另外,一种新的技术方案,DNSSEC,通过加密签名验证记录真实性,可防止污染与劫持。
4. 总结
DNS 已经稳定运行了几十年,面对无数次流量攻击后依然可以正常工作。
我认为背后的原因主要有两个:简单但结构清晰的设计,不断迭代。
DNS 整个系统看似复杂,抽象到最后,只有一棵树,节点无状态,多副本,层次明了,通过文本协议通信。
去中心化、无状态、冗余备份、缓存,这些分布式系统设计中的常见理念,在 DNS 中都有着一一对应。
从看到到看懂,这个过程也许漫长,但异常精彩。
(完)
参考
- 本文作者:Plantree
- 本文链接:https://plantree.me/blog/2025/how-dns-works/
- 版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于: 2025-11-18T07:13:30+08:00