UDP校验和计算

采用二进制反码运算求和

具体规则:(求到反码后的运算规则)

1,从低位到高位逐列计算
2,0 +0=0 0+1=1 1+1 =10(1进位)
3,最高位进位的话要加到最后的结果上

直接在原码基础上求反码和:

1,从低位到高位逐列计算
2,0 +0=10 0+1=1 1+1 =0(其实是一样啦,这里00-》11后相加是不是10哦,向最高位进1)
3,最高位进位的话要加到最后的结果上
在这里插入图片描述

0100 1111 0001 1010

0111 1010 0001 1000


0011 0110 1100 1100最后最高位有进位,结果加1

变为: 0011 0110 1100 1101

===========================================

发送数据时,为了计算数据包的检验和。应该按如下步骤:

1、把校验和字段设置为0;
2、把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和;

3、把得到的结果存入校验和字段中

接收数据时,计算数据包的检验和相对简单,按如下步骤:

1、把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;

2、检查计算出的校验和的结果是否为0;

3、如果等于0,说明被整除,校验和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。

书上有一句话:“如果校验和的计算结果为0,则存入的值为全1(65535),这在二进制反码计算中是等效的”

来自 http://blog.csdn.net/dingmin1860/article/details/48268927

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值