【问题标题】:How to use TCP Checksum offloading with RAW sockets如何通过 RAW 套接字使用 TCP 校验和卸载
【发布时间】:2011-07-07 12:09:37
【问题描述】:

(使用 Linux)

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

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

编辑:

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

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

【问题讨论】:

    标签: sockets tcp checksum offloading


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-02
      • 2013-05-09
      • 2010-10-14
      • 2012-10-23
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多