- 13
- 0
- 约1.44千字
- 约 2页
- 2020-04-26 发布于江西
- 举报
IP首部校验和的计算方法:
? 1.把校验和字段清零。
? 2.然后对每16位(2字节)进行二进制反码求和,反码求和的意思是先对每16位求和,再将得到的和转为反码。
? 接下来详细描述反码求和的步骤:看下面的代码
? 算法:
SHORT?checksum(USHORT*?buffer,?int?size){????unsigned?long?cksum?=?0;????while(size1)????{????????cksum?+=?*buffer++;????????size?-=?sizeof(USHORT);????}????if(size)????{????????cksum?+=?*(UCHAR*)buffer;????}????cksum?=?(cksum16)?+?(cksum0xffff);?????cksum?+=?(cksum16);?????return?(USHORT)(~cksum);}
? 参数buffer是指向16位整数的指针,刚开始指向的是IP首部的起始地址,参数size是IP首部的大小。while循环是将IP首部的内容以16位为单元加在一起,如果没有整除(即size还有余下的不足16位的部分),则加上余下的部分,此时的cksum就是相加后的结果,这个结果往往超出了16位,因为校验和是16位的,所以要将高16位和计算得
原创力文档

文档评论(0)