循环冗余校验码
视频链接地址:
https://www.bilibili.com/video/BV1BE411D7ii?from=search&seid=6420326887479343502
前言
在本篇中,你将掌握
- 循环冗余校验码的基本思想和构造方法
1 循环冗余校验码
1.1 基本思想
循环冗余校验码的思想:数据发送、接收方约定一个“除数”(二进制的除数)
K个信息码 + R位校验码作为“被除数”,在检验时,判断余数是否为0来判断是否出错。
让我们来看个例子,如下图,已知生成多项式G(x),信息码为101001,求对应的CRC码。
二进制的除法规则,如上图所示,其相除过程为首先判断被除数当前最高位是否为1,若为1,则当前商为1,否则为0;然后对被除数和除数做“模2减”,即异或;之后,在“模2减”后若位数不足在最高位补0,重复首先的步骤,直至最后得到商和余数。
对于余数,余数的位数 = 除数的位数-1 = 校验码的位数。
1.2 构造方法
解法步骤:
- 确定K、R以及生成多项式对应的二进制码
K = 信息码长度 = 6,R = 生成多项式最高次幂 = 3 则校验码位数为 N = K+R = 9
生成多项式G对应的二进制码为1101,对应x次幂的系数 - 移位
信息码左移R位,低位补0(即在信息码后补R个校验位的0) - 相除
对移位后的信息码,用生成多项式进行模2除法,产生余数
对应的CRC码:101001 001
(相除过程见上图,其模2除法的余数 001 就是校验位) - 检错和纠错
发送方发送的数据为101001001记为 C 9 C 8 C 7 C 6 C 5 C 4 C 3 C 2 C 1 C_9C_8C_7C_6C_5C_4C_3C_2C_1 C9C8C7C6C5C4C3C2C1
接收方对接收的数据用约定好的1101进行模2除,若余数为000,代表没有出错;若余数为010,代表
C
2
C_2
C2或
C
9
C_9
C9出错,其余数和出错位对应关系如下图
1.3 纠错检错
注意在上表中,出错位为1和8、2和9的余数两两相同,那么我们能推知循环冗余校验码只有检错的能力,而没有纠错的能力么?
也不全对,因为在上述例子中,余数只有3位二进制码,只能表示8-1=7种(000表示没出错)出错位,但传输的位数为9位,故无法纠错。
对于确定的生成多项式,出错位与余数是相对应的
即如果出错的位数并没超过余数所能表示的范围,则余数和出错位之间就是一一对应的关系
K个信息位,R个校验位,若生成多项式选择得当,且 2 R > = K + R + 1 2_R>=K+R+1 2R>=K+R+1则CRC码可以纠错
2 小结
本篇重点:
(1)循环冗余校验码的构造方法,如何通过给出的K个信息位和最高次为R的生成式构造循环冗余校验码(K个信息位 + R个校验位(余数));
(2)循环冗余校验码的校验方法:通过与生成式模2除,得到R的余数,若为000则没错,否则出错,且有可能纠错
本篇也是计算机网络的重点,需要熟练掌握CRC的计算构造方法。