【Linux】CRC校验

来源:互联网 发布:如何计算矩阵一致性 编辑:程序博客网 时间:2024/06/08 03:15

1.crc简介


循环冗余校验(CRC)是数字网络和存储设备中通常使用的错误检测码,用于检测原始数据的意外变化,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,并且在检查值不匹配的情况下,可以采取针对数据损坏的纠正措施,以保证数据传输的正确性和完整性。

2.crc基本工作原理


1)发送端将发送数据比特序列当作一个多项式f(x),用双方约定好的多项式g(x)去除,得到余数多项式r(x)。最终将f(x)*x^k+r(x)发送给接收端。
2)接收端用g(x)去除接收到的f’(x),计算得到余数多项式r’(x)。
3)若计算得到的多项式r’(x)与接收到的r(x)相同,表示传输无差错,否则出错,通知发送端重传,直至正确为止。
原理图:
这里写图片描述

3.crc检错能力


  • 能够检查出全部离散的1位错。
  • 能够检查出全部离散的2位错。
  • 能够检查出全部奇数位错。
  • 能够检查出全部长度小于或等于K位的突发错。
  • 能以(1-(1-2)^(k-1)的概率检查出长度位K+1位的突发错。

4.crc检错方法举例


1)发送比特序列为11100011;
2)生成多项式序列为110011;
3)发送数据比特序列成衣2^5,乘积为1110001100000;
4)乘积除以生成比特序列得余数比特序列为11010;
这里写图片描述
5)将余数比特序列加到乘积中得1110001111010;
6)如果数据传输过程中没有出现差错,接收端收到的带有CRC检验码的数据比特序列一定能被相同的生成多项式整除。

原创粉丝点击