问题描述:
在使用wireshark抓取报文时,发现从10.81.2.92发过来的报文绝大部分标记为异常报文(开启IPv4和TCP checksum)
分析如下报文,发现http报文(即tcp payload)的长度远远大于实际的mss大小,如下图为4126
问题解决:
ethtool -K eth0 tso off
ethtool -K eth0 tx off
问题分析:
目前很多网卡已经支持IP片以及IP/TCP/UDP等协议的校验和计算,用来减少内核层面的运算(减少CPU负载),当协议层发现网卡支持相应的特性时,会将相应的处理交给网卡操作。如上面提到的校验和,正常情况下,校验和由对应的协议层处理,但在网卡使能情况下会将其推迟到网卡层面处理,网卡处理结束后直接发送,这就是为什么wireshark抓到的报文里面的校验和会提示不正确的原因,同样地,TCP会选择不大于滑动窗口的报文(该报文可能大于MSS),交由网卡去分片处理。使用ethtool -k 命令可以查看网卡支持的特性。
TIPS:
参考:
https://www.kernel.org/doc/Documentation/networking/checksum-offloads.txt