您好,欢迎访问飞畅科技官网!
服务热线:+086 0571-87007055/56/57 EN
飞畅科技工业通信技术中心

光通信与工业互联网方案专家

EXPERT IN OPTICAL COMMUNICATION & INDUSTRIAL INTERNET SOLUTIONS

联系我们CONTACT US

全国咨询热线

0571-87007055/56/57/75

市场部直线电话:0571-87007140

手机:15306818230(微信)

QQ :2355416925

定制设计:18072828031(微信)

或给我们留言

在线留言

IPv4报文分片后怎样拼回去?标识、偏移与接收端重组科普

浏览次数:飞畅科技原创作者:飞畅科技技术团队

FIBERIOT / 基础知识

一台控制设备发出的信息,经过网络后有时不是以一个完整IP报文到达,而是分成几个片段。接收方怎样知道这些片段属于同一份报文、应该放在哪个位置?如果其中一片迟迟不到,应用会收到半份数据吗?理解IPv4分片,要把以太网交换、IP路由与接收端重组分开看。

IPv4报文经过路由器分片并在接收端重组的示意
图1:满足条件时IPv4路由器可能分片,二层交换机不负责IP分片。

01先分清IP报文与以太网帧

工业网络中的控制器、网关和服务器通常通过链路交换数据。发送IP数据时,IP报文会放进适合当前链路的外层封装;例如在以太网上,它会装进以太网帧。帧在相邻设备间传递,而IP地址帮助网络层确定报文的最终去向。不同层有不同的头部和长度范围。

一个接口的IP最大传输单元,简称MTU,是该接口允许发送的IP包长度上限。跨网段时,数据可能经过多个IP接口,每段接口条件不一定相同。上游能够容纳一份报文,不代表下一跳也能容纳相同长度。本文重点是报文被分片后的标记和拼接过程,不是所有大包问题都由分片造成。

02什么时候可能发生分片

IPv4发送主机可能在发送前分片;经过具备IP转发能力的路由器时,如果报文大于下一跳接口的MTU、同时允许途中分片,路由器也可能把它切成较小的IP分片,再分别转发。每个分片都有自己的IP头和一部分原始IP载荷。

如果原始报文设置了DF,即“不允许分片”标志,而路由器必须通过更小的下一跳MTU,路由器不能随意切分;通常会丢弃该报文并返回相应ICMP差错,实际反馈还取决于设备和网络策略。发送方能否根据反馈调整,需结合协议与系统实现核对。

普通二层工业交换机转发的是以太网帧,不会因为帧太长就把其中的IPv4报文拆成多个分片。具有路由功能的设备是否进行IP转发,要看实际接口、配置与转发路径。设备外壳写着“交换机”或“网关”,不足以证明某个端口上的具体行为。

03接收端靠什么认出同一份报文

每个IPv4分片的头部携带源地址、目的地址、协议号和标识字段。接收端结合这些字段判断哪些分片属于同一份原始报文。标识字段主要服务于分片和重组;对于不需要分片的报文,不应把它简单当作全网永久唯一的流水号。

打个有边界的比方:把一份长资料分成几页寄出,每页写上同一批次和收件信息,接收人才能先把属于同一批的页放在一起。实际网络设备使用的是报文字段和重组规则,不会像人一样理解文档内容;批次信息也不能替代身份验证或安全防护。

发送端、路由器和接收端可能各自产生不同视角的抓包。判断是否同一组分片时,不能只盯住某一个标识数字,也不能跨越不同通信方向或不同网络位置直接把记录拼在一起。先确认抓包点、时间、IP地址与上层协议,再看分片字段。

同一IPv4报文的分片标识、偏移和MF标志
图2:标识、位置和MF帮助接收端关联与重组分片。

04偏移与MF标志告诉接收端什么

分片偏移字段指出这一片载荷在原始IP载荷中的位置;它按八字节为单位表达,不等同于以太网帧的字节序号。接收端依据偏移把各片内容放回对应位置,而不是简单按到达先后顺序拼接。网络转发过程中,后发的片段也可能先到。

MF表示后面是否还有更多分片:一般非末片的MF为1,最后一片为0。收到MF为0的片段,意味着已看到末尾位置,并不代表前面的所有片段都到了。还要检查从起点到末尾的内容是否齐全,才能交给后续网络层处理。

切分时还需遵守对齐规则:除最后一个分片外,分片载荷长度通常必须是八字节的整数倍。现场排查时不必先手算所有二进制位,但应弄清抓包工具显示的是偏移字段原值还是已经换算的字节位置,避免把同一个数解释错单位。

05丢了一片会怎样

接收端通常为尚未收齐的分片保留临时重组状态,并设置等待时间。如果缺片迟迟未到,重组超时后会丢弃未完成的数据报;应用通常不能把剩余碎片直接当作完整IP报文使用。缓冲容量、超时处理及安全策略因系统而异,不能从通用原理推断某个型号的数值。

分片越多,一份完整数据报涉及的独立传输片段也越多。只要其中一片没有到达,整个重组可能失败;这解释了为什么应关注整条路径和各片状态。但不应仅凭“大报文不通”就断言某一片丢失:拥塞、过滤、设备负载和其他链路故障也可能造成相似现象。

TCP或应用是否重试属于更高层的问题,取决于实际使用的协议与实现;IPv4分片本身不提供通用的逐片可靠重传。UDP应用也不能因为使用了IP就假定网络会自动补齐丢失内容。出现异常时应分别查看传输层和应用层的证据。

接收端分片齐全或缺失的重组过程
图3:片段齐全才能重组;缺片可能导致超时丢弃。

06排查时应记录哪些信息

在授权的测试环境里,先画出发送端、二层交换设备、路由接口、隧道和接收端的真实路径,再记录各处接口MTU、是否设置DF、协议类型、抓包位置及抓包时间。对于每个疑似分片组,核对源地址、目的地址、协议、标识、偏移与MF,而不是只看包长。

如果发送端有完整报文而路由器出口出现多片,说明应进一步核对IP转发和接口MTU;如果出口已发出全部分片、接收端只看到一部分,则需要沿实际路径查找丢失或过滤的位置。镜像设置、网卡卸载和主机抓包位置也可能改变观察结果,单张截图不能代表线路上的全部情况。

还要留意安全设备对分片的处理。某些过滤规则需要检查传输层端口,但非首片通常不包含完整的传输层头部;设备怎样关联状态、是否允许这些分片通过,取决于具体产品和规则。不要把“第一片通过”直接等同于“所有片都已通过”。检查策略时同时保存变更前配置,并由负责现场安全与控制的人员共同确认。

如果重组经常失败,优先调查路径MTU、丢包和过滤条件,而不是单纯延长接收端等待时间。不同应用有不同约束:部分实时业务对延迟更敏感,另一些业务更重视完整性。最终应以协议设计、设备资料和受控测试结果确定处理方式。

涉及生产控制的测试应由现场负责人确定窗口与范围。不要为了让大包通过,未经验证就关闭防火墙、任意增加帧长或开启某项路由功能;先确认业务协议支持、网络边界和可回退方案,再进行小范围测试。

07记住分片与重组各自的位置

IPv4分片是网络层机制,接收端利用地址、协议、标识、偏移和MF等信息重组。不同分片可以乱序到达,但只有内容完整并满足接收端规则,才能继续交给上层。MTU、IP路由、交换机帧长及业务重试属于不同环节,要分别取证。

飞畅工业交换机和工业网关产品可用于构建现场以太网连接;设备是否具备IP路由、端口MTU或相关过滤功能,应以具体型号、固件和使用手册为准。本文为通用原理示意,不代表对飞畅某一型号的内部结构或现场性能进行过实测。

参考资料

RFC 791:IPv4与分片重组;RFC 6864:IPv4标识字段更新;飞畅管理型工业轨式交换机产品资料。图为通用示意,非特定产品实测。

现场常见问题

IPv4分片一定由交换机完成吗?

不一定。发送主机或满足条件的IPv4路由器可能分片,普通二层交换机不负责IP分片。

收到最后一片就代表重组完成吗?

不一定。接收端还要确认从起点到末尾的所有分片均已到达并满足重组规则。

丢失分片时IPv4会自动逐片重传吗?

IPv4分片本身不提供通用逐片重传。是否重试由传输层或应用协议及其实现决定。

适用边界与延伸阅读

IPv4分片与重组的通用示意,不代表特定产品内部实现或现场实测。

IP MTU、巨帧与路径瓶颈;工业交换机微突发与出口排队