当前位置:  技术问答>linux和unix

关于ip校验和计算的问题

    来源: 互联网  发布时间:2017-01-18

    本文导语:  unsigned short checksum(unsigned short *buf, int nword) {     unsigned long sum;     for(sum = 0; nword > 0; nword--)         sum += *buf++;     sum = (sum>>16) + (sum&0xffff);     sum += (sum>>16);                   ...

unsigned short checksum(unsigned short *buf, int nword)
{
    unsigned long sum;

    for(sum = 0; nword > 0; nword--)
        sum += *buf++;

    sum = (sum>>16) + (sum&0xffff);
    sum += (sum>>16);                                      这两行的作用是什么
    return ~sum;
}

|
校验和一般采用反码和,溢出以后不丢弃而是加到低位,这样就会造成一种后效性,即前面的和会影响到后面,如果采用补码和将丢弃掉进位,失去了后效性。

sum = (sum>>16) + (sum&0xffff);//计算反码和,结果放到16比特数中
sum += (sum>>16); //防止刚才的sum和超过16比特的0xffff,再进行一次反码和
return ~sum;
//在接收端只需要把所有位按16比特依次相加,校验结果是否等于0xffff或是取反码看结果是不是0,就可以知道这个网络包是否出错


|
将sum的高16位加到sum的低16位(加之前高16位清0),然后sum加上sum的高16位。

我也不知道为什么,反正把这个校验和放在XX的头部对应字段里,对面同样的算法计算校验和时,这个校验和自身也参与了运算,结果是0那就对了。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • zf框架的校验器使用使用示例(自定义校验器和校验器链)
  • 下载rpm包时,网站提供md5校验码,如何进行校验
  • linux下串口开发有没有Mark、space校验,对应的数值是几?
  • linux下串口怎么设置校验位为“标志”?
  • ip数据包的校验和
  • CPU在读NAND FLASH时会访问每个page的校验区吗?
  • 网页校验工具 RightWebPage
  • jQuery表单校验插件 VanadiumJS
  • 谁知道linux/unix下利用Schema读取校验xml的开源代码,给一个链接,谢谢!
  • 8位 512字节的ecc校验
  • JavaScript 表单校验 VForm
  • ****PDA上对18位身份证的校验算法的实现****
  • 能否对一个文件进行crc校验?
  • Java字节码校验 BECL
  • 轻量级校验框架 Jquery-Lweight-validate
  • 安全服务严重和校验 Aniketos-SSVV
  • 我在客户端有一个输入规则校验文件,applet如何访问它呢?
  • js:校验IPv6地址的正则表达式
  • java使用正则表达校验手机号码示例(手机号码正则)
  • JAVA有用于数据校验的类吗?象加密算法那样的.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3