Appearance
题目
某主机的 MAC 地址为 00-15-C5-C1-5E-28,IP 地址为 10.2.128.100(私有地址)。题 47-a 图是网络拓扑,题 47-b 图是该主机进行 Web 请求的 1 个以太网数据帧前 80 个字节的十六进制及 ASCII 码内容。
题 47-a 图 网络拓扑:
题 47-b 图 以太网数据帧(前 80 B):

题 47-c 图 以太网帧结构:
| 字段 | 目的 MAC 地址 | 源 MAC 地址 | 类型 | 数据 | CRC |
|---|---|---|---|---|---|
| 长度 | 6 B | 6 B | 2 B | 46 ~ 1500 B | 4 B |
题 47-d 图 IP 分组头结构(按字节偏移列出主要字段):
| 字节偏移 | 字段(位宽) |
|---|---|
| 0 | 版本(4 b)+ 头部长度(4 b) |
| 1 | 服务类型(8 b) |
| 2~3 | 总长度(16 b) |
| 4~5 | 标识(16 b) |
| 6~7 | 标志(3 b)+ 片偏移(13 b) |
| 8 | 生存时间 TTL(8 b) |
| 9 | 协议(8 b) |
| 10~11 | 头部校验和(16 b) |
| 12~15 | 源 IP 地址(32 b) |
| 16~19 | 目的 IP 地址(32 b) |
请参考图中的数据回答以下问题。
(1) Web 服务器的 IP 地址是什么?该主机的默认网关的 MAC 地址是什么?
(2) 该主机在构造题 47-b 图的数据帧时,使用什么协议确定目的 MAC 地址?封装该协议请求报文的以太网帧的目的 MAC 地址是什么?
(3) 假设 HTTP/1.1 协议以持续的非流水线方式工作,一次请求 - 响应时间为 RTT,rfc.html 页面引用了 5 个 JPEG 小图像,则从发出题 47-b 图中的 Web 请求开始到浏览器收到全部内容为止,需要多少个 RTT?
(4) 该帧所封装的 IP 分组经过路由器 R 转发时,需修改 IP 分组头中的哪些字段?
解析
(1) Web 服务器 IP + 默认网关 MAC
先在帧 dump 里定位字段位置:
以太网帧 = 14 B 帧头(6 + 6 + 2)+ IP 数据报。所以第 14 字节是 IP 头开始位置(字节 0 起算的话,IP 头的字节 0 在帧的字节 14)。
- IP 头中目的 IP 在字节偏移 16~19 → 在帧里位于 14 + 16 = 30 ~ 33 字节
- 帧里第 30~33 字节是:
40 aa 62 20(十六进制)→ 转十进制 = 64.170.98.32
→ Web 服务器 IP = 64.170.98.32
从 dump 里数字节的小技巧:每行 16 字节(图中标号 0000、0010、0020、0030、0040 是字节偏移)。第 30 字节 = 0020 行的第 0 字节 = 0020 行第一个 hex
40。
默认网关 MAC:
帧的前 6 字节是目的 MAC。这帧目的是去 Internet(跨网段),所以目的 MAC 必然是默认网关(即路由器 R)的 MAC——不是 Web 服务器的 MAC(跨网段时主机不知道远端 MAC,也不该用)。
帧前 6 字节 = 00 21 27 21 51 ee → 默认网关 MAC = 00-21-27-21-51-EE。
跨网段通信的 MAC 规则:链路层目的 MAC 是"下一跳"的 MAC——本网段内目标主机的 MAC,或下一跳路由器的 MAC。当目的 IP 跨网段时是后者。
(2) 构造帧时如何拿到目的 MAC
主机要把 IP 分组送往 Web 服务器,IP 头里写了目的 IP(64.170.98.32),但链路层目的 MAC 必须是默认网关的 MAC——主机要先获取这个 MAC。
主机用 ARP 协议:广播一条 ARP 请求"谁是 10.2.128.1",路由器收到后单播回应"我的 MAC = 00-21-27-21-51-EE"。
封装 ARP 请求的以太网帧的目的 MAC:ARP 请求是广播——目的 MAC = FF-FF-FF-FF-FF-FF。
ARP 在协议栈中的位置:ARP 不算严格的"网络层协议",但运行在网络层和数据链路层之间的"接口处",由网络层调用、其报文直接封装在以太网帧里(不进 IP 头)。
(3) HTTP/1.1 非流水线的 RTT 数
非流水线持久连接的工作模式:客户端必须收到上一个对象的完整响应后,才能发下一个请求——和早期 HTTP/1.0 短连接的"每对象 1 RTT"基本相同,只是省了 TCP 三次握手。
页面包含 1 个 HTML 主页 + 5 个 JPEG 引用图片 = 6 个对象。
总 RTT 数 = 6 RTT(每个对象 1 RTT 请求 - 响应)。
三档 HTTP 模式速记:
模式 对象数 N 时的 RTT 总数 主要差异 HTTP/1.0 短连接 每对象都重新 TCP 握手(+1 RTT)+ 请求-响应(+1 RTT) HTTP/1.1 非流水线持久 共用一个 TCP,每对象串行 1 RTT HTTP/1.1 流水线持久 客户端可同时发出多个请求,并行返回
(4) 经路由器 R 时 IP 头的哪些字段会变
R 是 NAT 路由器——除了普通路由器都会做的 TTL 减 1 + 重算校验和,还要做"私有 → 公有"地址转换:
| 字段 | 是否修改 | 修改细节 |
|---|---|---|
| 源 IP 地址 | 是 | 私有 10.2.128.100 → 路由器外网 IP 101.12.123.15 |
| TTL | 是 | 每经过一个路由器减 1 |
| 头部校验和 | 是 | TTL 和源 IP 都改了,校验和必须重新计算 |
| 目的 IP / 总长度 / 协议 / ... | 否 | 不修改 |
答案:源 IP 地址、TTL、头部校验和。
如果触发分片,还会变更:当数据报长度超过下一段链路 MTU 时,总长度、标志(MF / DF)、片偏移也会被改写——但本题数据帧总长可从 IP 头总长度字段看到 = 0x01EF = 495 B(< 1500 B),不需要分片。所以不变。
NAT 中 TCP/UDP 端口号也要改:除了 IP 头的源 IP 字段,传输层(TCP / UDP)头里的"源端口"也要改写,并重算 TCP/UDP 校验和。本题问的是 IP 分组头字段,不涉及传输层。
编者注(生僻术语):题 47-b 图中每行的最左边 4 位字符(如 0000、0010、0020)是字节偏移标号,不是帧内容——这是 hexdump 工具的标准格式,初学者可能会把这些数当成帧的一部分。