ICMP校验和算法 说明
2012-04-26 21:33
176 查看
unsigned short cal_chksum(unsigned short *addr,int len) { int nleft=len; int sum=0; unsigned short *w=addr; unsigned short answer=0; /*把ICMP报头二进制数据以2字节为单位累加起来*/ while(nleft>1) { sum+=*w++; nleft-=2; } /*若ICMP报头为奇数个字节,会剩下最后一字节。把最后一个字节视为一个2字节数据的高字节 ,这个2字节数据的低字节为0,继续累加*/ if( nleft==1) { *(unsigned char *)(&answer)=*(unsigned char *)w; sum+=answer; } /*校验和是以16位为单位进行求和计算的,sum是32位的,sum&0xffff是低16位,sum>>16是右移16位, 取到的是高16位,相加就是高16位和低16位的和。*/ sum=(sum>>16)+(sum&0xffff); /*这一步是有可能上面加的时候有进位到高16位的,再把高16位加进来。*/ sum+=(sum>>16); /*上一步肯定不会再有进位了,即使上面sum高16位非0也不要紧,此处sum只能把低字节数赋值给answer,因为answer为16位*/ answer=~sum; return answer; }
相关文章推荐
- icmp校验和算法详解
- 【算法】逆序与开灯问题补充说明
- javascript 队列(queue)算法与说明
- 关于webrtc的VAD(voice activity dectctor)算法说明
- 【课程说明】数据结构与算法课程要求--选课学生必读
- 关于移动渐近线优化算法(MMA)的程序说明
- [原创] JWFDv0.96工作流引擎设计--节点回退算法说明
- javascript 散列表(Hashes)算法与说明
- k-近邻算法-机器学习实战例子说明
- 请实现两棵树是否相等的比较,相等返回0,否则返回其他值,并说明算法复杂度。
- 一个例子试着说明算法
- 关于全局ID,雪花(snowflake)算法的说明
- 算法系列(十一)BASE64算法实现和使用说明
- 网际校验和(Internet Checksum)算法实现
- mt6735 DRC算法及DRC参数说明
- 关于几种压缩算法以及hadoop和hbase中的压缩配置说明
- 关于使用牛顿迭代法和二分法解方程的算法说明
- IP ICMP TCP UDP 校验和
- ICMP报文校验和的计算及各种网络报文结构
- 简要说明RFID系统的时隙ALOHA算法的工作过程