计算机网络下循环冗余检测(CRC)
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 + X^10 + X^8 + X^7 + X^5 + X^4 + X^2 + X + 1
4) 示例运算。
3) 检测结果
经过接受端的运算后,只要得到余数R不为0,就检测到了差错,然后丢弃这个出现错误的帧。在使用CRC检测时只能做到无差错接受(凡是接受的帧(不包括丢弃的),我们都能以非常接近1的概率认为传输过程中没有差错)。要做到可靠传输,需加上确认和重传机制。