ICMP协议的效验码计算

来源:互联网 发布:c语言中的库函数system 编辑:程序博客网 时间:2024/05/16 06:55

ICMP全名Internat Control Message Protocol。从技术来看,ICMP 就是一个“错误侦测和回报机制,主要用来测试网络是否联通。是否连接到指定地址。

其主要功能有:

侦测远端主机是否存在。

建立及维护路由资料。

重导资料传送路径。

资料流量控制。

ICMP协议的校验和算法 unsignedshortchksum(addr,len)  unsignedshort*addr;/*校验数据开始地址(注意是以2字节为单位)*/ intlen;/*校验数据的长度大小,以字节为单位*/ {  intsum=0;/*校验和*/ intnleft=len;/*未累加的数据长度*/ unsignedshort*p;/*走动的临时指针,2字节为单位*/ unsignedshorttmp=0;/*奇数字节长度时用到*/ while(nleft>1)  {  sum+=*p++;/*累加*/ nleft-=2;  }  if(nleft==1)/*奇数字节长度*/ {  *(unsignedchar*)&tmp=*(&(unsignedchar*)p);/*将最后字节压如2字节的高位*/ sum+=tmp;  }  sum+=(sum>>16)+(sum&0xffff);/*高位低位相加*/ sum+=sum>>16;/*上一步溢出时,将溢出位也加到sum中*/ tmp=~sum;/*注意类型转换,现在的校验和为16位*/ returntmp;  } 



0 0