FIBERIOT / 基础知识
一台控制设备发出的信息,经过网络后有时不是以一个完整IP报文到达,而是分成几个片段。接收方怎样知道这些片段属于同一份报文、应该放在哪个位置?如果其中一片迟迟不到,应用会收到半份数据吗?理解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地址与上层协议,再看分片字段。

04偏移与MF标志告诉接收端什么
分片偏移字段指出这一片载荷在原始IP载荷中的位置;它按八字节为单位表达,不等同于以太网帧的字节序号。接收端依据偏移把各片内容放回对应位置,而不是简单按到达先后顺序拼接。网络转发过程中,后发的片段也可能先到。
MF表示后面是否还有更多分片:一般非末片的MF为1,最后一片为0。收到MF为0的片段,意味着已看到末尾位置,并不代表前面的所有片段都到了。还要检查从起点到末尾的内容是否齐全,才能交给后续网络层处理。
切分时还需遵守对齐规则:除最后一个分片外,分片载荷长度通常必须是八字节的整数倍。现场排查时不必先手算所有二进制位,但应弄清抓包工具显示的是偏移字段原值还是已经换算的字节位置,避免把同一个数解释错单位。
05丢了一片会怎样
接收端通常为尚未收齐的分片保留临时重组状态,并设置等待时间。如果缺片迟迟未到,重组超时后会丢弃未完成的数据报;应用通常不能把剩余碎片直接当作完整IP报文使用。缓冲容量、超时处理及安全策略因系统而异,不能从通用原理推断某个型号的数值。
分片越多,一份完整数据报涉及的独立传输片段也越多。只要其中一片没有到达,整个重组可能失败;这解释了为什么应关注整条路径和各片状态。但不应仅凭“大报文不通”就断言某一片丢失:拥塞、过滤、设备负载和其他链路故障也可能造成相似现象。
TCP或应用是否重试属于更高层的问题,取决于实际使用的协议与实现;IPv4分片本身不提供通用的逐片可靠重传。UDP应用也不能因为使用了IP就假定网络会自动补齐丢失内容。出现异常时应分别查看传输层和应用层的证据。

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分片与重组的通用示意,不代表特定产品内部实现或现场实测。


