You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

持续发送小于MTU数据包的TCP客户端是否可判定为恶意?

自定义TCP协议小包DoS检测逻辑解答

能否基于MTU设置拼接次数阈值

可以,该思路具备可行性,但不能直接硬套公网常见的1480 MTU作为计算基准,需要做冗余设计避免误杀正常连接。

你提出的判定逻辑合理性说明

合法客户端将整帧写入缓冲区后单次调用write发送的场景下,TCP层只会因为路径MTU限制、拥塞控制规则做分段,正常接收侧的epoll可读通知次数必然和帧大小正相关,不会出现远超过「帧长度/路径MTU」的通知次数。
你提到的「已收到长度前缀确认帧大小为2MB,客户端后续持续每次仅发10字节」的场景,明显不符合正常TCP传输特征,判定为恶意并断开连接的逻辑是合理的。

设计时需要注意的细节

  • 基准MTU建议取IPv4要求的最小MTU对应净荷值536字节(即576字节最小MTU减去40字节标准IP+TCP头),兼容移动网络、VPN、跨运营商等路径MTU较小的场景,避免误杀正常连接。
  • 阈值要留足够冗余,比如已知帧长度为L时,最大允许拼接次数可设置为 (L / 536) * 2 + 10,两倍冗余加固定余量,应对TCP重传、内核缓冲flush波动、偶发小包等正常场景。
  • 长度前缀的读取不要计入帧拼接次数,长度前缀本身是固定小数据,单独计数处理,避免刚建立连接的正常请求被误判。

可选优化方案

可以额外增加单次读取数据大小的检测规则,如果连续3次以上epoll通知可读后,读到的数据量小于100字节,可直接提前判定为恶意,无需等到累计次数阈值,进一步降低服务端资源消耗。

内容的提问来源于stack exchange,提问作者underflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 00:06:08