[爆卦]checksum原理是什麼?優點缺點精華區懶人包

為什麼這篇checksum原理鄉民發文收入到精華區:因為在checksum原理這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者ireullin (raison detre)看板C_and_CPP標題[問題] tcp hea...


小弟最近在學習一些網路的原理
所以試著用程式寫一些低階的網路封包控制
我的作業系統是 Ubuntu 12.10
編譯器是 gcc/g++

首先是IP header的部分
我實作了ping這個工具
在IP header的checksum我用一個函式GenerateChecksum(char* buff, int size)來計算
詳細的程式碼網路上範例很多,我就先不貼上來了
如果有需要請跟我說,我再補上
我從ubuntu去連線一台windows 7
然後在windows 7上面安裝wireshark來觀察我的封包是否正確
結果在這一個部分是沒有問題的
已經可以ping到windows7了

接下來我想實作connect的三方交握
可是當第一個syn送到windows 7時
wireshark就跟我說tcp 的checksum是不正確的
( 我一樣使用GenerateChecksum這個函式,IP的checksum也一樣沒有問題 )
我在網路上查了一些資料
我發現好幾篇文章的tcp checksum計算方式都不一樣 (但計算函式都大同小異)
以下是我看到的幾個方式,但我試過都不行

方法一:
送出封包內容 ip header + tcp header + pseudo header
tcp checksum 計算方式 tcp header + pseudo header

方法二
送出封包內容 ip header + tcp header + pseudo header
tcp checksum 計算方式 pseudo header + tcp header + pseudo header
與一的差別為計算 tcp checksum時在前面又接上了一個pseudo header去計算
不過我不太了解為什麼要這樣做
若有人之道也請跟我說

方法三:
送出封包內容 ip header + tcp header + pseudo header
tcp checksum 計算方式 pseudo header + tcp header

不過以上三種方式都不行
請問tcp checksum到底應該如何計算才是正確的
寫得好像有點複雜,如果有不清楚的地方請向我提出,謝謝

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.71.34
purincess:去看wireshark的checksum怎麼算的 XD 02/28 19:00

你可能也想看看

搜尋相關網站