否定缓存是什么
名字不存在、或者该名字下没有所查类型这两类否定结果也会被缓存,缓存时长取自响应里 SOA 记录的最小值字段。抓包判据是:短时间内对同一个不存在的名字重复查询,却看不到对应的回源查询,说明否定结果在解析器或客户端一侧被命中了。理解这一点对上线流程有直接影响——新增记录之后,旧客户端可能因为否定缓存仍在有效期内而继续解析不到。排查时要同时看 SOA 的最小值字段与实际重复查询的间隔。
基本信息
| 协议依据 | RFC 2308(否定缓存) |
|---|---|
| 抓包字段 | dns.soa.minimum |
| 生效范围 | 名字不存在与该名字无所查类型两类结果 |
| 观察方法 | 重复查询间隔小于最小值却只见一次回源 |
| 业务影响 | 新建记录在否定缓存期内不会生效 |
典型使用场景
- 上线验证:新记录配置后确认客户端能否立即解析到
- 缓存行为确认:判断是否存在否定缓存以及有效期大致多长
- 故障复盘:解释为何配置正确但部分客户端仍报解析失败
- 性能优化:合理的否定缓存能减少重复回源查询
- 变更窗口规划:把否定缓存时间计入变更生效的预期时间
核对方法
核对方法
dns.soa.minimum # 否定缓存时长上限
# 同名重复查询多次,回源查询却只有一次
# 说明后续查询命中了否定缓存
# 记录新增后仍解析不到 → 先看是否在有效期内否定缓存核对
| 现象 | 解释 | 处置 |
|---|---|---|
| 重复查询无回源 | 命中否定缓存 | 属预期行为 |
| 记录新增后仍解析不到 | 否定缓存尚未过期 | 等待过期或评估最短缓存设置 |
| 缓存时间偏长 | 最小值字段设置过大 | 评估变更生效延迟是否可以接受 |
否定缓存有效期内新建的记录不会生效,这是协议规定的预期行为,排查时不要把它当成解析器故障,而应该把等待时间纳入变更计划。
不同解析器对最小值字段的采用细节略有差异,评估变更生效时间要以实测为准,只按配置值精确推算并不可靠。