负缓存与失败缓存

DNS 不只缓存成功结果,也缓存「不存在」(NXDOMAIN / NODATA)和部分失败的短暂结果(如 SERVFAIL、DNSSEC 验证失败),以避免反复冲击权威服务器。

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

[!info] related notes

负缓存与失败缓存

一句话定义

DNS 不仅会缓存成功答案,还会缓存**「不存在」部分失败**的短暂结果,以减少无效重复查询对权威服务器的冲击。

核心机制 / 工作原理

正缓存(回顾)

anyrouter.top → 155.102.x.x

负缓存

  • NXDOMAIN:整个域名不存在。例如查 no-such-name.example 且确认其父域没有该名。
  • NODATA:名称存在,但没有请求的类型记录。例如 example.com 存在,但查 example.com AAAA 时没有 AAAA 记录。

负结果的缓存时长由权威 SOA 记录里的相关字段控制(如 NXDOMAIN TTLminimum)。

失败缓存

现代规范(如 RFC 2308、相关最佳实践)要求解析器对部分解析失败做短暂缓存,包括:

  • 某些 SERVFAIL(递归解析器自身或上游出错)
  • DNSSEC 验证失败(签名不对)

避免客户端不断重试,把已经出问题的权威冲垮。

最小例子 / 最小场景

你刚修好权威 DNS 配置,但部分递归解析器仍报 SERVFAIL——很可能它们在短暂缓存「验证失败/上游错」,要等这个小窗口过去才恢复。

边界与易混淆点

  • 「刚修好权威 ≠ 所有递归立刻恢复」:负/失败缓存会让旧错误延续一小段时间(这也解释了为什么排障时常要等几分钟再复测)。
  • 负缓存让「域名刚注册/刚加记录却查不到」可能只是 NXDOMAIN 还在缓存——需等负缓存过期或换未缓存的解析器验证。
  • Windows 的 Clear-DnsClientCache 只清本机系统缓存,清递归解析器/上游的负缓存(见 dns-caching-hierarchy)。
  • 失败缓存是「可用性保护」,不应被当作永久错误;诊断时要区分「真错误」与「缓存中的旧错误」(见 dns-systematic-diagnosis)。
创建于 2026/7/31 更新于 2026/7/31