1

(使用 Linux)

使用创建TCP数据包raw sockets- 事实证明,在高性能网络中计算校验和是我的瓶颈。由于 NIC 将支持校验和卸载,并且ethtool还说它已启用,我希望我可以使用校验和卸载。

但是,当我使用原始套接字时,似乎没有计算校验和。有没有办法使用原始套接字启用 tcp 校验和卸载?

编辑:

实际上我的机器/网卡(Thinkpad x201)的行为似乎不太合乎逻辑:当使用普通的 tcp 套接字发送数据包时,所有校验和都是错误的,在环回接口以及机器之间。有趣的是,另一台机器默默地传递数据包?

Edit2:好的,现在我只是查看了错误机器上的数据包,卸载工作正常。但是当我离开tcp_checksum字段 0 时,它不会被填写,它只是保持 0。

4

1 回答 1

0

我在这里遇到了同样的问题:在原始套接字中发送了 TCP 或 UDP 数据包,但无法利用启用了校验和卸载的 NIC。希望有一个 setsockopt() 或 ioctl() 类型的函数可以在原始套接字上启用校验和卸载。

对于为什么wireshark显示数据包有校验和错误但目标主机无论如何都接受所有数据包的问题,​​原因是wireshark(如果在windows上通过winpcap等)在数据包从操作系统到达NIC之前捕获数据包。数据包没有由操作系统或应用程序正确填写的校验和字段——这就是 NIC 上的校验和卸载功能的用途。

问题是,如何使 NIC 能够在原始套接字上进行校验和卸载。

于 2011-08-13T15:27:34.893 回答