CRC校验
1 CRC校验的目的
在信息的传输过程中,有时会发生误码。
例如,传送1001,接收到1000,这就产生了误码,但接收方并不知道产生了误码。
而当发送方与接收方使用同一标准的CRC校验,就能够判断在信息传输的过程中是否发生了误码。
2 CRC基础知识
2.1 除数与被除数
除号前面的数为被除数;
除号后面的数为除数。
10 ÷ 2 = 5 10为被除数;2为除数。
2 ÷ 10 = 0.2 2为被除数;10为除数。
2.2 除与除以
10 ÷ 2 = 5 10除以2
2 ÷ 10 = 0.2 10除2
2.3 异或
异或主要用于二进制计算,相同为0,相异为1。
0异或0 -> 0
0异或1 -> 1
1异或0 -> 1
1异或1 -> 0
3 CRC校验的三要素
3.1 要传输的数据
例如要传输的数据为:10101101(二进制)
3.2 多项式
各种标准下的多项式如下图所示。
根据多项式可以得到除数,除数为完整多项式的系数,如下列出了两个例子:
多项式 | 完整多项式 | 除数 |
X^4 + X +1 | 1*X^4 + 0*X^3 + 0*X^2 + 1*X + 1*X^0 | 10011 |
X^5 + X^3 + 1 | 1*X^5 + 0*X^4 + 1*X^3 + 0*X^2 + 0*X^1 + 1*X^0 | 101001 |
3.3 校验和
根据要传输的数据和除数,可以得到校验和。
首先要在传输数据后补N个0(N = 多项式最高次次数);
最后除数的位数 = N,除数位数小于N,要在前面补0。
例1:
传输的数据:10101101(二进制)
除数:10011
校验和的计算如下图所示:
例2:
传输的数据:11010010(二进制)
除数:10011
校验和的计算如下图所示
接收方对接收数据使用相同CRC多项式进行异或运算,若余数为0,则表明传输没有出现错误。
如下图所示,传输的数据为11010010,CRC校验和为1010,除数为10011,最终余数为0,表明传输正确。
4 在线CRC计算器要注意的一些问题
要注意的问题有如下三点:
5 参考
CRC(循环冗余校验)在线计算
[CRC校验]手算与直观演示
https://www.bilibili.com/video/BV1V4411Z7VA?from=search&seid=6029216890881933361
【计算机网络期末复习】5分钟左右让你明白CRC循环冗余校验
https://www.bilibili.com/video/BV1rJ411V7L5?from=search&seid=6029216890881933361
循环冗余校验(CRC)算法入门
https://blog.nanpuyue.com/2019/050.html