IPv4数据报的分段与重组

文章摘自书籍《深入理解计算机网络 王达 机械工业出版社》
IPv4数据报头格式请点击此处
IPv4数据报的封装与解封装请点击此处

IPv4数据报的分段与重组

在网络层中还涉及一个分段的问题,那就是因为不同网络线路上可以传输的数据报大小是有限制的,且可能是不同的,也就是我们通常所说的MTU(最大传输单元),所以如果一个网络中收到的数据报太大,不能在目的网络中一次传输的话,就要对原来的包进行拆分,分成一个个小的数据报再进行传输,这就是本次要介绍的IP数据报分段。在发送端进行了分段,在接收端自然就要把发送来的一个个分段重新按顺序组合,恢复成原始的大数据报。
当一个IPv4数据报封装成数据链路层的帧时,此数据报的总长度(即包头加上数据部分)一定不能超过下图所列的不同网络的数据链路层的MTU值。因此,一个IP数据报的长度只有小于或者等于一个网络的MTU时才能在这个网络中进行传输。当原来的IP数据报长度大于对应网络链路的MTU时,就必须对这个大的IP数据包进行拆分,分成多个符合对应网络链路MTU要求的小的数据分段。


不同网络数据链路层协议的MTU值

在互联网中,包含了各种各样的异构网络,一个路由器可以连接具有不同MTU值的多个网络,从一个网络上接受的IP数据报并不一定能在另一个网络上发送该数据报。如下图所示,从一个网络上接受的IP数据报并不一定能在另一个网络上发送该数据报。一个路由器连接两个网络,其中一个网络是以以太网传输,根据上图得知其MTU的值为1500字节,另一个为X.25网络,根据上图得知其MTU的值为576字节。
假设主句A连接着MTU值为1500字节的以太网络,这样在以太网络上链路层传输的帧中数据部分,也就是IP数据报长度不得超过1500字节,而主机B连接着MTU值为576字节的X.25网络,这样在X.25网络链路层的帧中的数据部分,也就是IP数据报长度不得超过576字节,即两个网络中链路上传输的MTU值是不一样的。这是如果主机A要把一个1450字节的数据报发送给主机B,路由器可以接受到主机A发送的数据报,但却不能再X.25网络上转发它,因为它超过了X.25网络链路上MTU的限制。


不同网络数据链路层协议的MTU值

为了解决这个问题,就需要在路由器上对接收到的主机A发来的IP数据报进行分段,然后再将每个分段独立地进行发送,可以像正常的IP数据报一样经过独立的路由选择等处理过程,最终到达目的主机。最后,还需要在目的主机上对这些分段进行重组,恢复原始的大IP数据报。
这时就涉及一个问题,IP数据报分段后是否在每个分段中加上对应的IP包头信息。答案是肯定的。因为分段后的每个IP包分段都需要进行单独的路由,所以必须要有相应的IP包头信息。这时就得把原来IP数据报中的包头部分复制到所有由同一个IP数据报拆分的分段上。另外,还需要在每个分段的包头部分对标志字段和段偏移字段值进行修改。
如果是第一个分段,则标志字段的第一位(最低位)置1(表示后面还有分段),中间一位置0(表示允许分段),段偏移字段值为0000 0000 0000 0;如果是中间分段,则标志字段的第一位(最低位)置1,中间位置0,段偏移字段值为相应的偏移值(以8个字节为单位);如果是最后一个分段,则“标志”字段的第一位(最低位)置0,中间一位置0(表示此分段是最后一个分段),段偏移字段值也为相应的偏移值。包头的其他部分与原始的IP数据报一样。
在路由器或主机上对IP数据报进行了拆分后,在最终的目的主机上要将接收到的所有分段进行重新组装,这就是IP数据报分段的重组过程。IP数据分段的重组是根据数据报的标识符(由同一个IP数据报拆分的各分段标识符字段时相同的)、段偏移、标志等字段进行的,按照原来的拆分拼接起来,但拼接时只保留第一个分段的报头信息,分段的报头被去掉,同时修改第一个分段报头信息,不设置标志字段和段偏移字段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章