← [ BACK_TO_NOTES ]

DNS 缓存链

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

#concept #growing #network #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-ip、dns-wrong-ip-tls-handshake-failure-debug)。
创建于 2026/7/31 更新于 2026/7/31
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本