COMP5416 Week 05 Tutorial:DNS 与 HTTP 时延(Lab 4 完整解答)

COMP5416 Week 05 Tutorial:DNS and HTML(Lab 4)

课程:COMP5416/COMP4416 — Advanced Network Technologies,Semester 2 2026 文件:W5-Tutorial-DNS.pdf(3 页)+ W5-Tutorial-DNS-solution.pdf(4 页,Tutor's version) 本 tutorial 的目标:理解 DNS。

⚠️ tutorial 比 lecture 慢一周 —— Week 5 模块里的这份 tutorial 练的是 Week 04 的 DNS, 而不是同周的 Week 05 传输层。 这个错位在本课程是稳定规律,复习时要按「lecture N ↔︎ tutorial N+1」配对。

✅ 本文所有答案已与官方 Tutor's version 逐条核对,两处不一致已单独标出(第三节)。


第一部分:题目给的条件

一、资源记录(RR)分布

TLD DNS 服务器上:

名字(name) 值(value) 类型
www.enterprise.com dns.enterprise.com NS
dns.enterprise.com 146.54.58.191 A

enterprise.com 权威(authoritative)DNS 服务器上:

名字(name) 值(value) 类型
www.enterprise.com west2.enterprise.com CNAME
west2.enterprise.com 142.81.17.206 A
enterprise.com mail.enterprise.com MX
mail.enterprise.com 247.29.18.71 A

读表要点:RR 的通用格式是 (name, value, type, ttl) —— name 和 value 各是什么,完全取决于 type。这是本 tutorial 反复考的点, 详见 Week 04 笔记的 RR 类型表。

二、Figure 1 给的解析流程

题面配图画的是迭代查询(iterative),共 8 条消息:

                      ┌──────────────────┐
│ Root DNS server │
└────▲────────┬────┘
② │ │ ③
│ ▼
⑧ ┌──────────────────────────────────┐ ④ ┌──────────────────┐
┌──┤ Local DNS server ├─────▶│ TLD DNS server │
│ └──▲──────────────────────────┬─────┘◀─────┤ │
│ ① │ │ ⑥ ⑤ └──────────────────┘
▼ │ ▼
┌─────────────────┐ ┌──────────────────────────┐
│ Requesting host │ │ Authoritative DNS server │
│ 127.0.0.1 │ ⑦ │ dns.enterprise.com │
└─────────────────┘ ◀───────┴──────────────────────────┘
# 方向 内容
① 主机 → 本地 DNS 查询 www.enterprise.com
② 本地 DNS → 根 查询
③ 根 → 本地 DNS 转介到 TLD(.com)
④ 本地 DNS → TLD 查询
⑤ TLD → 本地 DNS 转介到权威服务器(NS + A 两条 RR)
⑥ 本地 DNS → 权威 查询
⑦ 权威 → 本地 DNS 返回结果
⑧ 本地 DNS → 主机 返回 IP

注意每一层「问一次、答一次」,本地 DNS 始终是那个跑腿的 —— 这是迭代查询的星形结构。递归查询的消息总数一样是 8 条,但形状是链形, 完整对比见 Week 04 笔记。

💡 图里请求主机标的是 127.0.0.1(回环地址),现实中不会这样,当示意即可。


第二部分:Exercise 1 —— DNS 概念题(13 小题)

三、逐题解答

# 问题 答案
1 DNS 用什么传输协议:TCP、UDP 还是 Both? Both
2 熟知端口号 53
3 权威服务器上有几种不同类型的 RR? 官方答案:4 种(A、CNAME、NS、MX)
⚠️ 见下方讨论
4 一条报文能带多个问题、拿到多个 RR 答案吗? Yes
5 主机把请求发给哪个 DNS 服务器?(写全名) Local DNS server
6 哪类服务器保存公司的 DNS 记录?(写全名) Authoritative DNS server
7 enterprise.com 的 DNS 服务器叫什么? dns.enterprise.com
8 本地 DNS 联系 TLD 时,返回几条 RR? 2 条(一条 NS + 一条 A)
9 其中 A 记录的内容?(name, value 格式) dns.enterprise.com, 146.54.58.191
⚠️ 见下方讨论
10 网站实际托管在 west2.enterprise.com,需要什么记录? CNAME
11 发邮件到 admin@enterprise.com,什么记录同时含域名与邮件服务器名? MX
12 该 MX 记录的内容? enterprise.com, mail.enterprise.com
13 本地 DNS 会像 Web 请求一样利用缓存吗? True

四、逐题展开

Q1:为什么是 Both(最容易答错的一题)

官方原文:DNS 一般用 UDP,但在某些情况(如区域传送 zone transfer)会用 TCP,所以答案是 Both。

场景 协议 原因
普通查询/应答 UDP 报文小、无需建连、省一个 RTT
区域传送(zone transfer) TCP 主从服务器间同步整个区域文件,数据量大且必须可靠
应答超过 512 字节 TCP UDP 报文被截断(TC 位置 1),客户端改用 TCP 重试

⚠️ MCQ 陷阱:很多题库把 DNS 的答案写成「UDP」。 本课程的官方答案是 Both —— 遇到「TCP / UDP / Both」三选一时选 Both; 遇到「DNS 主要使用哪种传输协议」时才选 UDP。看清楚问的是「哪些」还是「主要哪个」。

Q3:3 种还是 4 种?(官方答案与题面存在张力)

题面列在权威服务器上的 4 条记录,类型分别是 CNAME、A、MX、A:

不重复类型种

但官方答案写的是 4 种:A、CNAME、NS、MX。

读法 结果 依据
只数题面「权威服务器上」列出的记录 3 种 NS 记录题面写在 TLD 服务器上
数题面出现过的全部类型 4 种 把 TLD 那条 NS 也算进来

三个来源,两个答案

这道题其实源自 Kurose 官方交互题 DNS – Basics (同样的 enterprise.com、同样的 13 个小问、措辞逐字相同)。 查了官方那边之后,情况反而更清楚了:

来源 答案
Kurose 交互题的「自动判分标准答案」 3
Kurose 交互题的文字解答 4(写的是 "A, CNAME, NS, and MX")
COMP5416 tutorial 的 Tutor's version 4

也就是说:Kurose 站上自己就前后矛盾 —— 机器判分给 3,文字解答写 4。 而课程的答案 PDF 抄的正是那段文字解答。

我认为 3 更站得住脚:题面明确把 NS 记录列在 TLD 服务器上, 而问的是权威服务器上有几种。按题面数就是 3 种。 说 4 的理由是「现实中权威服务器也持有自己区域的 NS 记录」—— 这在现实里成立,但题面没把它列出来。

考试怎么办:

  • 题干与课程 tutorial 一字不差 → 写 4(跟助教的评分标准走)
  • 题干强调「根据上面列出的记录」 → 写 3
  • 两种理由都要能说出来 —— 这题真正考的是「类型数 ≠ 记录数」(A 出现两次只算一种)

Q8 与 Q9:NS 和 A 为什么成对返回

Q8 答案:2 条。TLD 返回:

  • NS 记录:告诉你 enterprise.com 的域名服务器叫 dns.enterprise.com
  • A 记录:告诉你 dns.enterprise.com 的 IP 是 146.54.58.191

为什么必须成对: 只给 NS,你只知道服务器的「名字」,却不知道它的 IP,根本联系不上。 若为了解析这个名字再发一次 DNS 查询,就会陷入死循环。

所以 TLD 把 A 记录一起塞进「附加区(Additional Section)」—— 这条 A 记录的正式名称叫「胶水记录(glue record)」。

⚠️ Q9 的官方答案与题面不符:

来源 A 记录内容
题面 PDF(W5-Tutorial-DNS.pdf,2026-08-31 更新) dns.enterprise.com,146.54.58.191
答案 PDF(W5-Tutorial-DNS-solution.pdf,2026-09-04 更新) dns.enterprise.com,146.54.97.79

146.54.97.79 这个 IP 在题面里根本不存在(题面只有 146.54.58.191、142.81.17.206、247.29.18.71 三个)。

原因找到了:两份 PDF 来自网站的两次不同随机生成

这道题是从 Kurose 交互题 DNS – Basics 截取的, 而那个网站每次刷新都会重新随机生成 IP 和主机名。 我实际抓了一份,长这样:

(dns.enterprise.com,   146.54.20.201,   A)      ← 又是另一个 IP
(www.enterprise.com, west5.enterprise.com, CNAME) ← 主机名也变了(west5 而非 west2)
(mail.enterprise.com, 247.29.157.43, A)
来源 dns.enterprise.com 的 IP CNAME 目标
课程题面 PDF 146.54.58.191 west2
课程答案 PDF 146.54.97.79 —
我抓到的站上实例 146.54.20.201 west5

结论:老师是分两次从网站上截的图 —— 题面截了一次,答案又截了一次, 两次生成的随机数不一样,于是对不上。 这不是笔误,是取材方式导致的。

所以按你手上的题面作答,即 146.54.58.191。 这题真正考的是「A 记录的 name 是服务器域名、value 是它的 IP」这个结构, 具体数字每份卷子都不同,背没有意义。

Q10 与 Q11、Q12:三种记录的分工

需求 记录类型 记录内容
www.enterprise.com 实际由 west2.enterprise.com 提供 CNAME (www.enterprise.com, west2.enterprise.com)
把域名和它的邮件服务器关联起来 MX (enterprise.com, mail.enterprise.com)
把 mail.enterprise.com 变成可连接的 IP A (mail.enterprise.com, 247.29.18.71)

注意 Q12 只要 MX 记录本身,value 是「邮件服务器的名字」而不是 IP。 要拿到 IP 还得再查一次 A 记录 —— 这就是 MX 与 A 必须配合的原因, 结构上和 Q8 的 NS + A 完全一样:「指名字的记录」永远需要一条 A 记录兜底。

Q4 与 Q13:DNS 的两个效率机制

机制 说明
一条报文多问多答(Q4:Yes) DNS 报文有独立的 Question 段和 Answer 段,都可以放多条,省往返
缓存(Q13:True) 本地 DNS 服务器缓存记录以加快取回;TLD 的映射常被缓存,因此根服务器常被绕过

缓存的代价:记录过期(TTL 到期)前不会更新,所以换服务器 IP 之前要先把 TTL 调小。


第三部分:Exercise 2 —— HTTP 与 DNS 时延计算

五、参数

符号 含义 值
到本地 DNS 缓存的 RTT 3 ms
到第二个 DNS 服务器的 RTT 25 ms
本地主机 ↔︎ Web 服务器的 RTT 60 ms

前提:IP 未缓存在本地主机,需要 DNS 查询;共访问 2 台 DNS 服务器;忽略传输时间。

总时延

⚠️ 注意这里的口径:两台 DNS 服务器的 RTT 是「相加」,不是「各乘 2」。 题目给的 、 本身就是完整的一去一回。

六、四种情形逐题推演

拓扑与总框架

client

local DNS cache RTT₀=3ms

第二台 DNS 服务器 RTT₁=25ms

Web 服务器 RTT_HTTP=60ms

client 先串行问两台 DNS 服务器拿到 IP,再和 Web 服务器做 TCP+HTTP——按官方 Figure 1 拓扑重绘

整道题就是给一条必须严格按顺序走的主链路(DNS → 建连 → 请求)算时间,再看后面的嵌入对象能不能插队并行。四问的差异全部落在"嵌入对象要不要重新建连"和"嵌入对象能不能同时发"这两个开关上。

Q1:单个对象(148 ms)

阶段 说明 耗时
查本地 DNS 缓存 第一台,未命中最终答案 ms
查第二台 DNS 服务器 拿到 Web 服务器的 IP ms
TCP 三次握手 与 Web 服务器建连 ms
HTTP GET + 响应 发请求、收到 HTML 对象 ms
合计 148 ms

为什么基础对象要 2 个 :

RTT 用途
第 1 个 建立 TCP 连接
第 2 个 发 HTTP GET 并收到响应
点击链接
│
├─ 3 ms ── 本地 DNS 缓存
├─ 25 ms ─ 第二个 DNS 服务器 ┐ 28 ms
│ ┘
├─ 60 ms ─ TCP 三次握手 ┐
├─ 60 ms ─ HTTP GET + 响应 ┘ 120 ms
▼
收到对象 总计 148 ms

Q2:非持久 HTTP、串行、3 个引用对象(508 ms)

非持久:每个对象都要单开一条新连接;不并行:这些新连接必须排队一个接一个来。

阶段 对象 是否并行 耗时
DNS — — 28 ms
基础对象 建连+收发 — ms
引用对象 1 重新建连+收发 否,排队 ms
引用对象 2 重新建连+收发 否,排队 ms
引用对象 3 重新建连+收发 否,排队 ms
合计 508 ms

基础对象个引用对象串行

每个引用对象都要重新建一次 TCP 连接,所以各花 2 个 RTT,且一个接一个。

Q3:非持久 HTTP、最多 5 条并行连接(268 ms)

依然非持久(每个对象各自握手),但并行上限解除到 5 条——而本题只有 3 个引用对象,5 条名额绰绰有余,一轮就能把 3 个全部同时发出去。

批次 对象 耗时(并行只算一份)
基础对象 单独一条连接,建连+收发 ms
第 1(唯一)批 3 个引用对象同时建连+收发 ms

基础对象个对象并行,共用一份

关键:只有 3 个对象,而并行上限是 5 —— 一轮就全发完了。 每个对象仍各需 2 个 RTT(建连 + 请求),但它们同时进行,所以只计一份。

Q4:持久 HTTP + 并行(208 ms)

在 Q3 基础上把非持久换成持久:取完基础对象的那条 TCP 连接保持打开,3 个引用对象复用这条已经握好手的连接(或复用之后并行开出的连接),不用再握手,每批只需 1 个 RTT。

批次 对象 耗时(复用连接,只需 1×RTT)
基础对象 仍是全新连接,建连+收发 ms
第 1(唯一)批 3 个引用对象并行,复用连接 ms

基础对象个对象只要个

持久连接省掉的正是「建连」那个 RTT —— TCP 连接在取完基础对象后保持打开,后续请求不再有建连时延。

Q5:哪种最快

Nonpersistent-serial 508 ms

Nonpersistent-parallel 268 ms

Persistent-parallel 208 ms(最快)

28ms 的 DNS 开销三者相同,差距全部来自处理 3 个引用对象的方式。

持久并行非持久并行非持久串行

官方结论:持久并行 > 非持久并行 > 非持久串行(速度由快到慢)。

七、四种情形汇总

# 情形 计算 结果 相对最快
1 单对象 148 ms —
2 非持久·串行,n=3 508 ms 2.44×
3 非持久·并行(上限 5) 268 ms 1.29×
4 持久·并行 208 ms 1.00×

八、通用公式(背下来,考试直接套 —— 四种模式,不是三种)

基础对象永远要 (建连 + 请求)。四种模式的差别全在「 个引用对象要几个 」:

模式 引用对象部分 总时延(含 DNS)
非持久·串行
非持久·并行(上限 条)
持久 + 并行(上限 条)
持久 + 流水线(不限并行数)

代入本题( 、 、DNS = 28、 )验证前三种:

公式 代入 结果 官方
508 ✓ 508
268 ✓ 268
208 ✓ 208

四条公式的记忆逻辑

组成 为什么
基础对象永远 2 个 RTT 建连 1 个 + 请求响应 1 个,任何情形都躲不掉
非持久串行:每个引用对象各 2 个 RTT 每次都要重新建连,且排队进行
非持久并行:每轮 2 个 RTT 仍要建连,但同轮内并发,轮数
持久并行:每轮只要 1 个 RTT 连接不用重建,只剩请求响应,轮数仍是
持久 + 流水线:恒为 1 个 RTT 不限并行数,所有对象的请求一次性流水线发出、一次性收完,和 无关

⚠️ 「持久」有两种口径,做题前先确认题目给的是哪种:

口径 引用对象耗时 什么时候用
持久 + 流水线 所有对象共 1 个 RTT,与 无关 题目说「persistent HTTP with pipelining」,或完全没提并行连接数上限
持久 + 并行上限 分 轮,每轮 1 个 RTT 题目明确给了「maximum of parallel TCP connections」

本 tutorial 和 Kurose 交互题用的都是第二种(都给了 )。 时两种口径算出来相同(本题 正是如此),只有 时才会分家——这也是下一节要专门拆开讲的坑。

九、⚠️ 本题最容易被推错的一步: 怎么办

本题 ,所有情形都只有一轮,于是"持久+并行"那一项恰好等于 ,和"持久+流水线"算出来一样。很容易由此误记成「持久 HTTP 永远只要 3 个 RTT,和对象数无关」—— 这是错的,只是本题恰好 把两种口径的区别盖住了。

代入不同的引用对象数 (并行上限固定 ,可以直接套用本题的 DNS/RTT_HTTP,也可以只看"要几个 RTT"这个纯数字规律):

非持久串行 非持久并行 持久+并行 持久+流水线
0 2 RTT 2 RTT 2 RTT 2 RTT
1 4 RTT 4 RTT 3 RTT 3 RTT
3(本题) 8 RTT 4 RTT 3 RTT 3 RTT
5 12 RTT 4 RTT 3 RTT 3 RTT
10 22 RTT 6 RTT 4 RTT 3 RTT
20 42 RTT 10 RTT 6 RTT 3 RTT

看 这一行:持久+并行是 4 个 RTT,不是 3 —— 10 个对象要分 轮,每轮 1 个 RTT, 。这一行正是 Kurose 官方交互题的标准配置(该题就是 ),拿它可以直接检验这条规律:

Kurose 交互题参数: 、 (DNS 合计 26)、 、 、

情形 轮数 计算 官方答案
非持久·串行 — 862 ms
非持久·并行 2 254 ms
持久 + 并行 2 178 ms

官方解答原文说得很明白:先并行取回前 5 个, "Once these first five objects have been retrieved, the remaining embedded objects can be retrieved (in parallel). This second round takes only one more RTT."

所以「持久+并行上限 」的正确公式是 ,不是恒定的 。 只有当题目说的是「持久 + 流水线、不限并行连接数」时,才是所有对象共 1 个 RTT(总计 ,对应上表最右列,恒为 3,与 无关)。

💡 完整的四模式公式表、更多 值的代入练习,见 Week 03 应用层讲义——那边是这套公式最早推导的地方,本篇的 DNS+HTTP 组合题只是在它前面多加了一段 DNS 查询时延,公式形式完全一样。


第四部分:本 Tutorial 的考点清单

十、必背结论

考点 结论
DNS 传输协议 Both(常规 UDP,区域传送/大应答 TCP)
DNS 端口 53
主机先问谁 Local DNS server
谁存公司记录 Authoritative DNS server
TLD 转介返回几条 2 条:NS + A(glue record)
一条报文多问多答 可以
本地 DNS 缓存 有
CNAME 的用途 把对外域名指向实际主机名
MX 的 value 邮件服务器的名字,不是 IP

十一、最容易失分的 4 个地方

  1. DNS 协议答成「UDP」 —— 三选一时官方要 Both
  2. 数 RR 类型时把重复的 A 记录数两次 —— 问的是类型数不是记录数
  3. 并行情形忘了「基础对象仍要 2 个 RTT」 —— 并行只作用于引用对象
  4. DNS 时延误算成 —— 题给的 RTT 本身已是一个来回
  5. 持久情形直接套「1 个 RTT」 —— 时要分 轮(本题 掩盖了这一点)

十二、官方答案的两处问题(复习时留意)

题号 官方答案 题面实际 我的建议
Q3 4 种(含 NS) 权威服务器列出的记录只有 3 种 按 4 答(评分标准 + 现实中权威服务器确有 NS),但要看清题干有无「as listed」限定
Q9 146.54.97.79 题面是 146.54.58.191 按题面答;官方 PDF 沿用了旧题面数字

第五部分:关联笔记

内容 去处
DNS 层级、RR 类型、迭代 vs 递归完整推演 Week 04:DNS 与 P2P
HTTP 持久/非持久、RTT 公式的原始推导 Week 03:应用层
同周的传输层讲义 Week 05:传输层
期中模拟题 20 题模拟卷(Q12、Q13 直接对应本 tutorial)