TCP/IP Illustrated 笔记 UDP Checksum

1. 计算检验和的方法 同 3.2中计算IP header的检验和:

    发送端,首先置校验和为全0,然后,每16-bit,用反码相加的方式求和(one's complement sum),对最后的和再取其反码,保存为在checksum字段;(one's complement sum 相加的时候,需要加上进位(carry);区别于two's complement sum,它会丢弃进位)

    接收端,如果数据包正确,接收端的校验和为全1;

 

2. 如果,发送端的发送的UDP数据报中checksum字段全为0,那么说明发送端没有计算校验和。

    为什么这里可以做这种决定?checksum字段全为0难道不是一个有效字段吗?通过分析0的反码的表示,和反码的加法方式(one's complement sum)就可以明白为什么可以做么做了。

下面是分析:

   因为0的反码码两种形式,全0或者全1。

   发送端计算获得的最后的和,如果是全0或者全1,在checksum字段都保存为全1或者全0,在接收端的one's complement sum都是全1,所以这里checksum字段选择了全1,把全0用来表示发送端没有计算校验和,这也提供了一个额外的功能,何乐而不为呢。

 

3.2 10.8

参考:http://www.netfor2.com/checksum.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值