Skip to content

模型Model

DNS解析、TTL与负答案缓存

DNS resolution · DNS cache · DNS TTL · Negative caching · NXDOMAIN · NODATA

沿委派链区分解析器和权威服务器,按剩余TTL计算正负缓存期限,避免把超时或旧地址当成名称事实。

形式陈述 ​

DNS把域名与类型等查询条件映射到资源记录集合,不只是一张“名称到单个IP”的表。A记录给IPv4地址,AAAA给IPv6地址,CNAME给规范名别名,NS描述委派。查询通常含名称QNAME、类型QTYPE与类别QCLASS;同一个名称的不同类型可以有不同结果和TTL。

客户端可把查询交给递归解析器。解析器从缓存或已知服务器开始,沿根、顶级域及下级区域的委派查询相应权威服务器;权威服务器负责自己区域的数据,递归解析器负责替客户端追索结果。实际可从缓存中间站开始,不必每次从根走完整条链。CNAME另引出目标名称查询,其缓存寿命与目标地址记录分别计算。

本页采用普通TTL缓存,不启用serve-stale等扩展。记录在本地时刻t插入,剩余TTL为τ,则最迟在 e=t+τ 失效;查询时刻s<e可使用并给出剩余 e−s,s≥e必须重新取得可用资料或报告解析未完成。把缓存答案转给另一缓存时不能把TTL重置为最初值。TTL限制复用时间,不保证权威数据在这段时间内不会改变。

负答案也有明确类型。NXDOMAIN表示查询到的名称不存在;NODATA表示名称存在但没有所查类型的记录,其DNS响应码通常仍为NOERROR。按RFC2308的基础缓存范围,NXDOMAIN以名称和类别复用,NODATA还必须区分类型;本文不展开CNAME、DNSSEC证明及名称不存在切断等扩展交互。可缓存负答案所附SOA给出的负TTL为SOA记录TTL与SOA.MINIMUM的较小值。

直觉

解析器回答“这是我在有效缓存期内保存的答案”,并不意味着此刻去权威服务器询问也必定得到同样内容。缓存让大多数请求少走很多路,也使新修改需要等待旧记录逐步失效。

没有得到回答,与得到“这个名称不存在”的明确回答,证据完全不同。超时可能是服务器或路径故障,不能据此合成NXDOMAIN。

例子与边界

剩余TTL不能重新计满 ​

采用一条分析用共同时间线。解析器在t=0取得api.example的A记录192.0.2.8,TTL=60。t=20回复另一个缓存时,最多附剩余40秒,后者若立即收到,仍在t=60到期。t=50权威地址改为192.0.2.9,旧缓存仍可能在t=59用剩余1秒返回旧地址;t=60不能按本页普通缓存规则继续使用它。

若下游在t=20错误地重新缓存60秒,会拖到t=80;多级缓存反复重置还能不断延长旧值寿命。链中CNAME若TTL只有30而A记录TTL为60,t=35时也不能凭尚未到期的A记录假定原别名关系仍有效。

两种负答案不能混用 ​

t=10收到absent.example的NXDOMAIN,SOA TTL=120、MINIMUM=30,负答案到t=40失效。t=25再次查询该名称可使用剩余15秒。另一名称v4only.example的AAAA查询收到NODATA,只说明没有AAAA;它仍可能有A记录,不能把该负答案用于否定A查询。

超时、SERVFAIL等是解析失败,不是上述不存在证据。解析失败缓存有另一套规范,RFC9520要求其时间范围至少1秒且最多5分钟;本页不实现该机制,也不把失败缓存条目当成名称不存在。解析器报错与名称事实应以不同状态保存。

推论与应用

DNS成功只得到连接候选,不能证明地址上的服务可达、身份正确或业务健康。已有TCP连接也不会因为DNS TTL到期就自动迁移;重建连接时怎样重新解析由应用和库决定。

DNS经常用UDP,但通用DNS实现也须支持TCP。DNS/TCP在消息前加两字节长度,与本单元的教学分帧相似,却不采用16字节教学上限。传输选择、缓存有效期和递归查询次数,都是总超时预算的一部分。

参考资料
  • RFC 1034,1987,§§4.3、5:解析、委派与缓存;RFC 1035,§§3.2.1、4.2:资源记录TTL和传输。
  • RFC 2308,1998,§§2–5:NXDOMAIN/NODATA、SOA负TTL与缓存键;RFC 9520,2024,§3.2:解析失败缓存的独立更新规则。
  • RFC 7766,2016,§§5–6、8:DNS TCP支持、连接使用及长度字段。本文未涵盖DNSSEC、DoH、DoT或serve-stale的额外合同。
关系图谱暂无已标注关系