一次 DNS 解析到底发生了什么:从浏览器缓存到权威服务器

king
2026-11-08 / 3 评论 / 9 阅读

域名系统是互联网里最容易被忽视的一层。它平时安静,一旦出问题,表现却千奇百怪:有的地区能访问、有的不能;刚改完解析要等很久;邮件进了垃圾箱。

一、解析链路

浏览器输入 example.com 后,大致经历:

  1. 浏览器缓存:Chrome 有自己的 DNS 缓存,TTL 很短
  2. 操作系统缓存 / hosts:/etc/hosts 优先级很高,常被用来做临时覆盖
  3. 本地递归解析器:运营商或公共 DNS(如 223.5.5.5、8.8.8.8)
  4. 根服务器:告诉你 .com 的权威服务器在哪
  5. 顶级域服务器:告诉你 example.com 的权威服务器
  6. 权威服务器:返回最终记录(A/AAAA/CNAME 等)

如果本地解析器缓存里有记录,第 4 到 6 步会跳过。所以“改了解析没生效”,绝大多数情况是缓存还没过期。

二、TTL 的真实含义

TTL 是“允许缓存多久”,不是“一定会缓存这么久”。递归解析器可以自行决定提前丢弃,也可能在过期后继续短暂使用旧记录(stale)。

实践建议:

  • 变更前先把 TTL 调小(比如 300 秒),等旧 TTL 过期后再改
  • 改完观察一段时间,再调回较大值
  • 重要域名不要设置过长的 TTL,否则故障时无法快速切走

三、CNAME 与“解析链”

www.example.com CNAME example.com 意味着解析器要继续查 example.com。链越长,出错点越多,解析也越慢。

CDN 通常要求你用 CNAME 指向它们的域名,这就是为什么“接了 CDN 之后解析变复杂了”。有些厂商支持 CNAME 拉平(在权威侧直接返回 A 记录),能减少一跳。

四、常见故障与判断方法

  • NXDOMAIN:域名或记录不存在。先确认拼写、确认记录类型(A 还是 AAAA)
  • SERVFAIL:递归服务器失败,常见于权威不可达或 DNSSEC 校验失败
  • 超时:UDP 53 被拦截,或权威服务器无响应
  • 解析到错误 IP:本地 DNS 劫持、hosts 覆盖、或缓存未过期

排查顺序应该是:本机 hosts → 本地缓存(dig +norecurse)→ 公共 DNS(dig @223.5.5.5)→ 权威服务器(dig @ns1.example.com)。逐层排除,比反复刷新有效得多。

五、加密解析与隐私

传统 DNS 是明文的,链路上任何人都能看到你访问了哪些域名。DoH(DNS over HTTPS)和 DoT(DNS over TLS)把查询加密,代价是:

  • 企业内网的审计与分流会失效
  • 某些系统解析行为变得不透明
  • 性能上多一次 TLS 握手(可复用)

是否启用,取决于你更在意隐私还是可管理性。

结语

DNS 的问题往往不是“坏了”,而是“和你以为的不一样”。把缓存层级和 TTL 语义搞清楚,能省下大量无谓的等待和猜测。

0

评论 (3)

取消
  • 头像
    king 作者
    Windows · Edge
    画图评论
    回复
  • 头像
    x
    Windows · Edge
    评论测试玫瑰
    回复
  • 头像
    1
    Windows · Edge
    123456
    回复