Appearance
题目
如果本地域名服务器无缓存,当采用递归方法解析另一网络某主机域名时,用户主机、本地域名服务器发送的域名请求消息数分别为( )。
错因
B
本地域名服务器发送多条——这是迭代查询的特征,不是递归。题面明确说"采用递归方法",本地 DNS 用递归向上级请求时只发 1 条就够(递归由上级代劳,最终结果直接回来)。错的根源:把递归和迭代混淆。
C
用户主机发送多条——错。用户主机给本地 DNS 总是发单条递归请求:"请帮我解析 X 域名" 然后等结果。用户主机一次只问一次。错的根源:以为用户主机也参与多次查询。
D
用户主机和本地 DNS 都发多条——双错。用户永远 1 条;本地 DNS 在递归模式下也 1 条(递归 ≠ 迭代)。错的根源:完全没区分递归和迭代两种查询模式。
总解析
第一步:理清递归 vs 迭代查询
| 查询方式 | 含义 | 谁负责"找答案" |
|---|---|---|
| 递归查询 | 我把任务全权交给你,你必须给我最终答案 | 被请求方(递归向上代劳) |
| 迭代查询 | 我自己一步步问,你只告诉我下一步该问谁 | 请求方(自己跑一遍) |
第二步:题面场景分析
用户主机 → 本地 DNS → ...... → 最终拿到 IP
题面说"采用递归方法解析"——意味着所有环节都是递归请求。
第三步:逐节点统计请求消息数
用户主机的视角:
- 发 1 条递归请求给本地 DNS:"请帮我解析 X 域名"
- 等待... 等待... 等待...
- 收到本地 DNS 的最终答案
- 共发 1 条
本地 DNS 的视角(题面说"无缓存" → 必须向外查询):
- 收到用户的递归请求 → 必须给出答案
- 题面"采用递归方法" → 本地 DNS 也用递归问上级(不是迭代)
- 发 1 条递归请求给上级(如根 DNS、TLD DNS、权威 DNS 链中的某一级)
- 上级再用递归继续下去,直到拿到答案
- 本地 DNS 收到上级返回的最终答案,转给用户
- 共发 1 条
第四步:核对
| 选项 | 用户 | 本地 DNS | 模式 |
|---|---|---|---|
| A | 1 | 1 | 递归→递归 ✅ |
| B | 1 | 多 | 递归→迭代 ❌ |
| C | 多 | 1 | 迭代→递归 ❌ |
| D | 多 | 多 | 迭代→迭代 ❌ |
最终答案是 A(一条、一条)。
编者注(生僻术语):实际 DNS 工程通常是混合模式——
- 用户 → 本地 DNS:递归(用户简单,"你帮我搞定")
- 本地 DNS → 根/TLD/权威:迭代(本地 DNS 跑一遍:根 → .com → example.com → www.example.com,每步问一个)
但本题明确说"采用递归方法"——意味着两段都用递归,所以本地 DNS 也只发 1 条递归请求即可。混合模式下本地 DNS 会发多条(典型 4 条),那是另一种题型(cn-2016-40 就考的"最多 4 次")。