IP報頭中校驗和的計算

    校驗算法:將cksum字段填0,然後以每16位爲單位將各個單元相加,得到的值一般會長於16位,則先取後16位記爲A,然後右移16位得到B,令A+B得到cksum,如果還長於16位則繼續上一步驟。最後將cksum填入相應字段。由於路由器通常只修改IP報文的TTL字段,那麼轉發時將其cksum+1即可,而不需重新計算。

  1. public static UInt16 SumOfCheck(UInt16[] buffer) 
  2.        int cksum = 0; 
  3.        for(int i =0; i<buffer.Length; i++) 
  4.             cksum += (int) buffer[i]; 
  5.        while(cksum >> 16 !=0) //調整爲16位
  6. cksum = (cksum >> 16) + (cksum & 0xffff);          
  7.        return (UInt16) (~cksum);//按位取反 

 

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