首页/系统/Linux 内核与性能调优速查/收发 offload 开关与抓包一致性
网络栈调优98 条

收发 offload 开关与抓包一致性

GRO/LRO 会把收到的数据段合并成大包, 抓包时看到超大帧属于正常合并结果; 需要逐包分析时再临时关闭。

offload 与抓包一致性

GRO 与 LRO 在收包侧把多个数据段合并成大包再交给协议栈,GSO 与 TSO 在发送侧把大块数据委托给网卡拆分。结果是抓包时可能看到远超 MTU 的巨帧,这属于合并产物,不是协议异常。需要逐包分析时临时关闭对应 offload,分析结束后应恢复原状。

基本信息

查看命令ethtool -k eth0 | grep -E 'gro|gso|lro|tso'
临时关闭ethtool -K eth0 gro off lro off
恢复命令ethtool -K eth0 gro on lro on
生产建议保持 offload 开启以降低 CPU 开销
影响范围抓包呈现、逐包校验、部分安全检测设备

典型使用场景

  • 抓包看到超大帧,确认是合并结果而非异常报文
  • 逐包核对 TCP 序号与校验和,需要关闭合并后再抓
  • 安全设备接入:部分检测引擎对合并包处理异常
  • 排查 MTU 相关问题时避免被合并包干扰判断
  • 压测评估 offload 对 CPU 使用率的影响

查看与临时关闭

查看与临时关闭
ethtool -k eth0 | grep -E 'gro|gso|lro|tso'   # 查看四项 offload 的当前状态
ethtool -K eth0 gro off lro off              # 逐包分析前临时关闭
tcpdump -i eth0 -nn -c 20 host 203.0.113.10   # 此时抓到的包按实际到达形态呈现
ethtool -K eth0 gro on lro on                # 分析结束后恢复,降低 CPU 开销

四个开关的方向

开关方向作用
GRO收包软件把同流小包合并为大包
LRO收包网卡硬件合并,需驱动支持
GSO发送协议栈把大块数据拆分的委托机制
TSO发送网卡硬件完成分段,降低 CPU 负载

使用注意

  • 抓包结论要注明当时是否关闭了 offload,否则结论无法复现
  • 关闭 offload 会提高 CPU 占用,只应临时启用
  • 部分虚拟网卡不支持全部开关,执行时可能报错或不生效
  • 安全与流量分析设备旁路部署时,需评估合并包对检测的影响
看到超过接口 MTU 的帧先不要判定为异常:在开启 GRO 或 LRO 的主机上,抓包工具在合并之后取包是很常见的现象,核对 ethtool -k 的输出即可确认。
关闭 offload 只影响本机呈现与处理方式,不会改变对端看到的报文;用它来「修复」抓包与业务不一致的问题,只是换了一个观察口径。

易错点

  • 把抓包中的合并大包误判为协议异常或攻击流量,浪费时间排查
  • 分析结束后忘记恢复 offload,长期增加 CPU 负担且无从察觉
  • 用关闭 offload 后的抓包结果去解释生产环境未关闭时的现象
  • 在不支持这些开关的虚拟网卡上执行命令,报错后误以为已经关闭

数据来源与参考

  • man ethtool
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌