标题: IP协议层的发送端校验算法 [打印本页]

作者: xuwei    时间: 2015-6-13 16:55
标题: IP协议层的发送端校验算法
感谢百度,提供了算法
uint buff[10]={0x4500,0x002c,0x66c9,0x0000,0x3f11,0x0000,0xc0a8,0x0101,0xc0a8,0x0159};
/*
     一下算法源于百度,感谢再感谢!!
     计算对IP首部检验和的算法如下:  
   (1)把IP数据包的校验和字段置为0;
  (2)把首部看成以16位为单位的数字组成,依次进行二进制求和
        (注意:求和时应将最高位的进位保存,所以加法应采用32位加法);
  (3)将上述加法过程中产生的进位(最高位的进位)加到低16位
       (采用32位加法时,即为将高16位与低16位相加,之后还要把该次加
         法最高位产生的进位加到低16位)
  (4)将上述的和取反,即得到校验和。


   2012年3月3日于日照高科园
   按照以上算法便可以!
*/
unsigned long a,b;
uchar i;
   for(i=0;i<10;i++)
   {
   a+=buff[ i]; //变量加
b=a;  //暂存A中
b+=(a>>16)&0x0000ffff; //取高位与地位相加,并且加完了清0高八位
}

    b=~b; //取反






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1