Appearance
题目
某网络拓扑如题 47 图所示,以太网交换机 S 通过路由器 R 与 Internet 互联。路由器部分接口、本地域名服务器、H1、H2 的 IP 地址和 MAC 地址如图中所示。在 时刻 H1 的 ARP 表和 S 的交换表均为空,H1 在此刻利用浏览器通过域名 www.abc.com 请求访问 Web 服务器,在 时刻()S 第一次收到了封装 HTTP 请求报文的以太网帧,假设从 到 期间网络未发生任何与此次 Web 访问无关的网络通信。
请回答下列问题。
(1) 从 到 期间,H1 除了 HTTP 之外还运行了哪个应用层协议?从应用层到数据链路层,该应用层协议报文是通过哪些协议进行逐层封装的?
(2) 若 S 的交换表结构为 〈MAC 地址, 端口〉,则 时刻 S 交换表的内容是什么?
(3) 从 到 期间,H2 至少会接收到几个与此次 Web 访问相关的帧?接收到的是什么帧?帧的目的 MAC 地址是什么?
解析
(1) DNS 报文的逐层封装
H1 浏览器输入域名 www.abc.com 而非 IP,首先要解析域名 → IP——这是 DNS 协议的工作。所以除了 HTTP,H1 还运行 DNS 应用层协议。
封装链(DNS 报文从应用层往下走):
应用层: DNS 报文(查询 www.abc.com 的 A 记录)
↓ 加 UDP 头(默认 DNS 走 UDP,端口 53)
传输层: UDP 数据报
↓ 加 IP 头(源 192.168.1.2,目的 192.168.1.126)
网络层: IP 数据报
↓ 加以太网首部(源 MAC = H1,目的 MAC = ?)
数据链路层: 以太网帧(CSMA/CD)为什么 DNS 走 UDP 而不是 TCP:DNS 查询多是"小请求 + 小响应"(请求几十字节、响应几百字节),UDP 无连接低开销远比 TCP 三次握手划算。当响应过大(> 512 B,常见于 DNSSEC、AXFR 区域传送)时才回退到 TCP。
(2) 时刻 S 交换表的内容
先把 到 期间发生的所有帧在 S 上"走一遍":
| 序 | 帧含义 | 源 MAC | 目的 MAC | 进 S 的端口 | S 学到 | S 的转发动作 |
|---|---|---|---|---|---|---|
| 1 | H1 → DNS:ARP 请求"谁是 192.168.1.126"(广播) | cc | FF:FF:FF:FF:FF:FF | 4 | cc 在端口 4 | 端口 1/2/3 都 flood |
| 2 | DNS → H1:ARP 应答(已知 H1 MAC = cc) | bb | cc | 1 | bb 在端口 1 | 单播到端口 4 |
| 3 | H1 → DNS:DNS 查询(封 IP/UDP/以太网) | cc | bb | 4 | (已学过) | 单播到端口 1 |
| 4 | DNS → H1:DNS 应答 | bb | cc | 1 | (已学过) | 单播到端口 4 |
| 5 | H1 想发 HTTP 给 Web,发现要走默认网关 R,但不知道 R MAC → ARP 请求"谁是 192.168.1.1"(广播) | cc | FF:FF:FF:FF:FF:FF | 4 | (已学过) | flood |
| 6 | R → H1:ARP 应答 | aa | cc | 2 | aa 在端口 2 | 单播到端口 4 |
| 7 | H1 → R:HTTP 请求(封到帧里目的 MAC = aa) | cc | aa | 4 | (已学过) | 单播到端口 2 ← 这就是 时刻的帧 |
时刻交换表(按学习顺序登记):
| MAC 地址 | 端口 |
|---|---|
| 00-11-22-33-44-cc(H1) | 4 |
| 00-11-22-33-44-bb(DNS) | 1 |
| 00-11-22-33-44-aa(R) | 2 |
为什么没有 H2 的 MAC:整个过程中 H2 既没主动发帧(题面说"未发生任何无关通信"),也没作为收件人被指名 → S 没机会从 H2 学到任何记录。交换机的"自学习"只看进入帧的源 MAC + 进入端口这一对。
(3) H2 在此期间会收到哪些帧
H2 是"无辜旁观者"——但它在以下两个时刻会被动接收帧:
| 序 | 何时 | 何种帧 | 目的 MAC | 为什么 H2 也收到 |
|---|---|---|---|---|
| ① | H1 第一次 ARP "谁是 .126" | ARP 请求(广播) | FF:FF:FF:FF:FF:FF | 广播帧由交换机 flood,所有端口都收到 |
| ② | H1 第二次 ARP "谁是 .1" | ARP 请求(广播) | FF:FF:FF:FF:FF:FF | 同上,广播 flood |
至少 2 个帧,都是封装 ARP 请求报文的以太网广播帧,目的 MAC 地址都是 FF-FF-FF-FF-FF-FF。
DNS 应答阶段为什么 H2 不收到:那时是单播帧(源 DNS、目的 H1),交换机已经学到 H1 在端口 4 → 直接从端口 4 出,不 flood。H2 接在端口 3,所以收不到。
HTTP 请求帧为什么 H2 不收到:到了 时刻这一帧的目的 MAC 是 R(端口 2),交换机查表后从端口 2 单播出去,端口 3 的 H2 同样收不到。
本题考察的"二层广播扩散":每次 ARP 请求都是广播,全网所有端点都收。即便目标只有一个,"协议层广播 → 链路层 flood → 整个广播域内都收"是必然结果。这也是为什么大型局域网要用路由器 / VLAN 切割广播域——避免 ARP 风暴拖慢整网。