tcp 校验和和 tcp 卸载

标签 tcp checksum raw-sockets

我正在使用原始套接字来创建我自己的套接字。我需要设置 tcp_checksum。
我尝试了很多引用资料,但都不起作用(我正在使用 wireshark 进行测试)。
你能帮帮我吗?
顺便说一句,我在某处读到如果你设置 tcp_checksum=0。然后硬件会自动为你计算校验和。这是真的?我试过了,但在 wireshark 中,tcp_checksum 给出的值为 0X000 并表示 tcp 卸载。我也阅读了有关 tcp 卸载的内容,但不明白,难道只是 wireshark 无法检查卸载的 tcp 校验和,但有一个正确的校验和吗??

编辑:我意识到如果将 tcpChecksum 设置为 0,则网卡将设置它而不是操作系统。我正在使用 wireshark 和虚拟机进行测试,所以这解释了为什么校验和为 0x000(因为数据包甚至没有传递到网卡。)
但我仍然对手动计算 tcp_checksum 感到好奇...有任何帮助或链接吗?

最佳答案

This article试图解释它是如何完成的。

另一个值得一看的地方是 Linux 内核源代码,从文件 net/ipv4/tcp__ipv4.c 开始。

关于tcp 校验和和 tcp 卸载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497941/

相关文章:

tcp - 为什么我收到缩小窗口的 tcp 段?

Python RAW 套接字解释数据字节

python - 在没有 setcap cap_net_raw 的 Linux 中打开原始套接字

tcp - 通过 SLIP 接收的数据包和从以太网接收的数据包之间的格式有区别吗?

tcp - 如何确定原始数据包中 IP header 和 TCP header 的起始字节

c++ - 从多个 C++ 套接字多次读取

c# - 如何为整个 USB 驱动器制作校验和?

python - 在python中计算crc8 dvb s2

c# - 在 C#/.NET 中运行应用程序之前检查 DLL 是否真实/正确

自己制作的 Linux 网桥 : arp request never succeeds