← 返回题目列表

DNS 的递归查询和迭代查询有什么区别?

高频 中等 第 10 / 27 题 更新于 2026/07/28
DNS递归查询迭代查询域名解析

简化版

区别在谁负责查到底递归查询:我把问题全权委托给对方,对方负责一路查到最终答案再返回给我(我只问一次、只等一个结果)。迭代查询:对方不替我查到底,只告诉我「下一步该问谁」,我拿着这个指引自己再去问下一个。实际 DNS 中:你 → 本地 DNS 是递归本地 DNS → 根/TLD/权威是迭代

详细版

递归查询(Recursive):请求方要求 DNS 服务器「给我最终答案」,服务器承担起「查到底」的责任——它会自己去问后续所有服务器,直到拿到 IP,再一次性返回。请求方轻松(只问一次),压力在被请求的服务器。

迭代查询(Iterative):被问的服务器不承担查到底的责任,如果它不知道答案,就返回「你该去问下一级的哪台服务器」这个指引(referral),让请求方自己继续问。请求方要一步步问下去。

在真实 DNS 解析里两者配合

你(客户端)
  │  ① 递归查询:「告诉我 www.example.com 的 IP」(我只问这一次)

本地 DNS 服务器(递归解析器)
  │  ② 迭代查询:问根 → 根说「去问 .com 的 TLD」
  │  ③ 迭代查询:问 TLD → 说「去问 example.com 的权威服务器」
  │  ④ 迭代查询:问权威 → 返回真实 IP

本地 DNS 把 IP 返回给你(并缓存)

完整版教学

一、核心差异:查到底的责任在谁身上

两种查询最本质的区别是**「谁来承担一路查到最终答案的工作」**:

  • 递归:责任在被问的服务器。你只管发一个问题、等一个最终答案,中间的层层查询全由它代劳。就像你问秘书「查到 X 的电话」,秘书自己打一堆电话最后把号码给你。
  • 迭代:责任在发问的一方。被问者只给「下一步线索」,你得自己顺着线索一个个去问。就像你问「X 的电话谁知道」,对方说「问财务部」,你再自己去问财务部。

二、为什么要这样分工

真实 DNS 里,「你→本地 DNS」用递归,「本地 DNS→上游」用迭代,这个分工是有道理的:

  • 对客户端用递归:你的电脑不该也没能力去满世界问根、TLB、权威服务器。把这个复杂过程委托给本地 DNS(专业的递归解析器),你只需发一次请求、拿一次结果,简单省事。
  • 对上游用迭代:根、TLD 这些服务器要服务全球海量请求,如果它们也用递归(帮每个请求查到底),负载会爆炸。所以它们只做最轻的事——返回一个指引就完事,把继续查询的活儿推给发问的本地 DNS。这样根/TLD 服务器才扛得住全球的查询量。

可以这样理解:递归是「全包服务」,把复杂度收敛到本地 DNS;迭代是「只指路」,让上游服务器保持轻量、扛住高并发。

三、本地 DNS 服务器的双重身份

本地 DNS 服务器(递归解析器)很特殊——它同时扮演两个角色

  • 对下(客户端):它是「递归服务器」,接受你的递归请求,承诺给你最终答案;
  • 对上(根/TLD/权威):它是「迭代客户端」,自己顺着迭代指引一级级查询。

所以它是连接「简单的客户端」和「轻量的上游服务器」之间的枢纽,把递归的复杂度扛在自己身上,并通过缓存加速后续查询。

四、和缓存的关系

因为本地 DNS 承担了递归查询,它自然会缓存沿途拿到的结果(按 TTL)。下次再有人查同样的域名,它直接从缓存返回,不用再走一遍迭代查询。所以递归解析器既是「查询代理」,也是「缓存中心」,是 DNS 性能的关键(详见「DNS 缓存与 TTL」那道题)。

五、常见误区

  • ❌ 以为整个 DNS 解析都是递归——只有「客户端→本地 DNS」是递归,「本地 DNS→上游」是迭代。
  • ❌ 以为根/TLD 服务器会帮你查到底——它们只做迭代,返回指引,不承担查到底的责任。
  • ❌ 把「谁问的多」当区别——区别在「查到底的责任在谁」,不是问的次数。
  • ❌ 以为迭代查询是客户端做的——通常是本地 DNS 对上游做迭代,客户端只做一次递归请求。

六、常见误区与追问

考点正确口径
递归查询被问者负责给出最终答案或错误
迭代查询被问者给下一跳线索,查询方继续问
DNS 常见组合客户端递归问本地解析器,本地解析器迭代问权威链路
client => resolver: please give final answer
resolver -> root: where is .com?
resolver -> TLD: where is example.com?
resolver -> authoritative: A www.example.com?

递归像“帮我办完”,迭代像“告诉我下一站”;DNS 解析通常两种都会出现。

  • 误区:DNS 解析全程都是递归。 客户端到递归解析器通常是递归,递归解析器到 root/TLD/权威通常是迭代。
  • 误区:迭代查询一定返回最终 IP。 迭代查询常返回下一层服务器地址,让查询方继续问。
  • 误区:递归解析器就是权威 DNS。 递归解析器替客户端查,权威 DNS 管理并回答自己负责的 zone。
  • 追问:为什么不让客户端自己迭代查? 会增加客户端复杂度和延迟,缓存复用也更差。
  • 追问:递归解析器为什么能加速? 它缓存大量域名记录,多用户共享缓存可减少完整查询链路。
  • 追问:递归失败有哪些可能? 上游超时、权威 DNS 故障、DNSSEC 校验失败、网络拦截或本地策略限制。

七、加强记忆

递归查询:被问的服务器负责查到底、返回最终答案(请求方省事);迭代查询:被问的服务器只返回「下一步问谁」的指引,请求方自己继续问。DNS 里「客户端→本地 DNS」用递归(把复杂度委托出去),「本地 DNS→根/TLD/权威」用迭代(让上游保持轻量、扛住海量请求)。本地 DNS 对下递归、对上迭代,是枢纽兼缓存中心。