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);//按位取反 

 

你可能感兴趣的:(IP,职场,休闲,校验和)