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偽首部。
接收端:
將所有原碼相加,高位疊加到低位, 如計算結果的16位中每一位都為1,則正確,否則說明發生錯誤。
UDP檢驗和
基本過程和TCP檢驗和相同,不同的是UDP的偽首部中8位傳輸層協議號是17而TCP是6。如下圖所示
IP檢驗和
IP首部中的檢驗和只覆蓋IP的首部,不覆蓋IP數據報中的任何數據
三者檢驗和的異同
TCP和UDP檢驗和是一個端到端的檢驗和,由發送端計算,然后由接收端驗證。
TCP和UDP檢驗和覆蓋首部和數據,而IP首部中的檢驗和只覆蓋IP的首部,不覆蓋IP數據報中的任何數據。
TCP的檢驗和是必需的,而UDP的檢驗和是可選的。
TCP和UDP計算檢驗和時,都要加上一個12字節的偽首部。
(全文完)