CRC校验(循环冗余校验码)
在链路层传输数据时 ,为了保证数据传输的可靠性,必须采用各种差错检测措施,目前在数据链路层广泛使用循环冗余检验CRC的检错技术。
循环冗余检验的原理
在发送端,先把数据换分为组,假定每组有k个比特。现假定待传送的数据M=101001(K=6)。CRC运算就是在数据M的后面添加供差错的检验用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。
冗余码的计算方法
用二进制的模2运算(用模2运算进行减法时不进位)进行2^n乘M的运算,这相当在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定好的长度(n+1)位的除数,得到的余数R作为冗余码。
一种较简单的方法是用多项式来表示循环冗余的过程,多项书P(X)=X^4+X^3+1,表示除数是11001,除数后面添加最高项的指数个0。具体计算方法如下图所示:
经过CRC校验以后,会出现两种情况:
- 若得到的余数R=0,则判定这个帧没有差错,就接受。
- 若余数R!=0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差错),就丢弃。