Skip to content

2020年 408 计算机网络 第 40 题

计算机网络2020年选择题2分

题目

假设下图所示网络中的本地域名服务器只提供递归查询服务,其他域名的服务器均只提供迭代查询服务;局域网内主机访问 Internet 上各服务器的往返时间(RTT)均为 10 ms,忽略其他各种时延。若主机 H 通过超链接 http://www.abc.com/index.html 请求浏览纯文本 Web 页 index.html,则从点击超链接开始到浏览器接收到 index.html 页面为止,所需最短、最长时间分别是( )。

本地域名服务器路由器BusHInternet根域名服务器com 顶级域名服务器abc.com 域名服务器www.abc.com

错因

A

两端都漏算

  • 最短 10 ms:只算了 H ↔ 本地 DNS 这一次查询的 1 RTT,忘了 HTTP 拿 index.html 还要再来一次 RTT(H ↔ www.abc.com)。题面问的是"到浏览器接收到 index.html 页面为止",DNS 只是第一步
  • 最长 40 ms:少了一次 RTT。可能漏的是 H ↔ 本地 DNS(以为本地 DNS 在局域网内不算 RTT),或者漏了 HTTP 那一次

B

最短同 A 错因(漏了 HTTP),最长 50 ms 对。

C

最短 20 ms 对(DNS 1 RTT + HTTP 1 RTT),但最长 40 ms 漏算了一次 RTT——常见漏法是只数了"根 + com + abc.com"3 次迭代 + 1 次 HTTP = 4 RTT,漏掉了最开头 H 给本地 DNS 发的那次递归请求。本地 DNS 拿到结果后还要把答案返回给 H,这一来一回也是 1 RTT。

总解析

先把 DNS 解析的两种模式分清

  • 递归查询:客户问完后等结果,中间过程客户不参与。题面 H ↔ 本地 DNS 走递归——H 等本地 DNS 自己搞定全部解析、回 H 一个最终 IP
  • 迭代查询:被问的服务器只给"下一个该问谁"的提示,客户继续往下问。题面里本地 DNS ↔ 根/com/abc.com 三方走迭代

两种极端情形

最短情形(本地 DNS 已缓存 www.abc.com)

动作RTT
1H → 本地 DNS(递归请求) / 本地 DNS → H(直接命中缓存返回 IP)1
2H → www.abc.com(HTTP GET) / www.abc.com → H(返回 index.html)1

总 = 2 × 10 ms = 20 ms

最长情形(本地 DNS 没缓存,要全部迭代查问)

动作RTT
1H → 本地 DNS(递归请求)半 RTT
2本地 DNS ↔ 根 DNS(迭代:问"com 在哪")1
3本地 DNS ↔ com 顶级(迭代:问"abc.com 在哪")1
4本地 DNS ↔ abc.com 域名(迭代:问"www.abc.com 的 IP")1
5本地 DNS → H(返回最终 IP)半 RTT
6H ↔ www.abc.com(HTTP GET / 返回 HTML)1

第 1 步和第 5 步共构成"H ↔ 本地 DNS 一次完整 RTT"。所以总 RTT = 1(H↔本地 DNS)+ 3(迭代三跳)+ 1(HTTP)= 5 RTT

总 = 5 × 10 ms = 50 ms

理解要点:递归 / 迭代不是"花的时间不同",而是"谁在跑这些 RTT"。

  • 递归视角:客户只看到 1 个 RTT(自己 ↔ 本地 DNS)
  • 实际开销:本地 DNS 在背后还要替客户跑迭代 RTT(数量取决于缓存命中度)
  • 最短 / 最长的差别就在"本地 DNS 替你跑了几次迭代"——0 次(缓存全命中)vs 3 次(root → com → abc.com)

最终答案是 D(20 ms, 50 ms)

编者注(生僻术语):题面"局域网内主机访问 Internet 上各服务器的 RTT 均为 10 ms"——按惯例本地 DNS 也算"Internet 上服务器"(一次 RTT 10 ms)。如果题面区分"局域网内 vs 局域网外 RTT",时间会变化,但 408 这道题是统一 10 ms。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数