TCP和UDP校驗和
校驗和所校驗的內容包括:12字節偽首部、TCP的首部以及全部數據。
偽首部:包含了源地址、目的地址、協議和TCP長度等字段,這能夠防止TCP出現
路由選擇錯誤的
數據段。
偽首部並非TCP數據報中實際的有效成分。偽首部是一個虛擬的數據結構,其中的信息是從數據報所在IP分組頭的分組頭中提取的,既不向下傳送也不向上遞交,而僅僅是為計算校驗和。
這樣的校驗和,既校驗了TCP用戶數據的源
端口號和目的端口號以及TCP用戶數據報的數據部分,又檢驗了
IP數據報的源IP地址和目的地址。(偽報頭保證UDP和TCP
數據單元到達正確的目的地址。因此,偽報頭中包含IP地址並且作為計算校驗和需要考慮的一部分。最終目的端根據偽報頭和數據單元計算校驗和以驗證通信數據在傳輸過程中沒有改變而且到達了正確的目的地址。)

tcp報文中,在tcp的首部之前,多了一個12字節的偽首部,偽首部中4個字節保存源ip信息,4個字節目的ip信息,一個字節的保留位置,一個字節保存協議號(6代表tcp,17代表udp),2個字節保存tcp首部+數據的長度。
根據偽首部的信息通過位運算,得到了一個校驗和數據,保存在tcp保溫的checksum字段。接收端接收到tcp報文后,也按照特定算法計算出一個校驗和,與checksum保存的校驗和比較,如果相同,則完成此報文的接收。如果不相同,則丟棄此報文,讓發送端重傳。
tcp校驗和與ip校驗和的區別是:TCP和UDP檢驗和覆蓋首部和數據,而IP首部中的檢驗和只覆蓋IP的首部,不覆蓋IP數據報中的任何數據。
tcp校驗和和udp校驗和的區別是:TCP的檢驗和是必需的,而UDP的檢驗和是可選的。
參考資料:https://blog.csdn.net/jigetage/article/details/88739511