1. DNS 解析的完整路径中递归查询与迭代查询的差别、各级缓存的 TTL 控制与解析失败时的降级顺序
简要说明 DNS 解析的完整路径,递归查询与迭代查询的区别,各层缓存的 TTL 控制,以及解析失败时有哪些降级顺序?
- 递归查询(resolver 替客户端完成)与迭代查询(逐级返回下一跳权威)的区别
- 从根服务器 → 顶级域 → 权威的逐级迭代过程
- 各级缓存(本地 resolver、OS、应用)的 TTL 控制与过期策略
客户端发起解析时,先查本地缓存(应用层/OS 层),未命中则交给递归 resolver(如 8.8.8.8 或运营商 DNS)。递归 resolver 对客户端来说是"递归查询"——它替客户端完成全部解析;而 resolver 对根、顶级域、权威服务器则是"迭代查询",根服务器不会给出最终答案,而是返回下一级(如 .com)的 NS 地址,resolver 逐级向下,直到权威服务器返回 A/AAAA 记录。每级响应都带 TTL,resolver 按 TTL 缓存并递减,TTL 归零后重新向上游查询。解析失败时降级顺序一般是:先用各层缓存兜底(即使 TTL 已过仍可尝试 stale 数据),然后重新从更高层(如本地 resolver → 上游公共 DNS)重试,最后用备用解析通道(HTTPDNS/DoH)或降级到备用 IP。
理解递归/迭代的关键是"谁在替谁干活"。递归 resolver 是递归的终点,它内部用迭代完成查询。TTL 控制是缓存的核心,运维上要平衡"缩短 TTL 加快切换"与"缓存命中率"。降级顺序本质是"缓存→重试→换通道"的多级兜底。
dig +trace example.com. # 直观展示从根到权威的迭代过程
dig example.com A +noall +answer # 查看解析结果与 TTL