概述
- CRC 即 Cyclic Redundancy Check 的缩写
- CRC 循环冗余校验属于
检错码
,只能检测出现了错误,但无法纠正错误。 - 与CRC循环冗余校验类似的,还有奇/偶校验,但是 CRC 漏检率更低,因此在实际应用中更为重要
使用 CRC 校验数据流程
- 首先需要发送方在原始数据的基础上,加上CRC校验码,组成新的发送数据
- 然后接收方对收到的
原始数据 + 校验码
进行校验,判断数据在传输过程中是否出现错误
发送方对原始数据追加校验码
- 假设原始数据是:
101001
- 生成待追加的校验码,需要使用一个
生成多项式,G(x)(收发双方事先约定)
,例如 G(x) = x3 + x2 + 1 - 构造被除数:原始数据 + 生成多项式最高次项个0,即:
101001000
- 除数:除数实际上就是生成多项式的系数,G(x) 展开得到: G(x) = 1 * x3 + 1 * x2 + 0 * x1 + 1 * x0,即
1101
- 两数相除得余数,并进行补位
(补到与生成多项式最高次项一致)
,即得到校验码。但是,这里的除法跟常规除法并不相同 - 常规除法在上下两行数进行运算时,使用的是减法运算,而这里
使用的是异或
- 通过上述运算,得到校验码
001
,添加到原始数据之后,得到的最终发送数据为101001001
接收方对收到的数据进行校验
- 继续接前文,假设收到的数据为
101001001
- 接收方对该数据做除法,除数仍然是之前使用的多项式的系数
1101
- 过程如下
- 若余数为0,则表示未出错
- 假设,接收方收到的数据出现了错误:
101101001
,校验过程如下:
- 余数不为0,则表示传输过程中出现了错误
结语
-
计算CRC校验码时,用到的除法运算,内部使用的是
异或运算而非减法运算
-
计算出余数后,还要对其进行补位,才能得到最终使用的校验码
-
在计算机网络中,数据链路层将数据封装成帧时,会在帧尾添加校验码,从而判断数据在传输过程中是否发生错误
-
在实际使用CRC时,采用的生成多项式更为复杂,从而确保较低的漏检率
-
另外,生成多项式的常数项必须是1
标签:多项式,校验,校验码,CRC,除法,原始数据,冗余 来源: https://blog.csdn.net/TL18382950497/article/details/113794438
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。