CRC校验算法

来源:互联网 发布:数据库常用sql语句大全 编辑:程序博客网 时间:2024/05/18 01:38

CRC:循环冗余校验。它是在数据链路层被广泛使用的检错技术。

CRC原理:
发送端:

  1. 在发送端先把数据分为一组(即一帧),假定每组K个比特,假定要传送的数据是M
  2. 在每一组后边添加n位冗余码,然后构成一帧发送出去。即每组长度为K+n
  3. 确定冗余码的方法:
    a. 用二进制模2运算进行2^N乘M的运算,这相当于给M后边添加N个0
    b.用M除以双方事先约定好的长度为N+1的除数P
    c.得到的余数R,这个R就是FCS(帧检验序列),把这个FCS序列添加到M后边然后发出去。

接收端:

  1. 在接收端把接受的数据以帧为单位进行CRC校验
  2. 把接收到的每一个帧都除以同样的P
  3. 如果余数为0,表示传送没有差错。
  4. 如果存在误码,则余数为0的概率非常小

模2运算:
模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。

总结:在接收端对每一个帧进行计算,如果余数为0,就接受;如果不为0,则丢弃。

例如:
M=101001,
p=1101;
在发送端:
1.M=2^N*M=101001000;
2.用M除以P

这里写图片描述

3.得到余数R也就是FCS,将FCS加到M上,就得到要发送的帧了。
M=101001000+001=101001001

接收端:
M=101001001,P=1101,对数据进行CRC校验
这里写图片描述

余数为0,表示数据正确。