Ip:首部檢驗和字段

IP/ICMP/IGMP/TCP/UDP等協議的校驗和算法都是相同的,算法如下:

在發送數據時,爲了計算數IP據報的校驗和。應該按如下步驟:
(1)把IP數據報的首部都置爲0,包括校驗和字段。
(2)把首部看成以16位爲單位的數字組成,依次進行二進制反碼求和。
(3)把得到的結果存入校驗和字段中。
在接收數據時,計算數據報的校驗和相對簡單,按如下步驟:
 
(1)當接收IP包時,需要對報頭進行確認,檢查IP頭是否有誤,算法同上2、3步,然後判斷取反的結果是否爲0,是則正確,否則有錯。

1、發送方
  i)將校驗和字段置爲0,然後將IP包頭按16比特分成多個單元,如包頭長度不是16比特的倍數,則用0比特填充到16比特的倍數;
 
  ii)對各個單元採用反碼加法運算(即高位溢出位會加到低位,通常的補碼運算是直接丟掉溢出的高位),將得到的和的反碼填入校驗和字段;
 
  iii)發送數據包。
 
2、接收方
  i)將IP包頭按16比特分成多個單元,如包頭長度不是16比特的倍數,則用0比特填充到16比特的倍數;
 
  ii)對各個單元採用反碼加法運算,檢查得到的和是否符合是全1(有的實現可能對得到的和會取反碼,然後判斷最終值是不是全0);
 
iii)如果是全1則進行下步處理,否則意味着包已變化從而丟棄之。需要強調的是反碼和是採用高位溢出加到低位的,如3比特的反碼和運算:100b+101b=010b(因爲100b+101b=1001b,高位溢出1,其應該加到低位,即001b+1b(高位溢出位)=010b)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章