IP 差错控制

        绝大多数TCP/IP协议采用的差错检测方法称为检验和(checksum)。检验和能够防止分组在传输期间出现的损坏。检验和是附加在分组上的冗余信息。

        发送端计算出检验和,并把得到的结果与分组一起发送出去。接收端对包括检验和在内的整个分组重复同样的计算。若得到了满意的结果则接收这个分组,否则就把它丢弃。

        

发送端计算检验和

     在发送端,分组首部被划分为n位的段(n通常取值为16),把这些段用反码算术运算想家,得到的和的长度也是n位。再把这个和取反码(把所有的0变为1以及把所有的1变为0),就得出了校验和。

发送端按以下步骤产生校验和:

  • 把分组划分为k段,每段的长度都是n位
  • 用反码算术运算把所有这些字段相加
  • 把最终结果取反码就得出检验和

接收端计算检验和

       在接收端把收到的分组划分为k段,并把所有这些段相加,然后把得到的和取反码。如果最后结果为0,则接受这个分组,否则就拒绝这个分组。

       当接收端把所有段相加并把结果取反码,如果在传输或处理过程中未出现差错,则得到的结果必定为0.根据反码算术运算的规则,这个说法是正确的。

      假设我们在发送端将所有段相加后得到的数为T,当我们用反码算术晕眩把这个数取反是,我们就得到这个数的负值。这就表明,若所有段之和是T,则检验和就是-T,当接收端收到这个分组时,所有的段相加。实际上就是把T和-T相加,在二进制反码中得出-0.

IP分组中的检验和

      在IP分组中,检验和的实现与上面所讨论的原理一样,首先,把检验和字段值置为0.然后把整个首部划分为16位的段,再将各段相加。把结果取反码,并插入检验和字段中。

     IP分组中的检验和仅覆盖首部,而不管数据。这有两个原因,首先将数据封装在IP数据报中的所有高层协议,都有一个设计整个分组的检验和字段。因此,IP数据报的检验和就不必再 检验所封装的数据部分。其次没经过一个路由器,IP数据报的首部就要有锁变化,但数据部分保持不变。因此检验和只对发生变化部分进行检验和。若检验包括数据部分,则每一个路由器必须重新计算整个分组的检验和,这也就意味着花费更多的处理时间。

     下图描述了一个没有选项的IP首部计算检验和的例子。首部被划分为16位的段。把所有的这些段相加,再把得到的和取反码,最后把结果插入到检验和字段中。

      下图描述接收端(或中间路由器)对检验和计算,假设首部没有出现差错。首部被划分为16位的段。把所有这些段相加,再把得到的和取反码,因此得到的结果是16个0,所以此分组被接受。

猜你喜欢

转载自woodding2008.iteye.com/blog/2340994