2023-07-27 16:04:04
IP分片与重组的核心机制是通过标识符(ID)、片偏移(Offset)和更多分片标志(MF)共同实现的,而非依赖简单的分片编号;重组不仅发生在目的主机,中间路由器在必要时也会进行重组。 以下是具体分析:旦隐
一、IP分片的关键字段与实现逻辑标识符(ID)同一IP数据包的所有分片共享相同的ID,用于区分不同数据包的分片。例如,一个1500字节的数据包经过MTU=1000的链路时,会被分为两个分片(ID相同),而非按1、2、3编号。
片偏移(Offset)以8字节为单位计算分片在原始数据中的位置。例如:
第一个分片(0-999字节):Offset=0
第二个分片(1000-1499字节):Offset=125(1000/8)即使后续分片再次被分割(如MTU=500),新分片的Offset仍基于原始数据包计算,确保重组时能按正确顺序拼接。
更多分片标志(MF)
MF=1:表示后续还有分片。
MF=0:表示这是最后一个分片。接收方通过MF和Offset判断是否已收到所有分片,并触发重组。
原始分片:当数据包超过链路MTU时,发送方(如主机或路由器)根据MTU分割数据,并填充ID、Offset和MF字段。
二次分片:若分片在传输中再次遇到更小的MTU(如从1000字节链路进入500字节链路),中间路由器会丢弃原分片,重新生成更小的分片,但保持原始ID不变,并重新计算Offset(基于原始数据)。
例如:第二个分片(Offset=125,长度500)在MTU=500的链路中会被分为两个250字节的分片,Offset分别为125和156.25(实际以8字节为单位取整)。
关键点:Offset始终相对于原始数据包,而非当前分片,因此无论分片多少次,接收方都能通过ID和Offset正确重组。
原因:重组需要缓存分片,增加路由器内存开销,且可能引入延迟。
例外:某些NAT或防火墙设备可能强制重组以检查数据完整性。
实际依赖ID+Offset,编号方式无法应对多次分片。
中间路由器可能重组,但非默认行为。
ID始终唯一标识原始数据包,二次分片会继承原ID。
IP分片与重组的设计通过ID、Offset和MF字段实现了灵活且可靠的传输,即使面对多次分片也能正确重组。理解这一机制有助于优化网络配置、排查分片相关高迟问题(如丢包、重组失败),并避免对分片过程的常见误解。