TCP檢驗和


TCP的檢驗和

 

檢驗和目的

        目的是為了發現TCP首部和數據在發送端到接收端之間發生的任何改動。如果接收方檢測到檢驗和有差錯,則TCP段會被直接丟棄。

 

        TCP在計算檢驗和時,要加上一個12字節的偽首部。

偽首部

 

   偽首部共有12字節,包含IP首部的一些字段,有如下信息:32位源IP地址、32位目的IP地址、8位保留字節(置0)、8位傳輸層協議號(TCP是6,UDP是17)、16位TCP報文長度(TCP首部+數據)。

        偽首部是為了增加TCP校驗和的檢錯能力:通過偽首部的目的IP地址來檢查TCP報文是否收錯了、通過偽首部的傳輸層協議號來檢查傳輸層協議是否選對了。

 

檢驗和計算過程

        TCP首部校驗和計算三部分:TCP首部+TCP數據+TCP偽首部。

發送端:
        首先,把偽首部、TCP報頭、TCP數據分為16位的字,如果總長度為奇數個字節,則在最后增添一個位都為0的字節。
        把TCP報頭中的校驗和字段置為0。
        其次,用反碼相加法(對每16bit進行二進制反碼求和)累加所有的16位字(進位也要累加,進位則將高位疊加到低位)。
        最后,將上述結果作為TCP的校驗和,存在檢驗和字段中。

接收端:

        將所有原碼相加,高位疊加到低位, 如計算結果的16位中每一位都為1,則正確,否則說明發生錯誤。  

 

驗證示例:
          校驗和  反碼求和過程
        以4bit 為例
        發送端計算:
        數據:   1000  0100   校驗和  0000
        則反碼:0111  1011               1111
        疊加:   0111+1011+1111 = 0010 0001   高於4bit的, 疊加到低4位      0001 + 0010 = 0011 即為校驗和
 
        接收端計算:
        數據:  1000   0100   檢驗和  0011
        反碼:  0111   1011                1100
        疊加:  0111 + 1011 +1100 = 0001 1110  疊加為4bit為1111.   全為1,則正確
 

UDP檢驗和

        基本過程和TCP檢驗和相同,不同的是UDP的偽首部中8位傳輸層協議號是17而TCP是6。如下圖所示

 

IP檢驗和

        IP首部中的檢驗和只覆蓋IP的首部,不覆蓋IP數據報中的任何數據

 

三者檢驗和的異同

        TCP和UDP檢驗和是一個端到端的檢驗和,由發送端計算,然后由接收端驗證。

        TCP和UDP檢驗和覆蓋首部和數據,而IP首部中的檢驗和只覆蓋IP的首部,不覆蓋IP數據報中的任何數據。

        TCP的檢驗和是必需的,而UDP的檢驗和是可選的。

        TCP和UDP計算檢驗和時,都要加上一個12字節的偽首部。

 

(全文完)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM