一、CRC:循环冗余校验
CRC(Cyclic Redundancy Check),即循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的快速算法。它主要用于检测或校验数据传输或保存后可能出现的错误。CRC利用除法及余数的原理实现错误侦测的功能,具有原理清晰、实现简单等优点。
二、CRC的基本原理
CRC算法基于模二运算,即二进制系数的多项式运算。在CRC算法中,传输的数据被视为一个位数很长的数,并通过模二除法(即不考虑进位和借位的二进制除法)除以一个预设的二进制数(通常称为生成多项式或除数)。得到的余数(即CRC码)作为校验数据附加到原数据后面一起发送。接收方在收到数据后,用相同的生成多项式进行模二除法,如果余数为0,则认为数据在传输过程中没有发生错误;如果余数不为0,则说明数据有误。
三、CRC的应用场景
CRC在计算机网络通信、数据存储等领域有着广泛的应用。例如,在无线电通信、SATA硬盘数据传输等系统中,CRC-32校验是最常用的检错手段之一。由于CRC算法检验的检错能力极强,且检测成本较低,因此在编码器和电路的检测中也得到了广泛使用。
四、CRC的编码规则
CRC码由信息码n位和校验码k位构成。k位校验位拼接在n位数据位后面,n+k为循环冗余校验码的字长,又称这个校验码(n+k,n)码。n位信息位可以表示成为一个报文多项式M(x),最高幂次是xn-1。约定的生成多项式G(x)是一个k+1位的二进制数,最高幂次是xk。将M(x)乘以xk,即左移k位后,除以G(x),得到的k位余数就是校验位。这里的除法运算是模2除法,即当部分余数首位是1时商取1,反之商取0。然后每一位的减法运算是按位减,不产生借位。
五、CRC的优势
1、高检错能力:
CRC可以检测出所有奇数位错、所有双比特的错以及所有小于、等于校验位长度的突发错。
2、快速校验:
CRC算法可以在极短的时间内完成数据校验码的计算,并迅速完成纠错过程。
3、低成本:
相对于其他校验方法,CRC算法的检测成本较低。