ethtool -k eth0 | grep -E "(rx|receive.*check)"可查看网卡接收校验和状态,若显示off或不兼容,易引发TCP重传、UDP丢包等“伪校验错误”;启用需ethtool -K eth0 rx on,持久化须按发行版配置文件添加对应指令。

在Linux中,使用 ethtool -k 可以查看网卡硬件卸载(offload)功能的状态,其中就包括接收端的校验和验证(Receive checksum)是否启用。若该功能被错误关闭或与设备/驱动不兼容,可能导致内核丢弃本应有效的报文,表现为TCP重传、UDP丢包、连接不稳定等“校验错误”现象——实际并非报文损坏,而是内核因未验证通过而丢弃。
确认当前网卡的Receive-Checksum状态
执行以下命令(将 eth0 替换为你的实际接口名):
ethtool -k eth0 | grep "receive-checksum"
输出类似:
receive-checksum: on
receive-checksum: off
注意:部分驱动显示为 rx 或 rx offload,可一并检查:ethtool -k eth0 | grep -E "(rx|receive.*check)"
理解Receive-Checksum的作用与常见问题场景
该功能指由网卡硬件在接收报文时自动验证IP/TCP/UDP校验和,并将结果通过描述符标记给内核。若开启且硬件校验失败,网卡通常直接丢弃报文;若开启但内核未信任硬件结果(如驱动bug),可能误判为校验错误;若关闭,则全部交由CPU软件校验,增加开销但更“保守”。
典型异常表现包括:
- TCP连接频繁重传,Wireshark显示“TCP checksum incorrect”,但抓包位置在本机发送端之后
- UDP应用收不到数据,
/proc/net/snmp中InCsumErrors持续增长 - 同一网卡在不同内核版本或固件下行为不一致
临时启用或禁用Receive-Checksum
使用 ethtool -K 修改(需root权限,且仅对支持该控制的驱动生效):
ethtool -K eth0 rx on — 启用硬件接收校验ethtool -K eth0 rx off — 禁用,强制CPU校验
⚠️ 注意事项:
- 修改后无需重启网卡,立即生效,但新连接才受控(已建连接的校验行为取决于建立时状态)
- 某些网卡(如部分Realtek或老旧Intel芯片)不支持动态开关rx offload,会提示
Operation not supported - 若启用了LRO/GRO,建议先关闭再调整rx,避免交互影响:
ethtool -K eth0 lro off gro off
持久化配置(避免重启失效)
临时设置在网卡重启或系统重启后丢失。要持久生效,按发行版选择方式:
-
RHEL/CentOS/Fedora:在
/etc/sysconfig/network-scripts/ifcfg-eth0中添加ETHTOOL_OPTS="rx on" -
Debian/Ubuntu(ifupdown):在
/etc/network/interfaces对应iface段添加post-up ethtool -K eth0 rx on -
systemd-networkd 或 Netplan(Ubuntu 18.04+):需通过
networkd-dispatcher或自定义.service触发,或在Netplan YAML中用set-name+match配合init-script
修改后运行 systemctl restart systemd-networkd 或 ifdown && ifup 使配置加载。


















