DNS
DNS 把域名翻译成 IP 地址——一个全球分布式、最终一致、缓存驱动的数据库。本章讲一次解析的完整过程、缓存与 TTL、记录类型,以及 DNS 作为负载均衡工具的用法。
命名空间是一棵树:根(.)→ 顶级域(com、org、cn)→ 二级域(example.com)→ 主机(www.example.com)。授权(delegation):每个域的所有者管理自己的子域——根只告诉谁管 .com,.com 只告诉谁管 example.com——去中心化的可扩展性由此而来。
一次解析的完整过程
Section titled “一次解析的完整过程”浏览器缓存 → 系统缓存 → 本地 DNS(递归解析器) ① 问根:www.example.com 的 NS? ② 根答:.com 的服务器地址 ③ 问 .com:答 example.com 的 NS ④ 问 example.com 的 NS:答 A 记录(IP) ⑤ 解析器缓存结果,返回给客户端递归查询(解析器替你问到底)与迭代查询(解析器逐级问)是两种角色:客户端只发一次递归请求,解析器逐级迭代。根服务器只有 13 个地址但有上千个实例(anycast)——同一地址广播到全球多个机房,路由协议自动把请求送到最近实例(→ 路由)。
缓存与 TTL
Section titled “缓存与 TTL”缓存让 DNS 可扩展,也让变更传播慢:解析器按 TTL(秒~天)缓存记录,变更要等 TTL 过期才全局生效。TTL 是变更速度与查询负载的旋钮:负载均衡的记录用短 TTL(分钟),稳定记录用长 TTL(天)。降低 TTL 再改记录是变更的标准流程——先降 TTL,等旧值过期,再改。
| 类型 | 含义 |
|---|---|
| A / AAAA | 域名 → IPv4 / IPv6 |
| CNAME | 别名(指向另一个域名) |
| NS | 域的授权服务器 |
| MX | 邮件交换服务器 |
| TXT | 任意文本(SPF、DKIM、域验证) |
| SRV | 服务发现(端口+权重) |
DNS 作为负载均衡与故障切换
Section titled “DNS 作为负载均衡与故障切换”DNS 天然是流量分配工具:
- 轮询(round-robin DNS):一个域名多条 A 记录,解析器轮着返回——最简单的负载均衡,无健康检查;
- 地理 DNS:按请求来源返回最近机房(CDN 的第一层分流);
- 故障切换:健康检查剔除故障 IP——但受 TTL 限制,切换是分钟级不是秒级。
DNS 是很多故障的第一嫌疑人:解析失败、缓存未过期、劫持——排查服务故障时先查 DNS。
DNSSEC 与 DoH
Section titled “DNSSEC 与 DoH”- DNSSEC:记录带密码学签名,客户端验证——防止劫持与伪造(→ 哈希函数与消息认证);部署缓慢(信任链要逐级建立);
- DoH/DoT(DNS over HTTPS/TLS):解析流量加密,防窃听与中间盒干扰——把"谁在查什么"藏进 HTTPS。
- 层次化命名 + 逐级授权 = 去中心化的可扩展性;递归与迭代是两种角色
- 缓存让 DNS 可扩展,也让变更传播慢;TTL 是变更速度与负载的旋钮
- 根服务器只有 13 个地址但有上千个实例(anycast)
- DNS 是流量分配工具:轮询、地理分流、故障切换(受 TTL 限制)
- DNS 是很多故障的第一嫌疑人;DNSSEC 防劫持,DoH 防窃听