IP數據報首部checksum的計算
阿新 • • 發佈:2019-05-07
ip協議 nbsp 字節順序 接收 否則 spa 校驗和 校驗 網絡
下面摘自《TCP/IP協議簇》的IP頭校驗和算法:
發送時:
1. 將校驗和字段置為0;
2. 將整個首部分為16bit的部分,求和;
3. 取反碼,填入到校驗和字段中;
接收時:
1. 直接將整個首部分為16bit的部分,求和;
2. 取反碼,若結果為0,取合法;否則丟棄;
這上面有兩個細節沒有描述清楚:
1. 計算時的字節順序(litter endian和big endian)問題;
2. 取和溢出時的改進計算方法;
根據實驗結果,及參考網絡上的資料,實際上幾乎現有所有的系統對校驗和算法已經有點小小的補充,也許《TCP/IP協議簇》這裏沒有更新罷了,自我安慰吧,如下:
◆當發送IP包時,需要計算IP報頭的校驗和:
1、 把校驗和字段置為0;
2、 對IP頭部中的每16bit進行二進制求和;
3、 如果和的高16bit不為0,則將和的高16bit和低16bit反復相加,直到和的高16bit為0,從而獲得一個16bit的值;
4、 將該16bit的值取反,存入校驗和字段。
◆當接收IP包時,需要對報頭進行確認,檢查IP頭是否有誤,算法同上2、3步,然後判斷取反的結果是否為0,是則正確,否則有錯。
算法:
IP數據報首部checksum的計算