导出的 tcpdump pcap 并在另一台使用 wireshark 的机器上进行调查显示大量无效的 TCP 校验和消息。这是使用 TCP 卸载功能时已知且记录在案的现象:https ://wiki.wireshark.org/TCP_Checksum_Verification
唯一不清楚的是为什么校验和不正确?
TCP 校验和是在伪标头的帮助下在整个 TCP 段上计算的,并在校验和计算过程中使用全零的临时校验和值 ( http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm#图_218)。然后丢弃伪标头。差异在哪里蔓延?
因为,校验和是由 NIC 计算的,而不是由操作系统计算的。
您链接到的 wiki 页面确实解释了这一点:
TCP 段位于计算机 RAM 中。它包含 TCP 段所需的所有字段。
当使用 TCP 校验和卸载时,传输段时会发生以下情况:
操作系统会填写内存中 TCP 段中的每个字段,校验和除外。校验和字段不是由操作系统计算的,它包含之前在该内存位置中的任何数据。
现在,像 Wireshark 这样的数据包捕获工具会捕获这个内存位置的内容,其中包含一个没有计算校验和的 TCP 段。
当 OS 将段发送到 NIC 时,NIC 硬件然后执行校验和计算,并将计算的校验和放入特定的 TCP 段字段。操作系统或捕获工具永远不会看到此校验和。
这就是 Wireshark 报告这些错误的原因。