5月29日 22:48
DNS 递归查询和迭代查询有什么区别?
递归查询:客户端问解析器,解析器负责从头到尾查完返回最终结果——客户端只发一次请求。迭代查询:解析器问根服务器拿到 TLD 地址,再问 TLD 拿到权威地址,再问权威拿到最终 IP——解析器自己一步步问。实际流程:客户端→解析器是递归,解析器→根/TLD/权威是迭代。
追问
为什么不全用递归?
根/TLD 服务器不提供递归服务——它们服务全球数十亿客户端,每个递归请求都打到根服务器扛不住。根只告诉你下一步问谁(迭代),解析器负责串联。
解析器怎么知道根服务器地址?
内置的根提示文件(root hints),包含 13 组根服务器的 IP。BIND/Unbound 等软件自带此文件。
递归查询的性能瓶颈在哪?
冷启动(缓存全空)需要 4 次 RTT:解析器→根→TLD→权威→拿到 IP。热缓存时 1 次 RTT 甚至 0(本地缓存命中)。解析器缓存命中率是核心指标——正常 >90%。
什么是转发解析器?
不直接迭代查询,而是把请求转发给上游解析器(如企业 DNS 转发给 8.8.8.8)。减少出口 IP 方便防火墙管理。缺点:多一跳延迟,上游故障全部影响。
DNS 预取(Prefetching)是什么?
解析器在 TTL 即将过期前主动刷新缓存,避免用户请求命中过期缓存触发完整迭代查询。用户无感知,缓存保持热度。