TCP/IP Illustrated 笔记 UDP Checksum

来源:互联网 发布:cf卡恢复软件 编辑:程序博客网 时间:2024/04/28 23:17

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

原创粉丝点击