CRC
CRC(Cyclic Redundancy Check,循环冗余校验)用于检测数据在传输或存储过程中是否出现差错。
核心原理
- 生成校验码:
- 发送方:将需要传输的数据(看作一个二进制多项式)与一个预先确定的生成多项式(如常见的 CRC - 16、CRC - 32 等,不同标准生成多项式不同)进行运算,得到一个固定长度的CRC 校验码。
- 例如,数据是
1011001,生成多项式是1010,通过模 2 除法(异或运算)得到余数,这个余数就是校验码。
- 验证数据完整性:
- 接收方:接收到数据(包括附带的 CRC 校验码)后,用同样的生成多项式对数据部分进行运算,得到新的校验码。
- 将新校验码与接收到的校验码对比:若一致,认为数据无错误;若不一致,说明数据在传输过程中发生了错误。
特点
- 检错能力强:能检测出大部分的随机错误(如位翻转)、突发错误(连续多位错误),但不能纠错(只能发现错误,无法定位或修正错误)。
- 计算高效:通过移位寄存器等硬件或简单的算法就能快速计算,适合对实时性要求高的场景。
- 应用广泛:在以太网、zip 压缩、磁盘存储、蓝牙等众多领域都有应用,比如 CRC - 32 常用于验证文件传输的完整性。
简单示例(帮助理解)
假设数据是 1010,生成多项式是 1101(4 位,校验码长度为 4−1=3 位):
- 发送方计算:
- 数据后面补 3 个 0,变成
1010000。 - 用
1010000对1101做模 2 除法,得到余数(校验码)011。 - 发送的数据为
1010+011=1010011。
- 数据后面补 3 个 0,变成
- 接收方验证:
- 对接收到的
1010011用1101做模 2 除法,若余数为 0,说明数据正确;若余数非 0,说明数据错误。
- 对接收到的
总之,CRC 是一种高效的差错检测手段,通过多项式运算生成和验证校验码,保障数据传输或存储的可靠性。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 琉璃幻彩的博客!
评论

