循环冗余校验(Cyclic Redundancy Check, CRC)是一种广泛应用于数字通信和存储系统中的检错码技术。其核心原理是在待发送的数据末尾附加若干位冗余码(FCS,帧检验序列),使得到的新数据能够被一个预先选定的除数整除。接收端用相同的除数除以接收到的数据,若余数为零,则认为数据在传输过程中未发生错误;否则,判定数据出错。CRC以强大的检错能力和高效的硬件实现著称,是计算机网络(如以太网)、存储介质(硬盘、光盘)及众多通信协议中的标准检错方案。一、CRC的核心原理1.1 基本原理框图设待发送的原始数据为二进制序列M,其长度为k位。收发双方预先约定一个长度为r+1位的生成多项式(除数)G。发送端执行如下步骤:在原始数据M末尾添加r个0,得到M * 2^r(相当于左移r位)用模2除法(即异或运算)计算M * 2^r除以G的余数R将R作为冗余码附加到原始数据M后,构成最终发送的帧T = M * 2^r + R。M的长度为k位,R的长度为r位,T的长度为k + r位接收端收到数据后,用同一个除数G除以接收到的数据T'。若余数为0,则判定数据无错;若余数不为0,则判定数据在传输过程中发生了错误。1.2 模2除法(多项式除法)模2除法是CRC运算的基础,其特点如下:减法和加法等价,都等同于按位异或(XOR)操作不产生进位或借位每一步比较被除数的最高位和除数的最高位,若被除数当前最高位为1,则商1并执行异或操作;若为0,则商0并直接跳过模2除法计算示例:计算101101除以1101:text1 1 1 0 0 1 (商) _______________ 1101 | 1 0 1 1 0 1 1 1 0 1 -------(异或) 1 1 0 0 1 1 0 1 ------- 0 0 1 0 1 1 1 0 1 ------- 1 0 0 0 1 1 0 1 ------- 1 0 1运算结果:余数为101。二、生成多项式的选择生成多项式