跳转到内容

DNS

DNS 把域名翻译成 IP 地址——一个全球分布式、最终一致、缓存驱动的数据库。本章讲一次解析的完整过程、缓存与 TTL、记录类型,以及 DNS 作为负载均衡工具的用法。

命名空间是一棵树:根(.)→ 顶级域(com、org、cn)→ 二级域(example.com)→ 主机(www.example.com)。授权(delegation):每个域的所有者管理自己的子域——根只告诉谁管 .com,.com 只告诉谁管 example.com——去中心化的可扩展性由此而来。

浏览器缓存 → 系统缓存 → 本地 DNS(递归解析器)
① 问根:www.example.com 的 NS?
② 根答:.com 的服务器地址
③ 问 .com:答 example.com 的 NS
④ 问 example.com 的 NS:答 A 记录(IP)
⑤ 解析器缓存结果,返回给客户端

递归查询(解析器替你问到底)与迭代查询(解析器逐级问)是两种角色:客户端只发一次递归请求,解析器逐级迭代。根服务器只有 13 个地址但有上千个实例(anycast)——同一地址广播到全球多个机房,路由协议自动把请求送到最近实例(→ 路由)。

缓存让 DNS 可扩展,也让变更传播慢:解析器按 TTL(秒~天)缓存记录,变更要等 TTL 过期才全局生效。TTL 是变更速度与查询负载的旋钮:负载均衡的记录用短 TTL(分钟),稳定记录用长 TTL(天)。降低 TTL 再改记录是变更的标准流程——先降 TTL,等旧值过期,再改。

类型含义
A / AAAA域名 → IPv4 / IPv6
CNAME别名(指向另一个域名)
NS域的授权服务器
MX邮件交换服务器
TXT任意文本(SPF、DKIM、域验证)
SRV服务发现(端口+权重)

DNS 天然是流量分配工具:

  • 轮询(round-robin DNS):一个域名多条 A 记录,解析器轮着返回——最简单的负载均衡,无健康检查;
  • 地理 DNS:按请求来源返回最近机房(CDN 的第一层分流);
  • 故障切换:健康检查剔除故障 IP——但受 TTL 限制,切换是分钟级不是秒级。

DNS 是很多故障的第一嫌疑人:解析失败、缓存未过期、劫持——排查服务故障时先查 DNS。

  • DNSSEC:记录带密码学签名,客户端验证——防止劫持与伪造(→ 哈希函数与消息认证);部署缓慢(信任链要逐级建立);
  • DoH/DoT(DNS over HTTPS/TLS):解析流量加密,防窃听与中间盒干扰——把"谁在查什么"藏进 HTTPS。
  • 层次化命名 + 逐级授权 = 去中心化的可扩展性;递归与迭代是两种角色
  • 缓存让 DNS 可扩展,也让变更传播慢;TTL 是变更速度与负载的旋钮
  • 根服务器只有 13 个地址但有上千个实例(anycast)
  • DNS 是流量分配工具:轮询、地理分流、故障切换(受 TTL 限制)
  • DNS 是很多故障的第一嫌疑人;DNSSEC 防劫持,DoH 防窃听