奇偶校验码作为一种 检错码虽然简单,但是漏检率太高。在计算机网络和 数据通信中用得最广泛的检错码,是一种漏检率低得多也便于实现的循环冗余码 (Cyclic Redundancy Code, CRC),又称为多项式码。CRC的工作方法是在发送端产生一个冗余码,附加在信息位后面一起发送到接收端,接收端收到的信息按发送端形成循冗余码同样的算法进行校验,如果发现错误,则通知发送端重发。
简述 CRC校验
2、生成CRC码的基本原理:任意一个由 二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=xRm(x)+r(x); 其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式: g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR 发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。
4、CRC校验码软件生成方法: 借助于 多项式除法,其 余数为校验字段。 例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000; 采用多项式除法: 得余数为: 1010 (即校验字段为:1010) 发送方:发出的传输字段为: 1 0 1 1 0 0 1 1010 信息字段 校验字段 接收方:使用相同的生成码进行校验:接收到的字段/生成码( 二进制 除法) 如果能够 除尽,则正确, 给出余数(1010)的计算步骤: 除法没有数学上的含义,而是采用计算机的模 二除法,即, 除数和 被除数做异或运算 10110010000 /11001 =11110 11110 11100 = 1010
首先,任何一个由 二进制 数位串组成的代码,都可以惟一地与一个只含有0和1两个系数的多项式建立一一对应的关系。例如,代码1010111对应的多项式为X^6+X^4+X^2+X+1(这里的X^n表示x的n次方)。同样.多项式X^5+X^3+X^2+X+1对应的代码为101111。CRC码在发送端编码和接收端校验时,都可以利用事先约定的生成多项式G(X)来得到。目前广泛使用的生成多项式主要有以下四种:
CRC12=X^12+X^11+X^3+X^2+1
CRC16=X^16+X^15+X^2+1( IBM公司)
CRC16=X^16+X^12+X^5+1( 国际电报电话咨询委员会 CCITT)
CRC32=X^32+X^26+X^23+X^22+X^16+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1
冗余码的计算方法是,先将信息码后面补0,补0的个数是生成多项式最高次幂;将补零之后的信息码用模 二除法(非 二进制 除法)除以G(X)对应的2进制码,注意除法过程中所用的减法是模2减法,即没有 借位的减法,也就是异或运算。当 被除数逐位除完时,得到比 除数少一位的 余数。此余数即为 冗余位,将其添加在信息位后便构成CRC码字。
例如,假设信息码字为11100011,生成多项式G(X)=X^5+X^4+X+1,计算CRC码字。
G(X) = X^5+X^4+X+1,也就是110011,因为最高次是5,所以,在信息码字后补5个0,变为1110001100000。用1110001100000模二除法除以110011,余数为11010,即为所求的冗余位。
因此发送出去的CRC码字为原始码字11100011末尾加上 冗余位11010,即 1110001111010。接收端收到码字后,采用同样的方法验证,即将收到的码字用模 二除法除以110011(是G(X)对应的 二进制生成码),发现 余数是0,则认为码字在传输过程中没有出错。
如果生成多项式选择得当,CRC是一种很有效的差错校验方法。理论上可以证明 循环冗余校验码的检错能力有以下特点:
(a)可检测出所有奇数个错误;
(b)可检测出所有双比特的错误;
(c)可检测出所有小于等于校验位长度的连续错误;
(d)以相当大的概率检测出大于校验位长度的连续错误。