首页/网络/抓包与流量分析速查/TCP 校验和 incorrect 解读
TCP 流分析82 条

TCP 校验和 incorrect 解读

Wireshark 校验和错误多为网卡校验和卸载(offload)造成:抓包发生在硬件计算校验和之前,显示 incorrect 但报文实际有效。

校验和 incorrect 解读

抓到的包里 TCP 校验和显示 incorrect,绝大多数情况并不是真的出错,而是网卡校验和卸载造成的:抓包动作发生在硬件计算校验和之前,Wireshark 拿到的还是一个尚未填写或已被占位的值。虚拟化环境中几乎必然会看到这种现象,先查 offload 状态再谈故障,能省下大量时间。

基本信息

适用平台Linux 上的 ethtool 与 Wireshark,虚拟化与半虚拟化网卡尤甚
常见成因发送端或接收端校验和卸载
核对命令ethtool -k <网卡> | grep -i checksum
判断依据真实错误通常伴随大量重传与设备丢弃计数

典型使用场景

  • 避免误判:先确认网卡是否开启 offload,再决定要不要继续查
  • 定位真错:关掉卸载后复抓,校验和仍然错才说明报文确实损坏
  • 容器与虚机排障:虚拟网卡上的错误校验和是高发场景
  • 上报材料准备:把 offload 状态一并写进报告,省掉来回确认
  • 交叉验证:结合重传、丢包计数与设备日志共同判断

核验方法

核验方法
ethtool -k eth0 | grep -i checksum      # 查看网卡校验和卸载开关
ethtool -K eth0 tx off rx off            # 临时关闭后复抓验证,会影响吞吐
# 只看校验和异常的包
tshark -r a.pcap -Y 'tcp.checksum.status == "Bad"' | head

判断对照

现象更可能的原因处理方向
几乎每个包都标错误网卡校验和卸载确认 offload 状态即可,无需处理
只有部分包错误可能存在真实损坏关卸载后复抓确认
错误伴随大量重传真实丢包或乱序查看重传与设备计数
虚拟网卡上普遍错误半虚拟化实现的行为按已知行为忽略
判断真伪最直接的办法是临时关闭网卡的发送与接收校验和卸载再抓一次;但关闭卸载会明显影响吞吐,只应在定位阶段使用,拿到结论后立即恢复。
抓包点位于虚拟交换机或容器桥接网络时,校验和常由软件补齐,出现错误提示的概率更高。这种情况应结合两端抓包对比,而不是拿单点数据下结论。
这个现象与 TCP 本身无关,UDP 报文同样会出现类似的校验和提示,处理思路完全一致:先排除卸载因素。

易错点

  • 虚拟化环境几乎必然看到"错误"校验和,先查 offload 再谈故障
  • 关闭 offload 影响吞吐,只在定位阶段临时使用
  • 把校验和错误当成丢包根因:真实丢包要靠重传与设备计数判断,告警本身不等于丢包
  • 只在一侧抓包就下结论,另一侧可能因为 offload 显示正常,交叉验证才可靠

数据来源与参考

  • ethtool 手册
  • Wireshark 常见问答(校验和)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌