IP数据报分片

IP数据报的分片&应用到每个分片中的length, ID, fragflag,offset字段的相关例题

Posted by Zhao Zihao on January 15, 2021

在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

所以我们可以画出所有将要被发送到下一跳的片段,结果如下所示: