CRC校验
基本原理
CRC校验码就是一个m长的二进制
信息序列加上n长的二进制
校验序列,形成的m+n长的CRC冗余码。当n长的信息序列在传递过程中发生错误时,由于信息序列与校验序列在传递前存在某种关联,因此可以凭借这种关联将错误位矫正,这就是CRC校验码
实现
信息发送方和接收方事先约定了一个生成多项式g(x)V(x)=A(x)g(x)=xn*m(x)+r(x)
其中m(x)为信息多项式,r(x)为n-1次的校验多项式,xn代表x的n次方
r(x)的计算方法为:在K位信息字段的后面添加n个0,再除以g ( x )对应的代码序列,得到的余数即为r ( x )对应的代码(应为n-1位;若不足,而在高位补0)。
演示
因此生成的CRC校验码就是101001+001=101001001一共9位
错误检测
当接收方收到数据后,用收到的数据对P(事先约定的)进行模2除法,若余数为0,则认为数据传输无差错;若余数不为0,则认为数据传输出现了错误,由于不知道错误发生在什么地方,因而不能进行自动纠正,一般的做法是丢弃接收的数据。
- Note
- CRC只能检测错误,不能自动纠错
- 信息序列的位数越多,检测不到错误的概率越小
- 仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(只是非常近似的认为是无差错的),并不能保证可靠传输。
应用
CRC冗余码一般用于帧检验序列FCS(在数据链路层添加)
https://blog.csdn.net/loveCC_orange/article/details/79127809
参考链接
https://blog.csdn.net/sunlanchang/article/details/87992318
https://baike.baidu.com/item/%E5%B8%A7%E6%A0%A1%E9%AA%8C%E5%BA%8F%E5%88%97/6818718?fr=aladdin