1. 程式人生 > >IP數據報首部checksum的計算

IP數據報首部checksum的計算

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的計算