2.4.3 数据报分片

为什么要分片?

TCP/IP互联网可以由不同的物理网络构成,每个物理网络允许的最大帧长度可能不同。例如以太网传输的最大数据为1500个八位组,FDDI允许的最大帧数据为4470个八位组。这种帧最大长度限制称为网络最大传输单元MTU(Maximum Transfer Unit)。如果数据报的大小比网络允许的MTU要大,则数据报无法封装在一个网络帧中。那么,当一个MTU较大的网络中一个大的分组传输到一个MTU较小的网络中,数据报的长度超过了该网络的MTU时怎么办呢?这就需要对数据报进行分片处理。

IP软件选择一个方便的初始数据报大小,同时提供一种机制,在MTU较小的网络上,把长数据报划分成更小的部分。每个部分称为数据报片(fragment),划分的过程称为分片(fragmentation)。

如何分片?

首先看一个例子。某互联网络如下图所示,一个净负荷为1400八位组的数据报从网络1,经网络2传输到网络3,其分片的情况如下图所示。

 

说明:

IP以8倍数的八位组表示数据的偏移量,所以片的大小必须是8的倍数;

源主机可以任意选择合适的数据报大小,分片不需要源主机特殊动作;

路由器必须能够接收所连接网络中最大MTU大小的数据报。

数据报的分片重组

分片的数据报需要重新拼装起来,恢复成原来的数据报,这个过程成为重组。但是数据报的重组在何时进行呢?是通过一个网络后?还是在分片到达目的主机后?TCP/IP互联网中,一旦数据报分片后,每片都作为独立的数据报传输,直到到达目的主机后才对它们重组。

分片控制

IP数据报首部的标识、标志和片偏移量等三个字段用来控制数据报的分片和重组。

标识字段含有标识该数据报的唯一整数。数据报分片后,每个分片保持相同的标识。目的主机在重组分片时,将相同标识的分片重组起来。

标志字段的3比特中,低端的2比特控制分片。

第一个控制位称为不分片位DF(do not fragment)。该位置1时,路由器不允许对数据报分片。这主要用于一些互联网软件测试和调试的情况下。如果路由器在不分片的条件下无法继续传输该数据报,则会向源主机发送一个ICMP报文报告错误。

第二控制位称为更多分片位MF(more fragment)。该位置1时,表示该分片之后还有分片。显然,只有最后一个分片的MF位置0,表示其后面不再有分片。