【计算机网络】循环冗余校验CRC算法原理&计算过程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pointer_y/article/details/60332956

前言


我们知道,一台主机向另外一台主机发送报文的时候,需要一层层经过自己的协议栈进行数据封装,到达最后一层(四层协议的网络接口层)时需要在帧尾部添加FCS校验码(通过CRC算法得出)。当对端主机收到时,在接收端同样通过CRC算法进行验证,确认传输过程中是否出现错误。它只能确认一个帧是否存在比特差错,但没有提供解决措施。


循环冗余校验的原理


  1. 在发送端,先把数据划分为组(即:一帧)。假定每组 k 个比特。
  2. 在每组后面,添加供差错检测用的 n 位冗余码一起发送。即:实际发送长度为:k+n 比特。
  3. 发送前双方协商n+1位的除数P,方便接收方收到后校验。
  4. 给K比特的数据添加除数减一个0(P-1)作为被除数,与第三步确定的除数做“模2除法”。得出的余数即FCS校验序列,它的位数也必须是(P-1)。
  5. 将FCS校验序列添加至K个比特位的后面发送出去。
  6. 接收方对接收到的每一帧进行校验,若得出的余数 R = 0,则判定这个帧没有差错,就接受(accept)。若余数 R ≠ 0,则判定这个帧有差错,就丢弃。

对“模2除法”进行说明:

“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。

计算示例


这里写图片描述
那么接收方拿到的就是:101001001。再以它为被除数,1101为除数进行“模2除法”。

阅读更多
换一批

没有更多推荐了,返回首页