分片报文干扰正常协议处理的核心方式,是利用分片重组逻辑中的重叠、缺失、乱序和超时缺陷,让防火墙、IDS或服务器协议栈在重组前做出错误判断或耗尽资源。
分片报文干扰正常协议处理的常见方式
IP分片本来是为了穿透不同MTU链路而设计的机制,但攻击者会故意制造异常分片,让中间设备或主机在重组时踩坑,你可以把分片理解成把一封信拆成几张明信片寄出,每张明信片都写了偏移量,如果偏移量互相重叠,或者缺了几张,收信方就可能拼错内容。
干扰方式主要有下面几种:
- 重叠分片:多个分片携带相同的偏移量,但内容不同,防火墙和主机的重组策略经常不一致,一个采用先到优先,一个采用后到优先,结果防火墙拼出来的内容和主机最终收到的内容不一样,攻击就能穿透策略。
- 微小分片:把TCP或UDP头部强行拆到多个分片里,有的分片长度极小,只包含端口字段的一部分,边界设备如果只检查首片,就会因为看不到完整端口而直接放行。
- 乱序分片:故意把后续分片先发,首片最后发,部分设备没有正确处理乱序,会长时间等待首片,或者把后续分片直接丢弃,造成连接异常。
- 分片洪水:发送大量永远不完整的分片,占用重组缓冲区,服务器或防火墙的内存会被慢慢耗尽,正常分片的组装也会被拖垮。
- 超时挂起:只发首片,后续分片一直不发,每个首片都会在重组缓存中挂起一段时间,大量这样的首片会把缓存占满。
这些方式都有一个共同点:它们不靠高流量硬碰硬,而是利用协议栈在重组时的状态管理缺陷,行业共识认为,分片重组是协议栈实现中较容易出错的环节之一。
分片报文攻击怎么防御:从防火墙到内核参数
防御分片干扰,核心思路只有一条:先重组,再检测;控缓存,限速率。 下面按边界设备、主机加固、应急成本三个层面拆开说。
边界设备强制重组与丢弃可疑分片
防火墙或路由器如果先执行ACL匹配再重组,就容易被微小分片绕过,正确做法是让边界设备先完成分片重组,再交给策略引擎。
具体操作可以按这个顺序检查:
- 确认防火墙是否支持“先重组后检测”模式,不支持就考虑更换或前置专用抗D设备。
- 在Linux防火墙上使用netfilter的conntrack模块,并开启分片重组相关选项,较新内核默认会在连接跟踪前处理分片,但老系统不一定。
- 对首片不包含完整四层头部的分片直接丢弃。
- 对每源IP的分片速率做限制,比如限制每秒允许进入的重组分片数量。
- 设置合理的分片缓存超时时间和缓存上限,避免被挂起首片占满内存。

主机侧内核参数加固
Linux主机如果直接暴露在公网,建议检查下面几个内核参数,这些参数控制IP分片重组的缓存阈值和超时时间。
sysctl -w net.ipv4.ipfrag_time=30 sysctl -w net.ipv4.ipfrag_high_thresh=4194304 sysctl -w net.ipv4.ipfrag_low_thresh=3145728 sysctl -w net.ipv4.ipfrag_max_dist=64
ipfrag_time:分片在重组队列中的最长保留时间,单位是秒,调小可以更快释放缓存。ipfrag_high_thresh:重组缓存占用达到这个值后,内核会开始丢弃新来的分片。ipfrag_low_thresh:缓存占用回落到这个值以下后,内核恢复接受分片。ipfrag_max_dist:允许的分片乱序程度,数值越小,越能抵抗乱序干扰,但正常乱序流量也可能被丢。
执行完用sysctl -p让配置生效,如果是容器环境,需要确认宿主机内核参数是否可修改。
应急服务成本考量
如果自己排查后仍然无法定位,可以考虑采购外部应急响应,北京网络安全应急响应价格差异较大,通常按事件等级、到场时间和业务影响范围计费,从几千元到数万元不等,建议先通过抓包和内核日志判断是否属于分片干扰,再决定是否需要外部支撑,避免花冤枉钱。
IP分片和TCP分段有什么区别?先分清两个概念
很多人把IP分片和TCP分段混为一谈,其实它们发生在不同层,干扰方式也不同,下面用表格做个对比:
| 对比项 | IP分片 | TCP分段 |
|---|---|---|
| 发生层级 | 网络层 | 传输层 |
| 触发原因 | 链路MTU限制 | 双方协商的MSS限制 |
| 重组位置 | 目的主机IP层或中间设备 | 目的主机TCP层 |
| 报文单位 | IP数据报被拆成多个分片 | TCP数据流被拆成多个段 |
| 端口信息 | 仅在首片包含完整四层头部 | 每个段都包含完整TCP头部 |
| 干扰影响 | 影响防火墙、路由器、IDS/IPS和主机协议栈 | 主要影响端到端传输性能和连接稳定性 |
理解这个区别对排查很重要,比如你看到防火墙放行了流量,但主机没收到完整请求,第一反应应该查IP分片是否被错误处理,而不是去查TCP重传。

路由器分片报文处理异常排查:三个常见节点
路由器是分片问题的高发设备,因为很多路由器默认不重组,只做转发,一旦出现分片报文处理异常,可以从下面三个节点排查。
接口MTU与路径MTU不一致
如果某一跳接口MTU变小,但又禁止了ICMP不可达报文,上游设备就不知道该把包分片,或者分片后下游仍无法重组。
排查命令:
ip link show eth0 ping -M do -s 1472 目标IP
ping -M do -s 1472会强制不分片发送一个1472字节的载荷,加上IP头和ICMP头后总长约1500字节,如果通不过,说明路径上存在更小的MTU。
ACL或策略路由先于重组执行
部分路由器会先匹配ACL,再决定是否重组,如果ACL只检查端口,后续分片没有端口信息,就会被误丢。
确认方法:
- 在路由器上抓取进入接口的分片流量,观察是否大量分片被丢弃。
- 修改ACL规则,允许分片流量进入重组流程,或者显式放行
fragment流量。 - 如果设备支持分片重组功能,开启后再观察。
CPU与内存资源异常
分片重组会消耗CPU和内存,出现异常时先看CPU占用和重组缓存使用情况。
不同厂商命令不同,常见的有:
show processes cpu show memory show ip cache flow
如果CPU持续偏高,同时重组缓存占用接近上限,很可能正在遭受分片洪水,可以通过流采样或镜像抓包进一步确认分片比例。
分片报文绕过防火墙场景与应对
分片绕过防火墙是攻击者最常用的手法之一,典型场景是:攻击者把TCP SYN包拆成两个分片,首片只包含IP头和TCP源端口,目的端口被放在第二个分片,防火墙如果只检查首片,就看不见目的端口,可能直接放行,之后主机把两个分片重组起来,攻击流量就达到了目标服务。
还有一类场景是IDS/IPS签名匹配前没有重组,攻击者把攻击特征字符串拆到多个分片里,单个分片匹配不到特征,就会绕过检测引擎。
应对方式可以按下面几个步骤落地:
- 防火墙启用“先重组后检测”策略,确保检测引擎看到的是完整报文。
- 丢弃偏移量小于一定值的分片,比如首片长度不足以容纳完整TCP头部的直接丢弃。
- 对分片深度检测,使用支持分片重组状态跟踪的下一代防火墙。
-

在IDS/IPS上开启分片重组功能,并设置合理的重组超时时间。
用抓包与内核日志定位分片干扰问题
光靠猜解决不了问题,最终还是要靠抓包和日志,下面给出几个可验证的具体命令。
抓取分片报文
tcpdump -i eth0 'ip[6:2] & 0x1fff != 0'
这条命令抓取所有非首片分片。ip[6:2]是IP头的第6到第7个字节,低13位为分片偏移量,偏移量不为0就是后续分片。
tcpdump -i eth0 'ip[6:2] & 0x1fff == 0'
这条抓首片,配合-w保存文件,再用Wireshark打开分析。
Wireshark里的过滤表达式可以写成:
ip.flags.mf == 1 or ip.frag_offset > 0
查看内核重组失败计数
netstat -s | grep -i frag cat /proc/net/snmp | grep -i reasm
如果ReasmFails持续增长,说明有分片重组失败,可能是受到干扰。
查看内核日志
dmesg | grep -i frag
有些内核版本会在重组队列溢出时打印告警。
小结
分片报文干扰正常协议处理的本质,就是让不同设备对分片状态的理解出现偏差,防御的重点不是单点修补,而是统一策略:边界强制重组、限制缓存、先重组后检测,只要这三条落地,大多数分片干扰都会失效。
Q&A:关于分片报文干扰正常协议处理的方式
分片报文干扰正常协议处理的方式有哪些典型表现?
典型表现包括:防火墙日志显示放行但主机未收到完整请求、CPU或内存异常升高、连接建立不完整、netstat -s中重组失败计数持续增长、抓包发现大量不完整分片或重叠分片。
怎么判断服务器是否正在遭受分片报文干扰?
先看内核计数器。netstat -s | grep -i frag中重组失败数持续上升是一个强信号,再用tcpdump抓取非首片分片,观察是否有大量没有对应首片的后续分片,或者首片数量远少于后续分片,如果同时出现内存占用升高,基本可以判定为分片干扰。
分片报文干扰正常协议处理的方式能通过升级内核解决吗?
部分分片重组漏洞可以通过升级内核解决,因为近年来多个操作系统都修复过分片重组相关缺陷,但升级内核不能解决所有问题,尤其是边界设备策略不当导致的绕过,内核升级只能修复主机侧的重组逻辑,无法改变防火墙或路由器在重组前就做决策的流程。