DNS 缓存链

DNS 不是只有一个缓存,而是一条从浏览器到递归解析器、再到上游转发器的多层缓存链;任意一层都可能保留旧答案,因此「清了 Windows 缓存还不行」很正常。

#type / concept #status / growing #tech / network #protocol / dns

[!info] related notes

DNS 缓存链

一句话定义

DNS 不是只有一个缓存,而是一条缓存链:每一层都可能保存答案并直接复用,任意一层保留旧数据都会让最终结果「看起来没更新」。

核心机制 / 工作原理

典型缓存链(自近及远):

浏览器缓存

操作系统 DNS 缓存

代理客户端缓存(如 Mihomo/Clash)

家庭路由器缓存

递归解析器缓存

上游转发器缓存

每一层都按 TTL 或自身策略缓存。最末端才是权威服务器(它返回的是权威数据,本身通常不「缓存」别人的答案)。

最小例子 / 最小场景

你改了 anyrouter.top 的 A 记录指向新 IP:

  • 远端 Oracle 浏览器很快拿到新 IP(它的解析路径缓存刚好过期)
  • 你本地 Chrome 仍连旧 IP(浏览器缓存未过期)
  • 清了 Windows 缓存仍不行(Mihomo/路由器/公共 DNS 还缓存着旧值)

边界与易混淆点

  • 「清了 Windows DNS 还是不行」不能证明 DNS 没问题:Windows 缓存只是链中一层(见 dns-negative-failure-caching 中关于 Clear-DnsClientCache 的范围)。
  • 不同层缓存策略不同:浏览器可能缓存更久、代理客户端有自己的 TTL 处理、递归解析器受 TTL + Serve Stale 影响。
  • 排障要逐层定位「哪一层给了旧答案」(见 dns-systematic-diagnosis 第一至第四层)。
  • 缓存延长错误结果,但通常不是根因——根因往往是「解析路径本身就返回不同答案」(见 why-same-domain-different-ipdns-wrong-ip-tls-handshake-failure-debug)。
创建于 2026/7/31 更新于 2026/7/31