*奇偶校验码(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,如图所示
2、冗余码的计算
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) 位。