ip數據報首部校驗和的計算

                             

       ip數據報首部校驗和的計算

網絡層間的數據傳送特點是:

  不可靠:    分組可能丟失,亂序等,不做確認;

  無連接:    每個分組都獨立對待;

  盡力投遞: 不隨意放棄分組;

  點到點。

因爲在傳輸過程中會受到很多的干擾,ip數據包會發生改變,這時接受着收到這個ip數據包毫無意義。在這種情況下應把這樣的數據包丟掉。那麼怎樣確定數據包發生了變化,這就用到了首部校驗和。就是發送者把Ip首部的校驗和外的數據全部相加再取反再放到校驗和位置(如果高位有溢出的就把溢出數據加到低位)。接收者只要把整個ip數據報首部數據相加,判斷是否爲0,如果是0就收下,如果不是的話就扔提。

   具體實現的代碼是:

  1. /*求校驗和函數*/  

  2. USHORT CheckSum(USHORT *buffer, int size)  

  3. {  

  4.     unsigned long cksum=0;  

  5.     while (size > 1)   

  6.     {  

  7.         cksum += *buffer++;  

  8.         size -= sizeof(USHORT);  

  9.     }  

  10.     if (size)   

  11.     {  

  12.         cksum += *(UCHAR*)buffer;  

  13.     }  

  14.     /*對每個16bit進行二進制反碼求和*/  

  15.     cksum = (cksum >> 16) + (cksum & 0xffff);  

  16.     cksum += (cksum >>16);  

  17.     return (USHORT)(~cksum);  

  18. }  



不可靠:    分組可能丟失,亂序等,不做確認;

無連接:    每個分組都獨立對待;

盡力投遞: 不隨意放棄分組;

點到點。


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