CRC循环冗余码计算

CRC校验算法

算法分为3个部分:要发送的数据(或接收的数据)、生成多项式、FCS帧校验序列(冗余码)。它是利用除法及余数的原理来作错误侦测的。

抽象例子帮助理解

9除2等于了2余数是1。其中9就好像是要发送的数据,2就像生成多项式,然后余数就是FCS帧校验序列(冗余码)。
接收方收到数据后,便进行将收到的数据加上FCS帧校验序列后,将结果除以生成多项式:(9+1)/2,其余数是0,那可以判断传输的数据完整。

实际例子

发送方要发送的数据是1100 0110 11,采用CRC校验生成多项式是10001,最终发送的数据:
首先要计算冗余码:
生成多项式的阶数为4,则要在发送的数据后面加4个0.(阶数表示二进制的最高位的阶级,如现在要计算的10001,就是 1 * 20+0 * 21+0 * 22+0 * 23+1 * 24,最大是24).
数据加完0后除以多项式,此时除法中余数减法采用异或防止出现位数相同时除数过大变成负数。

CRC循环冗余码计算_第1张图片

算出冗余码为1001,此时将冗余码加上数据码就是要发送的数据,1100 0110 1110 01也就是将后面红色标注的4个0赋值成冗余码
此时发送端发送。
在接收方收到后,接受方将发送方发来的信息先除以生成多项式,如果得到的余数为0,则校验成功就认为数据完整。如果不为0,则校验失败,丢弃数据。

你可能感兴趣的:(CRC循环冗余码计算)