原理:
CRC校验将数据视为一个二进制多项式,用一个预先定义好的生成多项式(Generator Polynomial) 进行模2除法,得到的余数作为CRC校验码。
例如:数据多项式 ÷ 生成多项式 = 商 ... 余数 → 余数 = CRC码。
接收方用同样的多项式去除接收到的数据(含CRC),余数为0则认为无错。
特点:
检测能力极强:
能检测所有单比特错误。
能检测所有双比特错误(如果生成多项式选得好)。
能检测奇数个比特错误。
能检测长度小于生成多项式阶数的突发错误(如16位CRC可检测≤16比特的连续错误)。
对长突发错误的检测概率接近 1 - 1/(2^n)(n=CRC位数)。
计算复杂度较高:涉及二进制多项式除法,但可通过查表法(Lookup Table)优化。
长度灵活:常用 CRC-8、CRC-16、CRC-32、CRC-64 等。
无纠错能力:仅检测错误(但可通过算法扩展实现纠错,如CRC用于RAID)。
生成多项式示例:
CRC-16-CCITT: x¹⁶ + x¹² + x⁵ + 1 (0x1021)
CRC-32 (Ethernet, ZIP): x³² + x²⁶ + x²³ + x²² + x¹⁶ + x¹² + x¹¹ + x¹⁰ + x⁸ + x⁷ + x⁵ + x⁴ + x² + x + 1 (0x04C11DB7)
典型应用:
数据链路层协议(如 Ethernet, PPP)。
存储系统(硬盘、SSD、RAID、ZIP/RAR压缩文件)。
无线通信(Wi-Fi, Bluetooth)。
文件系统(如 NTFS、ext4 的元数据校验)。
|