CRC (Cyclic Redundancy Check) 循环冗余校验


CRC 是 Cyclic Redundancy Check (循环冗余校验) 的缩写, 是一种具有检错 纠错能力的散列校验方式。

CRC 利用除法及余数 (能被某一特定数整除), 用来检测 (或校验) 数据传输 (或保存后) 可能出现的错误。 CRC 会产生一个简短且位数固定的校验码。

著名的通讯协议 X.25 的 FCS (帧检错序列) 采用的是 CRC-CCITT, WinRAR NERO ARJ LHA 等压缩工具软件采用的是 CRC32, 磁盘驱动器的读写采用了 CRC16, 通用图像存储格式 GIF TIFF 等也采用 CRC 作为检错手段。

数据传输


在数据传输过程中, 无论设计的传输系统再怎么完美, 也会存在差错, 这种差错可能导致在链路上传输的一个或多个帧被破坏 (如 0 变为 1,或 1 变为 0), 接受方从而接收到错误数据。

为尽量提高接受方收到数据的正确率, 在接收方接收数据之前需对数据进行差错检测, 当且仅当检测结果正确时, 接收方才正式收下数据。

检测的方式有多种, 常见的有: 奇偶校验 (没有纠错能力) 海明校验 (没有纠错能力) 校验和校验 因特网校验 循环冗余校验 等。

循环冗余校验


CRC (循环冗余校验) 通过某种数学运算来建立数据位和校验位的约定关系, 校验通信链路上数字传输的准确性。

发送方使用公式算出被传送数据所含信息的一个值, 并将此值附在被传送数据后, 接收方对同一数据使用相同公式,计算得到相同结果。 若这两个 CRC 结果不一致, 说明传输过程中出现了差错, 接收方可要求发送方重新发送该数据。

CRC 在网络通信中, 相对于其它校验方法有一定优势。 CRC 可高比例的纠正信息传输过程中的错误, 可在极短时间内完成数据校验码的计算, 并迅速完成纠错过程。 CRC 通过数据包自动重发的方式, 使得通信速度大幅提高, 对通信效率和安全提供了保障。

从检错能力来看, CRC 所不能发现的错误的几率仅为 0.0047% 以下。 从检错的正确率 速度 成本等方面, CRC 比奇偶校验等校验方式具有优势。 因而,CRC 为信息通信领域极为普遍的校验方式。 由于 CRC 检错能力强, 成本低, 因此被广泛用于编码器和电路检测中。

另请参阅:

版权声明: 本文为独家原创稿件,版权归 乐数软件 ,未经许可不得转载。

CRC 版本

名称 多项式 表示法 应用举例 备注
CRC-8 X 8 +X 2 +X+1 0X107
CRC-12 X 12 +X 11 +X 3 +X 2 +X+1 0X180F telecom systems
CRC-16 X 16 +X 15 +X 2 +1 0X18005 Bisync, Modbus, USB, ANSI X3.28, SIA DC-07 又称 CRC-16 或 CRC-16-ANSI
CRC-CCITT X 16 +X 12 +X 5 +1 0X11021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 X 32 +X 26 +X 23 +X 22 +X 16 +X 12 +X 11 +X 10 +X 8 +X 7 +X 5 +X 4 +X 2 +X+1 0x104C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32C X 32 +X 28 +X 27 +X 26 +X 25 +X 23 +X 22 +X 20 +X 19 +X 18 +X 14 +X 13 +X 11 +X 10 +X 9 +X 8 +X 6 +1 0x11EDC6F41 iSCSI, SCTP, G.hn payload, SSE4.2, Btrfs, ext4, Ceph
CRC-64