TCP checksum方法類似於IP-header checksum(不清楚可以參照上篇文章)
但是TCP需要在校驗時加入一個僞IP頭部一起校驗以防止數據的誤傳
這個僞IP頭部的格式爲:
octet octet octet octet
+--------+--------+--------+--------+
| Source Address |
+--------+--------+--------+--------+
| Destination Address |
+--------+--------+--------+--------+
| zero | PTCL | TCP Length |
+--------+--------+--------+--------+
PTCL:爲PID
TCP Length=IP total length – IP Header length=73-20=53=0x0035
計算方法爲:
1. 將TCP 頭部校驗和部位值置爲全0
2. 將僞IP頭部+TCP-header+TCP數據 以16bit爲單位從前向後做加法運算
如果尾部數據不足16bit 則填充右邊位數至16bit
3. 此後等同IP包頭校驗和處理
實例:(紫色爲僞IP頭部+TCP頭部;綠色爲上面TELNET數據)
8121A=0008+121A=1222
0x1222
= 1 0010 0010 0010
= 0001 0010 0010 0010
反 1110 1101 1101 1101
= 0xEDDD
所有校驗值算法的目的都是做完整性檢查,所以在算法都是儘量簡單,減少數據處理檢查時間。
所以,對於整個數據完整性的校驗發生在2層與4層,3層IP頭部校驗只是檢查IP頭部空間是否被破壞的目的也是在確認數據傳輸中所需參數正確的情況下,儘快將數據轉發掉,減少延遲。在後期的MPLS頭部中甚至省掉了校驗字段,也都是出於快速轉發的目的考慮。