2010-03-23 96 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