Skip to content

2021年 408 计算机网络 第 36 题

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

题目

若路由器向 MTU = 800 B 的链路转发一个总长度为 1580 B 的 IP 数据报(首部长度为 20 B)时,进行了分片,且每个分片尽可能大,则第 2 个分片的总长度字段和 MF 标志位的值分别是( )。

错因

A

总长度 796 算对了,但 MF=0 错——MF=0 意味着"最后一片",但本题是第 2 片,后面还有第 3 片(数据 1560 B 切成 776+776+8 = 三片),所以 MF 应是 1。错的根源:错以为只切两片。

C

把分片大小当成 MTU 本身(800),忘了总长度字段是分片整体长度(含 IP 首部)——分片不能超过 MTU 800,所以 80 - 20 = 776 是数据载荷部分,加上首部 20 = 796 才是总长度。直接填 800 等于忽略了"首部 20"这条约束,会让分片实际长度超 MTU。

D

同时犯了 C 和 A 的错——总长度 800 错(正确 796)、MF=1 对(这一项是对的,但与错的总长度组合到一起还是错答案)。

总解析

第一步:分析数据报与分片大小

原 IP 数据报总长度1580 B
IP 首部长度20 B
原数据载荷长度1580 − 20 = 1560 B
链路 MTU800 B
每片最大总长度800 B(受 MTU 限制)
每片最大数据载荷800 − 20 = 780 B

第二步:考虑分片对齐约束

IP 分片有一条硬约束:除最后一片外,每片的数据载荷必须是 8 字节的整数倍("片偏移字段"以 8 字节为单位计数)。

每片数据载荷 ≤ 780 B,向下取 8 的倍数 = 776 B(780 − 4 = 776,因为 780 / 8 = 97.5,向下取整 97 × 8 = 776)。

每片总长度 = 776 + 20 = 796 B

第三步:算分片数量

分片数据载荷字节范围(基于原 1560 B 数据)数据长度总长度MF
第 1 片[0, 775]776 B796 B1
第 2 片[776, 1551]776 B796 B1
第 3 片[1552, 1559]8 B8 + 20 = 28 B0

总数据 = 776 + 776 + 8 = 1560 ✓

第四步:核对题面"第 2 个分片"

第 2 片:

  • 总长度 = 796 B(数据 776 + 首部 20)
  • MF = 1(后面还有第 3 片,不是最后一片)

最终答案是 B(796, 1)

编者注(生僻术语):IP 分片的"片偏移字段"以 8 字节为基本单位计数(占 13 比特,最大可表示 B 偏移,恰好覆盖 IP 最大长度 65535 B)。所以除最后一片外,每片数据载荷必须是 8 的倍数——这是 IP 协议的硬约束,不是工程偏好。本题 780 B 不是 8 的倍数,往下取整到 776 B = 8 × 97。这道题的核心陷阱就在"780 vs 776"这 4 字节差。

最后更新:

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

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