CRC其实就是循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检验是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
1.CRC校验原理
CRC检验原理的根本思想就是要发送的帧之后附加一个n位二进制检验码(序列),生成一个新帧发送给接收端,且这个二进制检验码与源帧之间存在着某种特定的关系,即它要使所生成的新帧能与发送端和接收端共同选定的某个特定的数整除(此时采用的是模2除法)。若是由于干扰等原因使新帧中的某一位或某些位发生翻转,则接收端就无法整除该特定数。因此,通过检查这一关系,就可以实现对帧正确性的检验。(模2除法:既不向上借位,也不比较除数与被除数的相同位数值的大小,只以相同位数相除,实际上是按位异或运算)
2.具体步骤
1)选择特定的除数
先选择一个用于在接受端进行校验时对接收的帧进行除法运算的除数,其实际上是二进制比较特串,通常是以多项式表示,故又称为多项式编码方法。
2)确定校验码
根据所选定的除数的二进制位(先假定为k),在所要发送的原帧后添加k-1位“0”生成数据帧。将数据帧以”模2除数”的方式除以选定的除数,所得到的余数就是该帧的CRC校验码。(注意:余数得位数一定要比且只能比除数的位数少1)
3)生成新帧
将校验码附加在原帧的后面构建一个新帧用于发送,接收端所接收到的新帧仍以“模2除数”的方式除以选定的除数。若是能够整除则表明该帧在传送的过程中没有出错,否则就表明出现了差错。
3.关键点
由上述知识可以看出,CRC校验中的关键点是特定除数的确定。
4.实例分析
现假设选择的CRC所生成多项式为G(x)=x^4+x^3+1,要求出二进制序列11111001的CRC校验码。(多项式只列出二进制值为1的位)
解:
1)选择特定的除数
由公式G(x)可得,除数是11001。
2)确定校验码
根据除数确定生成的数据帧为111110010000。将该数据帧以”模2除数”的方式除以选定的除数,所得到的余数0010就是该帧的CRC校验码。
3)生成新帧
将校验码0010附加在原帧的后面构建一个新帧111110010010用于发送,接收端所接收到的新帧仍以“模2除数”的方式除以选定的除数。若是能够整除则表明该帧在传送的过程中没有出错,否则就表明出现了差错。