CRC校验

来源:互联网 发布:如何卸载mysql 编辑:程序博客网 时间:2024/06/07 20:03

今天我们的主题是——CRC校验

一、什么是CRC校验?

  在MAC帧格式中最后有4个字节是CRC校验,究竟什么是CRC校验?

  CRC即循环冗余校验码:是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

二、如何校验?

  CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;任何一个二进制数列都可以和一个系数仅仅为‘0’和‘1’的多项式一一对应。比如:

x^6+x^4+x^2+x^1+1 该多项式对应的二进制序列为:1010111。

具体校验步骤:

【例】假设使用的生成多项式是G(X)=X3+X+1。4位的原始报文为1010,求编码后的报文。

解:

1、将生成多项式G(X)=X3+X+1转换成对应的二进制除数1011;

2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文   1010左移3位变成1010000;

3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或,即相同为0,相   异为1,不考虑进位与借位

  1010000

  ^1011

  ------------------

  0001000

  1000(左移三位)

  ^1011

  ------------------

  0011

  得到的余位0011,校验码需要三位就是011,所以最终编码为:1010011

三、几点说明

1、CRC是一种常用的检错码,并不能用于自动纠错

2、只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。

3、仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(只是非常近似的认为是无差错的),并不能保证可   靠传输。