首页 理论教育 软件工程专业导论:数据分片与重新组装

软件工程专业导论:数据分片与重新组装

时间:2023-10-23 理论教育 版权反馈
【摘要】:结点对数据包的处理工作是“存储—分片—接收—组装”。这项技术就是对数据包进行分片传输、或者对多个数据片进行重组。设备(路由器)将整个报文数据分成数片,每一片的长度都小于等于MTU 减去IP包头部长度。例1 如果报文所经过路由器的MTU 较小,那么数据包可能会被分片。

软件工程专业导论:数据分片与重新组装

结点对数据包的处理工作是“存储—分片—接收—组装”。存储和接收是很自然的事情,关键的是对数据的“分片和组装”。

由于不同物理链路(一个路由器到另一个路由器)之间传输的数据格式可能不同、各种链路层在传输速率上有差异,这决定了不同的设备的最大传输单元(MTU,Maximum Transmission Unit),即一次传输的数据量也不同。为了实现IP包跨越各种网络,必须设计和实现一种自动调整传输单元大小的机制来适应网络的技术限制。这项技术就是对数据包进行分片传输、或者对多个数据片进行重组

1.数据包分片

假设当一个设备(结点)收到一个IP包(报文)时,先阅读其目的地址并决定要向哪个结点(设备)上发送。如果IP包的长度比该设备的MTU(最大传输单元)大,那么该设备必须对数据进行分片。

设备(路由器)将整个报文数据分成数片,每一片的长度都小于等于MTU 减去IP包头部长度。接下来每一片均被放到独立的IP报文中,并进行如下修改:

·总长度字段被修改为此分片的长度;

·设置分片标志(MF),除了最后一片;

·调整分片偏移量字段为合适的值,基于原始数据负载的段偏移量,并以8个字节为一个单位;

·重新计算头部校验和。

包分片的例子如下所述。

例1 如果报文所经过路由器的MTU 较小,那么数据包可能会被分片。比如,一个4 500 字节的数据包被封装进了一个头部为20字节的IP包,包的总长为4 500+20=4 520字节。假定传输链路结点的MTU 为2 500 字节,那么它会被分成如表5-4 所示的两个分片。

表5-4 包的分片

第1片的标志为1,说明有后续的数据片。其片的偏移量为0,即没有偏移。而第2片的标志为0,说明是最后一片数据,其片的偏移量是0+2 480/8=310,即第2片是从第310字节开始算起,便于之后把两个片重组到一起。(www.xing528.com)

例2 接下来,再假定上面的分片到达一个MTU 为1 500字节的路由点上,那么,原先的每个片还必须再被分为如表5-5所示的片。

表5-5 包的再次分片

表5-4中的第1片被分为两片1 480+1 000,新的第2片的偏移为0+1 480/8=185。

表5-4中的第2片被分为(新的第3和4片)两片1 480+540。新的第3片的偏移为185+1 000/8=310。新的第4片的偏移为310+1 480/8=495。

用最终偏移和最终数据尺寸计算出最终的总尺寸为495×8+540=3 960+540=4 500。

2.数据包的重新组装

接收者收到多个数据片包后,要重新组装相关的数据片,才能形成完整的数据包。每收到一个数据包都要进行检查,当一个接收者发现IP的下列之一为真时:

(1)片标志被设置(MF=1),这不是最后一片;

(2)片偏移字节不为0,这不是第一片。

就知道包已经被分片了,因此,需要将片进行组装。依据每个片的标志和偏离量,把这些片按正确的次序组装起来。

当接收到最后一片时(其MF=0),可以计算出原始数据的长度:最后一片的偏移乘以8,再加上最后一片的尺寸。在上面的例子中是495×8+540=4 500字节。

到此,一次数据包的“存储—分解—接收—组装”工作完成。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈