11/03
2017
探讨IP首部校验码为什么使用反码求和
IP首部校验码算法
IP首部校验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。
注:IP首部一般有20个字节,如果有选项字段的话,会占用更多字节。占用字节数可以
通过首部的第4-7bit位的值获得,4bit位的值最大为16,而它的单位是32bit位,32bit
位占4个字节,所以IP首部最多为16X4=64个字节。
首先在发送端,将检验和字段置0,然后,对首部种每16bit位进行二进制反码求和。结果存在检验和字段中。
在接收端,对首部种的每16bit进行二进制反码的求和。如果首部在传输过程中没有发生任何过错,那么接收
方计算的结果应该为全1.如果结果不是全1,就是检验和错误,IP就丢弃收到的数据包,但不生成差错保文,由上
层去发现的丢失的数据报并进行重传。
udp数据报的检验和计算:
如果检验和的计算结果为0,则存入的值为全1(65535),这在二进制反码计算中是等价的。
如果传送的检验和为0,说明发送端没有计算检验和。
探讨
需要注意的几点:
这里所说的反码是二进制位按位取反,跟有符号数的反码不一样。
二进制相加时,高位溢出要加到低位,而不是丢弃。
全0与全1等价。以4bit举例,0000等于1111.
先取反后相加,与先相加后取反,得到的结果是一样的。