11/03
2017

探讨IP首部校验码为什么使用反码求和

IP首部校验码算法

IP首部校验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。

注:IP首部一般有20个字节,如果有选项字段的话,会占用更多字节。占用字节数可以 通过首部的第4-7bit位的值获得,4bit位的值最大为16,而它的单位是32bit位,32bit 位占4个字节,所以IP首部最多为16X4=64个字节。

  1. 首先在发送端,将检验和字段置0,然后,对首部种每16bit位进行二进制反码求和。结果存在检验和字段中。
  2. 在接收端,对首部种的每16bit进行二进制反码的求和。如果首部在传输过程中没有发生任何过错,那么接收 方计算的结果应该为全1.如果结果不是全1,就是检验和错误,IP就丢弃收到的数据包,但不生成差错保文,由上 层去发现的丢失的数据报并进行重传。

udp数据报的检验和计算:

如果检验和的计算结果为0,则存入的值为全1(65535),这在二进制反码计算中是等价的。 如果传送的检验和为0,说明发送端没有计算检验和。

探讨

需要注意的几点:

  1. 这里所说的反码是二进制位按位取反,跟有符号数的反码不一样。
  2. 二进制相加时,高位溢出要加到低位,而不是丢弃。
  3. 全0与全1等价。以4bit举例,0000等于1111.
  4. 先取反后相加,与先相加后取反,得到的结果是一样的。
本站总访问量 本站访客数人次 本文总阅读量