Appearance
IP 分片与重装
考情分析
IP 分片是网络层的计算型考点,经常以选择题的形式出现:给定数据报总长度和 MTU,要求计算分成几片、每片的片偏移和 MF 标志。偶尔也在大题中和 IP 数据报格式一起出。
考频:★★★
为什么需要分片
不同的数据链路层协议对帧的数据部分有最大长度限制,称为最大传输单元(MTU)。以太网的 MTU 是 1500 字节。
当一个 IP 数据报的总长度超过了出接口的 MTU 时,路由器就需要将它分片(Fragmentation),把一个大的数据报拆成若干个小的数据报分别发送。
分片发生在路由器上(也可能在源主机上),而重装只在目的主机上进行。中间的路由器不负责重装。
分片相关字段
IP 首部中有三个字段和分片直接相关:
| 字段 | 位数 | 说明 |
|---|---|---|
| 标识(Identification) | 16 bit | 同一个原始数据报的所有分片共享同一个标识值 |
| 标志(Flags) | 3 bit | DF(不允许分片)、MF(后面还有分片) |
| 片偏移(Fragment Offset) | 13 bit | 该分片的数据在原始数据报数据部分中的偏移,单位是 8 字节 |
标志位细节:
- DF = 1:不允许分片。如果数据报超过 MTU 且 DF=1,路由器直接丢弃并返回 ICMP 差错报文
- MF = 1:后面还有更多分片
- MF = 0:这是最后一个分片(或者未分片的完整数据报)
分片的计算规则
假设原始数据报总长度为
- 每个分片的数据部分最大为
字节 - 但数据部分长度必须是 8 的整数倍(因为片偏移的单位是 8 字节),所以实际每片最大数据量为
- 最后一个分片不受 8 的整数倍限制
- 每个分片都有自己的 IP 首部(20 字节),所以分片会增加总的传输字节数
设每片最大数据量为
分片例题
题目: 一个 IP 数据报总长度为 4000 字节(首部 20 字节,数据 3980 字节),需要经过 MTU = 1500 的以太网链路。求分片结果。
解题过程:
每片最大数据量:
字节 数据部分 3980 字节,按 1480 分:
片 各分片的详细信息:
| 分片 | 数据量 | 总长度 | MF | 片偏移(单位8B) | 片偏移(字节) |
|---|---|---|---|---|---|
| 1 | 1480 | 1500 | 1 | 0 | 0 |
| 2 | 1480 | 1500 | 1 | 185 | 1480 |
| 3 | 1020 | 1040 | 0 | 370 | 2960 |
验证:
注意第 3 片的总长度是
分片偏移的理解
片偏移表示的是该分片携带的数据在原始数据报数据部分中的起始位置(不包括首部),以 8 字节为单位。
原始数据(3980字节):
[ 0~1479 | 1480~2959 | 2960~3979 ]
分片1 分片2 分片3
偏移=0/8=0 偏移=1480/8=185 偏移=2960/8=370为什么单位是 8 字节?因为片偏移字段只有 13 bit,如果单位是 1 字节,最大偏移只能表示
重装过程
目的主机收到分片后,根据以下信息重装:
- 标识相同的分片属于同一个原始数据报
- 按片偏移从小到大排列
- 检查 MF 标志,MF=0 的是最后一片
- 最后一片的偏移
8 + 最后一片的数据长度 = 原始数据报的数据总长度 - 如果所有分片都齐了,就重装成原始数据报交给上层
如果某个分片丢失了,目的主机等待超时后会丢弃该标识的所有分片。IP 层不负责重传,重传由上层协议(如 TCP)处理。
交互可视化
易错点
1. 每片的数据量必须是 8 的整数倍(最后一片除外)
这是片偏移单位为 8 字节的直接后果。如果不是 8 的整数倍,后续分片的偏移就没法正确表示。
2. 每个分片都有自己独立的 IP 首部
分片后,每个分片的 IP 首部中:总长度、MF、片偏移这三个字段会不同,其余字段(包括标识、源 IP、目的 IP 等)相同。
3. 分片可能在链路中途再次被分片
如果一个分片在传输过程中遇到更小的 MTU,它还可以被进一步分片。所有的重装都推迟到目的主机完成。
4. 片偏移的计算别忘了除以 8
片偏移字段存储的值 = 实际字节偏移 / 8。题目有时问"片偏移字段的值",有时问"偏移了多少字节",注意区分。
高频考点清单
- MTU 的含义及以太网 MTU = 1500
- 分片发生在路由器,重装发生在目的主机
- 每片数据量必须是 8 的整数倍(最后一片除外)
- 片偏移的单位是 8 字节
- 给定总长度和 MTU,计算分片数、每片长度、MF 标志和片偏移
- DF=1 禁止分片,超过 MTU 直接丢弃
- 分片丢失后 IP 层不重传,由上层负责