1 概念
CRC即循环冗余校验码(Cyclic Redundancy Check[1]):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。概念来自百度百科CRC校验
2 CRC校验的原理
在数据链路层传送的帧中,广泛使用了CRC检错技术。在面用实例进行原理的解释。
1) 设传送数据为M = 1010001101(共K位),在M后添加用于检错的n位冗余码。冗余码会增加传送开销,却可以进行差错检测。
2) 求n位的冗余码。用模2运算(加法运算不进位,减法运算不借位)进行2的n次方的运算,相当于在M后面添加n个0。然后用得到的(k+n)bit的数除以事先选定好的长度为(n+1)bit的数P,得到商为Q余数为R。
3) P的选择。一般用多项式表示CRC的过程,即用多项式的系数表示0或1,例如P(x) = X^5 + X^4 + X^2 + 1表示110101。于是接收端进行运算为:
P一般选为:
CRC-16 = X^16 + X^15 + X^2 + 1
CRC-CCITT = X^16 + X^12 + X^5 + 1
CRC-32 = X^32 + X^26 + X^22 + X^16 + X^12 + X^11