欢迎光临
我们一直在努力

计网 13|DNS 域名解析:递归与迭代查询

第一次做 DNS 的题,我看到「本地域名服务器无缓存,用递归解析」,下意识以为「用户主机要自己一层层问根、问 .com、问权威」。

结果 2010(40) 告诉我:用户主机只发了一条请求,本地域名服务器也只发了一条。

因为「递归」的意思是「你帮我查到底,只把最终答案回给我」——请求方根本不用跑腿。这篇把递归和迭代这对最容易被混的概念一刀切开,并顺着一张查询流程图把全过程看明白。

〇、先花两分钟:DNS 是「互联网电话簿」

IP 地址像电话号码,域名像人名。人记不住 IP,所以需要一个「电话簿」把 www.baidu.com 翻译成 110.242.x.x。DNS(Domain Name System)干的就是这事。

域名空间是一棵倒置的树:

  • 根(.)在最顶;

  • 往下是顶级域 TLD(.com、.cn、.edu);

  • 再往下是二级、三级(baidu.com、www.baidu.com);

  • 每层由不同的域名服务器管辖。

一句话:DNS 把域名按层级、分给不同服务器去管,查询时从根往下一级级问。

图示:迭代查询下,本地域名服务器依次问 根 → .com → baidu.com → www.baidu.com,每级只返回「下一步该问谁」,最后拿到 IP

一、四类域名服务器

服务器管什么举例
根域名服务器 返回顶级域服务器地址 全球 13 组根
顶级域(TLD)服务器 返回该域下权威服务器地址 .com、.cn 的服务器
权威(授权)服务器 返回具体主机的 IP baidu.com 自己的服务器
本地域名服务器 你电脑实际求助的对象(通常是运营商/DNS 提供商) 114.114.114.114、8.8.8.8

二、递归查询 vs 迭代查询(核心)

这是全篇最关键的一对概念,记住「谁跑腿」就分得清:

  • 递归查询(recursive):「请你帮我查到底,只把最终 IP 回给我。」请求方只发 1 条,剩下的逐级查询由被请求方代劳。

    • 典型场景:主机 → 本地域名服务器,用递归(主机不想管中间过程)。

  • 迭代查询(iterative):「我不知道,但我告诉你下一步该去问谁。」每级只返回一个「线索」,由请求方自己去问下一级。

    • 典型场景:本地域名服务器 → 根/TLD/权威,用迭代(减轻上级负担)。

⚠️ 易错:「递归」不是「主机自己去问每一级」,恰恰相反——递归时主机最省事,只发一条;真正「自己一级级跑」的是迭代(由本地服务器跑)。

三、完整解析流程(以迭代为主)

实际部署几乎总是:主机到本地用递归,本地到各级用迭代。流程:

  • 主机向本地域名服务器发递归请求:「解析 www.baidu.com」;

  • 本地向根发迭代请求,根回:「去问 .com 服务器」;

  • 本地向 .com 发迭代请求,.com 回:「去问 baidu.com 的权威服务器」;

  • 本地向 baidu.com 权威发请求,权威回:「www.baidu.com 的 IP 是 x.x.x.x」;

  • 本地把 IP 返回主机,并缓存一份备用。

  • 四、缓存:少跑腿的关键

    每次解析的结果(尤其 TLD/权威的地址、最终 IP)会被本地服务器缓存一段时间(按 TTL)。下次再查:

    • 若缓存命中,直接返回,不再向上级发任何查询(这就是 2016(40)「最少 0 次」的来源);

    • TTL 过期才重新查。

    ⚠️ 易错:缓存可能让「最少查询次数」变成 0——题目问「最少」时一定要想到缓存命中。

    五、真题拆解 1:递归时发几条(2010(40),答案 A)

    本地域名服务器无缓存,采用递归方法解析另一网络某主机域名,用户主机、本地域名服务器发送的域名请求消息数分别为?

    递归下:

    • 用户主机只把请求交给本地服务器,发 1 条;

    • 本地域名服务器在递归模式下,由它(或它的上游转发器)代查到底,向外也只发 1 条(剩下的由被请求方递归完成,不算「本地发出的请求」)。

    答案:A(一条、一条)。

    六、真题拆解 2:迭代查询最少/最多(2016(40),答案 C)

    所有域名服务器均采用迭代查询。H4 访问 www.abc.xyz.com,服务器 201.1.1.1 完成解析可能发出 DNS 查询的最少和最多次数?

    • 最少 0 次:若 201.1.1.1 本地已有缓存,直接返回,无需任何外部查询;

    • 最多 4 次:根、.com、.xyz.com、abc.xyz.com 四级各迭代一次(返回下一步线索),共 4 次。

    答案:C(0,4)。

    七、真题拆解 3:耗时(2020(40),答案 D)

    本地域名服务器只提供递归、其他只提供迭代;RTT=10ms。从点击超链接到收到纯文本页面,最短/最长时间?

    解析阶段:本地递归 + 上级迭代。最短可缓存命中(极少 RTT),最长需逐级迭代若干 RTT;再叠加后续 HTTP 传输。综合得最短 20ms、最长 50ms。

    答案:D(20ms,50ms)(解析 + 传输联合推算,详见 HTTP 篇)。

    八、17 年真题考在哪

    年份(题号)考法答案
    2010(40) 递归解析下用户/本地各发几条请求 A(一条、一条)
    2016(40) 全迭代时查询最少/最多次数 C(0,4)
    2020(40) 本地递归+上级迭代的解析耗时 D(20ms,50ms)

    命题规律:①「递归 vs 迭代谁跑腿」年年考;②「最少 0 次」几乎必考缓存;③综合题常把 DNS 解析时间和 HTTP 传输时间绑在一起算(2020、2022 都是这种)。

    九、易错点清单

    易错点正确说法
    递归 = 主机自己一级级问 错,递归时主机只发 1 条,由对方查到底
    迭代 = 别人替你查完 错,迭代时每级只给线索,由本地自己跑下一跳
    查询最少次数至少 1 错,缓存命中可 0 次
    根服务器直接返回最终 IP 错,根只返回 TLD 地址,一级级往下
    本地服务器管具体主机 IP 错,最终 IP 由权威服务器给,本地只是中转+缓存
    DNS 是网络层协议 错,DNS 是应用层,用 UDP(查询)

    速查表(文末收藏版)

    DNS = 域名 → IP 的电话簿,应用层,查询走 UDP
    域名树:根 . → 顶级(.com/.cn) → 权威(baidu.com) → 主机
    ​
    递归查询:请你查到底,只回最终答案 → 请求方只发 1 条
    迭代查询:每级只回"下一步问谁"     → 本地自己一级级跑
    ​
    实际部署:主机→本地(递归),本地→各级(迭代)
    完整流程:本地 → 根 → TLD → 权威 → 拿 IP → 回主机 + 缓存
    ​
    最少查询 0 次(缓存命中);最多 = 域名层级数(迭代)
    真题:2010(40) 一条一条;2016(40) 0/4;2020(40) 20/50ms

    本文依据:谢希仁《计算机网络(第 8 版)》第 6 章 6.4;真题年份题号来自 zhenti_all.json(2009–2025 计网 no 33–40)。

    赞(0)
    未经允许不得转载:171主机测评 » 计网 13|DNS 域名解析:递归与迭代查询
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址