2010-03-23 134 views
3

我使用原始套接字创建自己的套接字。我需要设置tcp_checksum。
我已经尝试了很多引用,但都不工作(我正在使用wireshark进行测试)。
你能帮我吗?顺便说一句,我读了一些地方,如果你设置tcp_checksum = 0。那么硬件会自动为您计算校验和。这是真的?我试过了,但在wireshark中,tcp_checksum给出了0X000的值,并表示tcp卸载。我也读过关于TCP卸载,并不明白,是否只有wireshark无法检查卸载的TCP校验和,但有一个正确的?tcp checksum和tcp卸载

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

+0

你实际上得到的硬件计算校验开始,经过0000?没有为我工作。 – user666412 2015-05-18 02:57:21

回答

3

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

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

+2

Linux是这类信息的重要知识来源。另请参阅TCP的规格http://www.rfc-editor.org/rfc/rfc793.txt – 2010-03-23 07:35:37

+0

有关RFC的好处(这一次我怎么忘了它) - 但有一件事 - tools.ietf.org HTML页面是更好的地方阅读它们:http://tools.ietf.org/html/rfc793#section-3.1 – Kimvais 2010-03-23 08:09:29