Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

卸载

大多数现代操作系统都支持某种形式的网络卸载,即部分网络处理在 NIC 上完成,而不是由 CPU 完成。通常这是一件好事。它可以释放系统其他部分的资源,并让系统处理更多连接。如果你正在尝试捕获流量,它可能会导致错误的报错以及奇怪甚至缺失的流量。

  • 卸载

  • 校验和卸载

  • Linux

  • Windows

  • 分段卸载

  • TCP Chimney

  • 另请参阅

校验和卸载

在支持校验和卸载的系统上,IP、TCP 和 UDP 校验和会在数据包即将在线路上传输之前由 NIC 计算。在 Wireshark 中,这些数据包会显示为出站数据包,标为黑色、带红色文本,并带有注释 [incorrect, should be xxxx (maybe caused by "TCP checksum offload"?)]。

Wireshark 会在数据包发送到网络适配器之前捕获它们。它看不到正确的校验和,因为校验和此时尚未计算。更糟的是,大多数 OS 并不会费心初始化这些数据,所以你看到的很可能是不该看到的一小段内存内容。

Wireshark 1.2 及以上版本的新安装默认禁用 IP、TCP 和 UDP 校验和验证。如有需要,你可以在这些 dissector 中分别手动禁用校验和验证。

TCP 和 UDP 校验和会同时基于 payload 以及 IPv4 或 IPv6 头部中选定的元素来计算,这些元素称为 pseudo header。Linux 和 Windows 在卸载校验和时,会计算 pseudo header 的贡献值并将其放入 checksum 字段。Wireshark 4.2 及以上版本可以检测这种 partial checksums,并将其标记为 partial checksums,而不是标记为无效。

如果你遇到网络问题,并在尝试用 Wireshark 排查时发现这些校验和错误,那么你的网卡可能启用了 TCP checksum offload,并且由于某种原因数据包没有被适配器修正(NAT、bridge 或 route redirection 正在把数据包发送到另一个接口)。在这种情况下,如果可能,你可能需要检查并禁用该适配器的 checksum offload。

Linux

可以使用 ethtool 命令启用和禁用 checksum offloading。

检查:

ethtool --show-offload ethX

禁用:

ethtool --offload ethX rx off tx off

或者,对于某些 3Com 网卡(参见 3c59x vortex 文档):

rmmod 3c59x ; modprobe 3c59x hw_checksums=0

Windows

在 Windows 中,进入 Control Panel->Network and Internet Connections->Network Connections,右键单击要更改的连接并选择“Properties”。按下“Configure...”按钮,选择“Advanced”选项卡以查看或修改“Offload Transmit TCP Checksum”和“Offload Receive TCP Checksum”的值。

分段卸载

有些网卡可以重新组装流量。这会在 Wireshark 中表现为大于预期的数据包,例如在 MTU 为 1500 字节的网络上出现 2900 字节的数据包。你可以使用上一节中描述的方法,在 Linux 和 Windows 上检查并更改卸载行为。

这篇文章对应该怎么做有很好的解释。

TCP Chimney

Chimney offloading 让 NIC 处理已建立 TCP 连接的处理工作。在 Windows 上,被卸载的连接会绕过 WinPcap,这意味着你将无法捕获 TCP 会话。

netsh int ip set chimney disabled

另请参阅

  • Wireshark User's Guide 中的 Checksums

  • Wikipedia 上的 TCP Offload Engine 文章

  • KB 912222,The Microsoft Windows Server 2003 Scalable Networking Pack Release

  • KB 951037,Information about the TCP Chimney Offload, Receive Side Scaling, and Network Direct Memory Access features in Windows Server 2008

相关 Wireshark Wiki 页面

网络分析技术档案