Appearance
题目
假设所有域名服务器均采用迭代查询方式进行域名解析。当 H4 访问规范域名为 www.abc.xyz.com 的网站时,域名服务器 201.1.1.1 在完成该域名解析过程中,可能发出 DNS 查询的最少和最多次数分别是( )。
错因
A
最少 0 对(缓存命中)✓,但最多 3 错——漏算"根服务器"那一次。最多需要查 4 次:根 → .com → xyz.com → abc.xyz.com,每次返回下一级 NS 地址,最后一次才返回主机 A 记录。错的根源:算分级时少数一级,可能把"根"忘了。
B
最少 1 错——若 201.1.1.1 缓存了 www.abc.xyz.com 的 IP(如刚才有别人查过),0 次查询即可返回。本地 DNS 服务器有缓存机制,不必每次都向外查。错的根源:忽略了缓存场景,以为"必须至少查一次"。
D
同 B 一样,最少 1 错。最多 4 对 ✓,但配上错的最少仍是错答案。错的根源:忽略缓存命中可能性。
总解析
第一步:理清迭代查询过程
假设 201.1.1.1 没有任何相关缓存——它要解析 www.abc.xyz.com,按 DNS 域树自顶向下查询:
| 步骤 | 201.1.1.1 → 谁 | 返回 |
|---|---|---|
| ① | 根域名服务器(".") | .com 顶级域名服务器地址 |
| ② | .com 服务器 | xyz.com 权威服务器地址 |
| ③ | xyz.com 服务器 | abc.xyz.com 权威服务器地址 |
| ④ | abc.xyz.com 服务器 | www.abc.xyz.com 的 A 记录(IP) |
最多 4 次——四级域名 + 根。
第二步:考虑缓存命中
DNS 服务器有内存缓存(典型 TTL 数小时到数天)。最快情形:
- 201.1.1.1 直接缓存了
www.abc.xyz.com → IP映射 → 0 次外发查询,直接返回结果
中间情形:缓存了 xyz.com 服务器地址,需要再查 abc.xyz.com + www.abc.xyz.com,外发 2 次;缓存了 .com 服务器地址,外发 3 次。
最少 0 次——缓存命中。
第三步:核对
| 选项 | 最少 | 最多 | 错处 |
|---|---|---|---|
| A | 0 | 3 | 最多漏 1 次(忘根) |
| B | 1 | 3 | 最少错(漏缓存) + 最多漏根 |
| C | 0 | 4 | 正确 |
| D | 1 | 4 | 最少错(漏缓存) |
最终答案是 C(0,4)。
编者注(生僻术语):DNS 查询有两种模式——
- 迭代查询(题面采用):本地 DNS 服务器主动逐级问根 → TLD → 权威,每步自己处理
- 递归查询:本地 DNS 把"全权"交给某个上游,让上游"必须给出最终答案"
本题问的是"201.1.1.1 发出的查询次数"——这是从本地 DNS 服务器视角看的迭代查询。客户端 H4 给本地 DNS 通常发的是递归查询(H4 只发 1 次"请帮我解析"),但 H4 → 本地 DNS 那 1 次不计入题面问的"201.1.1.1 发出的查询次数"。