Serve Stale
Serve Stale(RFC 8767)允许递归解析器在权威服务器暂时不可用时,继续提供已经超过原始 TTL 的过期数据,以提升可用性。
#type / concept
#status / growing
#tech / network
#protocol / dns
[!info] related notes
Serve Stale
一句话定义
Serve Stale(RFC 8767) 允许递归解析器在权威服务器暂时不可用时,继续回答那些已经超过原始 TTL 的过期数据,用「可能稍旧但还能通」换取可用性。
核心机制 / 工作原理
正常情况下,TTL 到期后解析器应重查。但如果:
- 权威服务器宕机/网络分区
- 重查失败(超时、SERVFAIL)
递归解析器可以选择返回最后一次成功缓存的、已过期的数据,而不是报错。RFC 8767 明确了这种「超过 TTL 仍保留并使用」的做法,并建议一个最大「serve stale」窗口(如 30 天上限,按实现而定)。
最小例子 / 最小场景
anyrouter.top 的权威因故障不可达,但你的递归解析器一周前缓存了 155.102.x.x。启用 Serve Stale 时,你仍能被解析到该 IP(假设 IP 本身还有效),网站不至于完全打不开。
边界与易混淆点
- Serve Stale 是可用性兜底,不是正确性保证:返回的可能是过期 IP,若源站也变了就会连错。
- 它进一步说明:「TTL 到期」不等于「世界上所有缓存立刻不再使用该答案」。
- 与负/失败缓存的关系:Serve Stale 针对「原本成功、现已过期」的数据;负缓存针对「不存在/失败」(见 dns-negative-failure-caching)。
- 排障含义:你看到旧 IP,可能是因为 Serve Stale 在兜底,而不一定是因为本地没清缓存——要结合时间戳与权威当前数据判断(见 dns-systematic-diagnosis)。