ICMP协议的效验码计算

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;  
} 



你可能感兴趣的:(ICMP协议的效验码计算)