CRC校验

来源:互联网 发布:mac搜狗五笔输入法 编辑:程序博客网 时间:2024/06/05 21:05

  奇偶校验码(PCC)只能校验一位错误,循环冗余校验码(CRC)的检错能力更强,可以检出多位错误

1. CRC校验原理
    CRC校验原理看起来比较复杂,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模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,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110,结果得到商为11,余数为1,如图5-9左图所示。如11×11=101,如图所示

CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
方法:
循环冗余检验的原理
在数据链路层传送的帧中,广泛使用了循环冗余检验CRC 的检错技术。在发送端,先把数据划分为组(即:一帧)。假定每组k 个比特。在每组后面,添加供差错检测用的n位冗余码一起发送。即:实际发送长度为:k+n 比特发送前双方协商n+1位的除数P;
冗余码的计算
2的n次方乘M(发送数据),这相当于在 M 后面添加 n 个 0,长度成为k + n;得到的 (k + n) 位的数除以事先选定好的长度为(n + 1) 位的除数 P;除法采用的模2减法(无借位减,等价于异或);得出商是 Q 而余数是 R,余数 R 比除数 P 少1 位,即 R 是 n 位。
冗余码的计算举例
现在k = 6, M =101001。
设n= 3, 除数P= 1101,
被除数是 2的n次方*M= 101001000。
模 2 运算的结果是:商Q= 110101,余数R = 001。
把余数R 作为冗余码添加在数据M 的后面发送出去。
发送的数据是:2的n次方*M+ R
即:101001001,共(k + n) 位。


0 0