IP分片
在TCP/IP分层中,数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头。当发送的IP数据报的大小超过了MTU时,IP层就需要对数据进行分片,否则数据将无法发送成功。
一个IP数据报的每个分片都具有自己的IP头部信息,它们都具有相同的标识值,但是具有不同的位偏移,且除了最后一个分片fragflag=0外,其他分片都将设置fragflag=1标志。此外,每个分片的IP头部的总长度字段将被设置为该分片的长度。
例如,以太网帧的MTU是1500字节,因此它的数据部分最大为1480字节(IP头部占用20字节)。
例题
假设一个路由器收到了如下所示的三个IP分片。由于下一跳的最大传输大小小于1500字节,所以路由器希望将这些分片合并成一个较大的分片,然后在发送到下一跳时再将其重新分片为几个分片。假设下一跳的最大传输大小为1020字节,分片ID设置为20,请画出要发送到下一跳的所有分片,并标明每个分片对应的字段,包括length, ID, fragflag, and offset.
解题过程:
1)我们使用三个较小的数据报来计算一个总的数据报。
Fragflag=1表示它不是最后一个数据报,而Fragflag= 0表示它是最后一个数据报。head是20 bytes。因此,我们可以使用length、fragflag和offset来计算每个较小数据报数据段的大小:
通过计算,我们发现大数据报的总数据段为1480+1480+1020=3980 bytes。
2)我们需要根据下一跳最大传输大小为1020字节对总的数据报进行切片。计算步骤如下表所示:
head section | length except head section | ID | fragflag | offset |
---|---|---|---|---|
20 | 1000 bytes | 20 | 1 | 0 |
20 | 1000 bytes | 20 | 1 | 1000/8=125 |
20 | 1000 bytes | 20 | 1 | 2000/8=250 |
20 | 980 bytes | 20 | 0 | 3000/8=375 |
所以我们可以画出所有将要被发送到下一跳的片段,结果如下所示: