域名解析过程:递归查询与迭代查询
域名解析是指把域名转化为 IP 地址的过程。当客户端需要域名解析时,通过本机的 DNS 客户端构造一个 DNS 请求报文,以 UDP 数据报方式发往本地域名服务器(DNS 协议的作用 2021 年考过)。
本页 3 道错题,是第 6 章错题最集中的一节。 两种查询方式的区别(谁替谁查)、查询次数的最少与最多(2016)、以及把 DNS 与 HTTP 串起来的时间计算(2020),是这一节的三种固定考法。
机制
两种查询方式
域名解析有两种方式:递归查询和迭代查询。
(1)主机向本地域名服务器的查询都采用递归查询。 递归查询是指若主机所询问的本地域名服务器不知道被查询域名的 IP 地址,则本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(替该主机继续查询),而不是让该主机自己进行下一步的查询。两种查询方式的这一步是相同的。
(2)本地域名服务器向其他域名服务器采用递归查询或迭代查询。
| 递归查询(递归 DNS 的工作原理 2010 年考过) | 迭代查询(2016、2020 年考过) | |
|---|---|---|
| 谁继续查 | 被问的服务器替你查,一层层递归下去 | 被问的服务器只告诉你下一步该问谁,由本地域名服务器自己继续查 |
| 本地域名服务器发出的查询次数 | 只向根域名服务器查询 1 次 | 依次向根、顶级、权限域名服务器多次查询 |
| 结果由谁返回 | 由最开始连接的服务器(根)把结果层层传回本地域名服务器 | 每一步都回到本地域名服务器 |
| 缺点 | 给根域名服务器造成的负载过大,实际中几乎不使用 | 本地域名服务器要多次发送查询报文 |
迭代查询的完整过程
假定某客户机想获知域名为 y.abc.com 主机的 IP 地址,域名解析的过程最多需要使用 8 个 UDP 报文:4 个查询报文和 4 个回答报文:
sequenceDiagram participant H as 客户机 m.xyz.com participant L as 本地域名服务器 dns.xyz.com participant R as 根域名服务器 participant T as 顶级域名服务器 dns.com participant A as 权限域名服务器 dns.abc.com H->>L: ① DNS 请求(递归查询) L->>R: ② 解析请求(迭代查询) R-->>L: ③ 去找 dns.com L->>T: ④ 解析请求(迭代查询) T-->>L: ⑤ 去找 dns.abc.com L->>A: ⑥ 解析请求(迭代查询) A-->>L: ⑦ y.abc.com 的 IP 地址 L-->>H: ⑧ 返回结果,并存入本地缓存
DNS 高速缓存
为了提高 DNS 的查询效率,并减少因特网上的 DNS 查询报文数量,在域名服务器中广泛地使用了高速缓存,用来缓存最近查询过的域名的相关映射信息。这样,当另一个相同的域名查询到达该 DNS 服务器时,该服务器就能直接提供所要求的 IP 地址。因为主机名和 IP 地址之间的映射不是永久的,所以 DNS 服务器将在一段时间后丢弃高速缓存中的信息。 在主机中同样也很需要高速缓存,许多主机在启动时从本地域名服务器下载域名和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才使用域名服务器。
计算模板
本地域名服务器发出的查询次数
- 最少 0 次:本地域名服务器的缓存里已有该域名的记录。
- 最多 = 域名的层数:迭代查询时依次问根、顶级、二级(权限)、三级(权限)……。例如 www.abc.xyz.com 要问根、com、xyz.com、abc.xyz.com,共 4 次。
- 主机自己发出的查询始终是 1 条(递归),与本地域名服务器发多少条无关。
DNS + HTTP 的时间
- DNS 部分:本地域名服务器每次迭代查询算 1 个 RTT;缓存命中则为 0。主机到本地域名服务器的时延按题目说明处理(局域网内常被忽略)。
- TCP + HTTP 部分:建立 TCP 连接三次握手 1.5RTT,第 3 次握手报文捎带 HTTP 请求,响应回来 0.5RTT,合计 2RTT。
- 总时间 = DNS 部分 + 2RTT(纯文本页面,忽略传输时延时)。
边界
错题复盘:递归查询中,把地址返回给客户端的是最开始连接的那台服务器
王道 6.2.4 第 6 题:在 DNS 的递归查询中,由( )给客户端返回地址(A. 最开始连接的服务器 B. 最后连接的服务器 C. 目的地址所在服务器 D. 不确定)。答案 A。
在递归查询中,每台不包含被请求信息的服务器都转到其他地方去查找,然后它再往回发送结果,所以客户端最开始连接的服务器最终将返回正确的信息。
对照第 7 题(答案 B):根域名服务器返回”负责该域名的顶级域名服务器的 IP 地址”,让本地域名服务器再去查,这种方式叫迭代查询。两种方式的区分只有一句话:递归是”我替你查”,迭代是”我告诉你去问谁”。
错题复盘:迭代查询下最少 0 次、最多 4 次
2016 年统考真题(王道 6.2.4 第 12 题):假设所有域名服务器均采用迭代查询方式进行域名解析。当主机访问规范域名为 www.abc.xyz.com 的网站时,本地域名服务器在完成该域名解析的过程中,可能发出 DNS 查询的最少和最多次数分别是(A. 0,3 B. 1,3 C. 0,4 D. 1,4)。答案 C。
最少情况:当本地域名服务器中有该域名的 DNS 信息时,不需要查询任何其他域名服务器,最少发出 0 次 DNS 查询。最多情况:因为均采用迭代查询方式,在最坏情况下,本地域名服务器需要依次迭代地向根域名服务器、顶级域名服务器(.com)、权限域名服务器(xyz.com)、权限域名服务器(abc.xyz.com)发出 DNS 查询请求,因此最多发出 4 次 DNS 查询。
两个陷阱:① 题目问的是本地域名服务器发出的次数,不是主机发出的次数(主机永远是 1 条递归查询);② www.abc.xyz.com 有三级域名,除根之外还要问三层,容易少数一层。
错题复盘:DNS 加 HTTP 的最短与最长时间
2020 年统考真题(王道 6.2.4 第 14 题):假设上图所示网络中的本地域名服务器只提供递归查询服务,其他域名服务器均只提供迭代查询服务;局域网内主机访问 Internet 上各服务器的往返时间(RTT)均为 10ms,忽略其他各种时延。若主机 H 通过超链接 http://www.abc.com/index.html 请求浏览纯文本 Web 页 index.html,则从单击超链接开始到浏览器接收到 index.html 页面为止,所需的最短时间与最长时间分别是(A. 10ms,40ms B. 10ms,50ms C. 20ms,40ms D. 20ms,50ms)。答案 D。
题中 RTT 均为局域网内主机(主机 H、本地域名服务器)访问 Internet 上各服务器的往返时间,且忽略其他时延,因此 H 向本地域名服务器的查询时延忽略不计。
最短时间:H 有该域名到 IP 地址映射的记录,因此没有 DNS 查询时延,直接和 www.abc.com 服务器建立 TCP 连接再进行资源访问——三次握手 1.5RTT,第 3 次握手报文中捎带对资源的请求,响应回来 0.5RTT,共 2RTT = 20ms。
最长时间:本地域名服务器无缓存,要迭代地问根、com、abc.com 三台服务器,3RTT = 30ms,再加上访问 Web 服务器的 2RTT = 20ms,共 50ms。
最容易漏的是”访问网页本身要 2RTT 而不是 1RTT”:TCP 握手占 1.5RTT,请求与响应合起来再占 0.5RTT。
主机向本地域名服务器一律是递归查询。 题目只会改变”本地域名服务器向其他服务器”用哪种方式。
递归查询实际中几乎不用。 它让根域名服务器承担了全部转发工作,负载过大(王道 6.2.3 原文)。
高速缓存里的记录会过期。 域名到 IP 的映射不是永久的,所以缓存要设过期时间。
对照速查
| 说法 | 对错 |
|---|---|
| 主机向本地域名服务器的查询采用递归查询 | ✅ |
| 递归查询中由最后连接的服务器给客户端返回地址 | ❌(最开始连接的) |
| 迭代查询中被问的服务器替你继续查 | ❌(告诉你下一步问谁) |
| 本地域名服务器采用迭代查询时,主机要发出多条查询请求 | ❌(主机始终 1 条) |
| 本地域名服务器无缓存时,最少发出 0 次查询 | ❌(无缓存则至少问根一次;有缓存才是 0 次) |
| 解析 y.abc.com 最多需要 8 个 UDP 报文 | ✅(4 查询 + 4 回答) |
| DNS 高速缓存中的记录永久有效 | ❌ |
| 访问一个纯文本网页(域名已缓存)需要 2RTT | ✅(2020) |
考点
- 递归(替你查)vs 迭代(告诉你问谁);主机→本地一律递归(2010、2016、2020)
- 迭代查询的 8 步、8 个 UDP 报文
- 查询次数:本地最少 0(有缓存)、最多等于要问的层数(2016)
- DNS + TCP + HTTP 的时间:迭代次数 × RTT + 2RTT(2020)
- 高速缓存及其过期
链接
- 🏠 返回总览:计算机网络第 6 章:应用层总览
- ⬅️ 上一节:6.2.1~6.2.2 层次域名空间与域名服务器
- ➡️ 下一节:6.3 文件传输协议 FTP
- 🔗 6.5.2 HTTP(与本节合起来就是”打开一个网页”的全过程)
- 🔗 5.3.3 TCP 连接管理(三次握手占 1.5RTT)
- 📖 名词库:第 6 章名词库
