CRC是循环冗余校验码(Cyclic Redundancy Check)的缩写,是一种常用的数据校验方式,通过校验生成的冗余码对数据进行检测,以保证数据的可靠性和完整性。
CRC校验码的生成是通过将发送方数据帧中的每一个数据位以及一些附加的校验位(通常为8位或16位),按照一定的算法生成一个多项式,然后将多项式附加在发送方数据帧的末尾发送出去。
接收方在接收到数据帧后,同样按照一定的算法生成校验码,并与发送方发送的校验码进行比较,以确认数据的正确性。
CRC校验的算法通常有两种:单项式CRC与多项式CRC。
其中,单项式CRC是通过将发送方数据的每一个数据位与一个固定的位模式异或得到校验码,比较简单,但是校验能力有限。而多项式CRC算法则是通过将数据的每一个数据位与一个可变的多项式进行异或,得到校验码,由于多项式的可变性,“多项式CRC”算法比单项式CRC算法的校验能力更高,应用更为广泛。
优点
CRC校验使用简单,算法实现方便,增加校验位的计算量相对较小。
CRC校验码的长度可根据需要进行调整,一般选用8位或16位字长,使校验码长度适量,既能保证校验能力,也可以达到较高的传输效率。
缺点
CRC校验无法恢复出丢失的数据,只能检验数据是否出现错误,但是不能提示到底是哪一位数据出了问题。
CRC校验算法不是绝对可靠的,存在被攻击的风险,攻击者有可能会通过恶意操纵CRC校验码,干扰数据的传输。
CRC校验在通讯、存储等领域应用广泛。常见的如以太网、串行ATM技术、磁盘存储、无线通讯等都广泛使用CRC校验技术。
CRC校验码广泛应用的原因是它的实现算法简单,效率高,并且能够检测大部分数据传输错误。
尤其是在现今高速大容量的网络通讯中,传输的数据量非常大,数据的可靠性和完整性更加关键,CRC校验作为数据校验的一种重要方式,得到越来越广泛的应用与推广。