DNS 是什么:从域名到 IP 的全过程拆解
理解互联网的地址簿。从根服务器到本地缓存,掌握域名解析的完整流程、关键优化和安全考量。
1. DNS 的起源和核心问题
DNS(Domain Name System)是互联网的地址簿。它的核心问题非常简单:人类容易记住 google.com,但计算机只能通过 IP 地址(如 142.250.185.46)进行通信。DNS 的使命就是在域名和 IP 地址之间建立映射。
DNS 由 Paul Mockapetris 在 1983 年设计,首次发表在 RFC 882 中(随后的 RFC 883 和现在的 RFC 1035 是标准规范)。在 DNS 出现前,互联网使用 hosts 文件(一个集中管理的文本文件),但这种方式很快变得不可扩展。DNS 采用分布式架构,使得互联网可以从几百台主机扩展到今日的数十亿台设备。
2. 域名的层级结构
域名按照层级组织,从右到左递进。以 www.google.com.example.co.uk 为例:
域名层级示例:
.(根) ← 隐含,完整域名末尾实际有个点uk ← 一级域名(TLD,Top Level Domain)co.uk ← 二级域名(SLD,Second Level Domain)example.co.uk ← 三级域名(二级注册域名)google.com.example.co.uk ← 四级域名www.google.com.example.co.uk ← 五级域名(主机名)实际使用中:
- 根域(.):由 13 组根服务器维护,全球分布。
- 顶级域(TLD):.com、.org、.net、.cn、.uk 等,由 ICANN 管理,约 1500+ 个。
- 二级注册域:用户向域名注册商购买的实际域名。google.com 中,google 是二级域,com 是 TLD。
- 子域:由域名所有者自由设置。www 和 api 是 google.com 的子域。
这种分层设计使得 DNS 可以分布式管理:根服务器只需知道 TLD 服务器,TLD 服务器只需知道注册域的权威服务器,权威服务器管理所有子域记录。
3. 根服务器和权威 DNS 服务器
DNS 系统的顶端是 13 个根服务器(Root Nameservers),标记为 a.root-servers.net 到 m.root-servers.net。虽然标记为 13 个,但通过 IP anycast 技术(多个物理服务器共享同一 IP),实际上全球有数百个根服务器实例。
根服务器的职责简单:告诉查询者"你要查 .com,请问根服务器,答复是该联系 VeriSign 的 .com TLD 服务器"。根服务器每天处理数百亿次查询。
在第二层,每个 TLD(.com、.cn 等)都有自己的权威服务器。例如,.com TLD 由 VeriSign 运营,权威服务器维护所有 .com 域的注册信息,告诉查询者"google.com 的权威服务器是 ns1.google.com"。
在第三层,每个注册域所有者配置自己的权威 DNS 服务器(通常由域名注册商或 DNS 服务商提供,如 Route53、Cloudflare DNS)。权威服务器存储该域所有子域的完整记录(A 记录、MX 记录等)。
4. DNS 查询过程:递归 vs 迭代
当你在浏览器输入 www.google.com 时,DNS 查询会经历以下步骤(递归查询模式):
完整 DNS 查询流程(8 个步骤):
- 用户 → 本地 DNS 递归解析器:浏览器发送递归查询"请帮我找 www.google.com 的 IP"到 ISP DNS 递归解析器(如 8.8.8.8)。
- 递归解析器 → 根服务器:解析器向根服务器发送迭代查询"www.google.com 是什么?"
- 根服务器 → 递归解析器:根服务器回复"我不知道,但 .com TLD 服务器会知道。地址是 a.gtld-servers.net"
- 递归解析器 → TLD 服务器:解析器向 .com TLD 服务器查询"www.google.com 是什么?"
- TLD 服务器 → 递归解析器:TLD 服务器回复"我不知道,但 google.com 的权威服务器会知道。地址是 ns1.google.com"
- 递归解析器 → 权威服务器:解析器向 google.com 的权威服务器查询"www.google.com 是什么?"
- 权威服务器 → 递归解析器:权威服务器回复"www.google.com 的 A 记录是 142.250.185.46"
- 递归解析器 → 用户:解析器将结果返回给浏览器
这个过程中,递归查询(Recursive Query)是用户到递归解析器的交互——用户信任解析器会帮助查找答案。迭代查询(Iterative Query)是递归解析器到其他 DNS 服务器的交互——每个服务器只说"我不知道,但你可以问这个服务器"。
完整查询可能需要 4 跳(用户→递归→根→TLD→权威)和多个往返。首次查询可能需要 200-500ms,但结果会被缓存以加速后续查询。
5. DNS 记录类型详解
DNS 权威服务器存储不同类型的记录,用来指导不同用途的查询:
| 记录类型 | 用途 | 示例 |
|---|---|---|
| A | 域名到 IPv4 地址映射 | google.com A 142.250.185.46 |
| AAAA | 域名到 IPv6 地址映射 | google.com AAAA 2607:f8b0:4004:80e::200e |
| CNAME | 规范名称,域名别名 | www.google.com CNAME google.com |
| MX | 邮件交换,指向邮件服务器 | google.com MX 10 aspmx.l.google.com |
| NS | 权威名称服务器 | google.com NS ns1.google.com |
| SOA | 起始授权,区域配置 | 包含主服务器、刷新间隔等 |
| TXT | 文本记录,SPF、DKIM、验证 | v=spf1 include:_spf.google.com ~all |
| SRV | 服务记录,指向特定服务 | _sip._tcp.example.com SRV 10 60 5060 sipserver.example.com |
| CAA | 证书认证授权,SSL 证书签发限制 | example.com CAA 0 issue "letsencrypt.org" |
6. TTL 缓存机制
DNS 查询每次都走完整的递归流程效率太低。为了加速,每条 DNS 记录都有一个 TTL(Time To Live)值,单位通常是秒。
缓存分为多层:
- 浏览器缓存:最快,但容量小,通常 TTL 较短。
- 操作系统缓存:所有应用共享,macOS/Windows 都有 DNS 缓存。
- ISP DNS 递归解析器缓存:由网络运营商维护,缓存最全且最稳定。
- 权威服务器:每条记录有自己的 TTL,权威服务器不负责缓存,只负责回复真实值。
TTL 的选择是一个权衡:
- TTL 很长(如 86400 秒 = 1 天):很少需要重新查询,节省带宽和服务器资源,但修改 DNS 记录后需要等待缓存过期才能生效。
- TTL 很短(如 60 秒):修改 DNS 快速生效,适合需要频繁切换 IP 的场景(如故障转移、负载均衡),但增加查询频率,服务器负担加重。
- 典型做法:稳定的记录(如官方网站)设置 3600-86400 秒,变动频繁的记录(如 CDN 切换)设置 300-900 秒。
7. DNS over HTTPS(DoH)和 DNS over TLS(DoT)
传统 DNS 使用明文 UDP 传输,这带来两个问题:隐私泄露(ISP 可以看到你查询了哪些域名)和可能被拦截/篡改(中间人攻击或 DNS 污染)。
为了解决这些问题,业界推出了加密 DNS:
- DNS over TLS(DoT):使用 TLS 加密 DNS 查询,标准端口 853。在传输层加密,性能较好。
- DNS over HTTPS(DoH):将 DNS 查询包装在 HTTPS 请求中,标准端口 443。外观上与普通 HTTPS 流量无异,难以被检测和拦截。浏览器(Chrome、Firefox、Safari 等)原生支持。
DoH/DoT 还有额外好处:即使在限制 DNS 的网络(如公共 WiFi 限制访问)也能正常查询,因为 HTTPS 443 端口通常都开放。缺点是略微增加延迟(加密/解密开销),但通常不超过 10-20ms。
主流 DoH 服务商包括 Cloudflare(1.1.1.1)、Google(8.8.8.8)、Quad9(9.9.9.9)。
8. CDN 的 DNS 智能解析
大型网站使用 CDN(如 Cloudflare、Akamai、AWS CloudFront)来加速内容分发。CDN 的核心技巧是利用 DNS 实现智能地理位置解析。
工作原理:
- 用户在深圳查询 www.example.com,DNS 请求到达深圳的 ISP 递归解析器。
- 递归解析器向 CDN 权威服务器查询,带上自己的 IP 地址(客户端子网地址,EDNS Client Subnet)。
- CDN 权威服务器根据客户端所在位置,返回离客户端最近的 CDN 节点 IP。如果用户在深圳,返回深圳节点 IP;如果在北京,返回北京节点 IP。
- 用户的流量直接连接到最近的节点,内容获取延迟最小。
这种动态 DNS 解析完全透明,用户无需任何配置。CDN 服务商还会监控节点健康状况,如果某个节点故障,DNS 会自动返回备用节点 IP。
9. 本地 hosts 文件的优先级
操作系统的 DNS 解析优先级如下:
DNS 查询优先级(从高到低):
- 本地 hosts 文件:macOS: /etc/hosts,Windows: C:\Windows\System32\drivers\etc\hosts
- 浏览器 DNS 缓存
- 操作系统 DNS 缓存
- 配置的 DNS 解析器(ISP DNS 或自定义如 8.8.8.8)
- 网络配置中的备用 DNS(如果主 DNS 无响应)
hosts 文件的优先级最高,因此可以用来本地覆盖 DNS 解析。例如,在 hosts 中添加 127.0.0.1 local.example.com 可以让本机访问 local.example.com 时直接连接到本机的本地服务。这对开发和测试非常有用。
缺点是 hosts 文件修改后需要手动刷新 DNS 缓存才能生效(macOS: sudo dscacheutil -flushcache,Windows: ipconfig /flushdns)。
10. DNS 污染与 GFW
DNS 污染(DNS Hijacking/Spoofing)是一种网络攻击和审查手段。攻击者拦截 DNS 查询,返回虚假的 IP 地址,将用户重定向到恶意网站或屏蔽网站。
中国的"防火长城"(GFW)著名的就是 DNS 污染。当用户查询某些被屏蔽的域名时,GFW 会拦截 DNS 请求,返回虚假的 IP(通常是某个黑洞 IP 如 1.1.1.1 或其他无效地址),导致用户无法访问真实网站。
防护 DNS 污染的方法包括:
- 使用境外公共 DNS:Cloudflare 1.1.1.1、Google 8.8.8.8 或 Quad9 9.9.9.9,这些大厂服务器通常在中国能部分工作,但也可能被部分拦截。
- 使用 DNS over HTTPS(DoH):将 DNS 请求加密封装在 HTTPS 中,难以被识别和拦截。浏览器原生支持。
- 使用 VPN 或代理:流量绕过 GFW,使用代理提供的 DNS 服务。
- DNSSEC 验证:对 DNS 回复进行加密签名验证,检测篡改。
11. Cloudflare 1.1.1.1 的优势
Cloudflare 1.1.1.1 是目前最受欢迎的公共 DNS 服务,有以下优势:
- 超快速:Cloudflare 全球有 200+ 个数据中心,用户总能找到最近的节点。平均查询延迟约 15ms(远低于传统 DNS 的 100-200ms)。
- 隐私优先:Cloudflare 承诺不记录用户的 DNS 查询日志(与 Google 8.8.8.8 的政策不同,Google 保留 24-48 小时日志用于改进服务)。
- 安全阻止:1.1.1.1 可以选择 1.1.1.2(恶意软件防护)或 1.1.1.3(成人内容过滤),在 DNS 层阻止危险网站。
- 支持 DoH 和 DoT:加密 DNS 支持良好。
- 透明度:Cloudflare 定期发布透明度报告,接受第三方安全审计。
配置方法极简:在网络设置中将 DNS 服务器改为 1.1.1.1 和 1.0.0.1(备用),立即生效。无需重启,所有应用自动使用新 DNS。
12. DNSSEC:DNS 的数字签名
DNSSEC(DNS Security Extensions)通过数字签名保护 DNS 记录的真实性。每条 DNS 记录都用私钥签名,DNS 客户端可以用公钥验证签名,确认记录来自权威服务器且未被篡改。
DNSSEC 链条:
- 权威服务器用自己的私钥签名 DNS 记录(RRSIG 记录)。
- 权威服务器发布自己的公钥和 DS 记录(Delegation Signer)。
- TLD 服务器用自己的私钥签名权威服务器的 DS 记录。
- 根服务器用自己的私钥签名 TLD 服务器的 DS 记录。
- 客户端从根开始逐级验证签名链。
好处是完全防止 DNS 污染和中间人攻击——伪造的 DNS 记录无法通过签名验证。缺点是增加查询的计算和网络开销(DNSSEC 回复包通常更大),部署复杂度高。目前约 10-15% 的域名启用了 DNSSEC。
13. DNS 故障排查和实际工具
DNS 问题会导致网站无法访问。以下是常见的排查命令:
# 查看本机配置的 DNS(macOS)
cat /etc/resolv.conf
scutil --dns
# 查询 DNS 记录
nslookup google.com
dig google.com
dig google.com +trace # 显示完整递归过程
dig @8.8.8.8 google.com # 指定 DNS 服务器
# 检查 DNS 传播(查看全球不同 DNS 的回复)
host -v google.com
# 刷新本地 DNS 缓存
sudo dscacheutil -flushcache (macOS)
ipconfig /flushdns (Windows)
sudo systemctl restart systemd-resolved (Linux)
如果 ping google.com 失败但 ping 其 IP 地址成功,问题在 DNS。如果两者都失败,问题在网络连接。
14. 总结:DNS 系统全景
DNS 是互联网最关键的基础设施,承载着将易记的域名转换为 IP 地址的使命。从 1983 年的分布式设计到今日的加密化发展,DNS 几乎没变过本质,但在安全、隐私、性能方面不断进化。
记住这些关键点:
- DNS 查询分为递归(用户→ISP DNS)和迭代(ISP DNS→根→TLD→权威)两部分。
- TTL 缓存是 DNS 性能的关键,合理设置 TTL 能加速查询或快速响应变更。
- 使用 DoH/DoT 加密 DNS 能防止隐私泄露和 DNS 污染。
- Cloudflare 1.1.1.1 是速度和隐私的最佳平衡,值得尝试。
- DNSSEC 提供了 DNS 层的防篡改保护,但还未大规模部署。
- CDN 通过地理位置感知的 DNS 解析实现全球加速。