我正在使用原始套接字来创建我自己的套接字。我需要设置 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/