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