循环冗余校验(CRC)错误是如何工作的?

循环冗余校验(CRC)是一种常见的错误检测技术,用于检测数据在传输和存储过程中的错误。
On this page

循环冗余校验(CRC)错误是如何工作的?

摘录

CRC 错误表示在传输过程中发生了数据损坏。它依靠多项式除法算法来检测数据的意外或恶意更改。


循环冗余校验或 CRC 是一种常见的用于数据传输和存储的错误检测技术。CRC 错误表示数据已经损坏或被改变。了解 CRC 的工作原理可以帮助保持数据完整性并防止错误发生。

什么是循环冗余校验(CRC)?

循环冗余校验(CRC)是一种用于检测数据的意外更改和篡改的校验算法。它通过从数据生成 CRC 码并将其与原始数据一起发送来工作。接收方重新生成 CRC 码并将其与接收到的 CRC 码进行比较,以检查差异。

CRC 通常用于网络、存储设备和备份系统中,以确保数据的完整性。常用的 CRC 标准包括 CRC-32、CRC-16 和CRC-CCITT

CRC 错误是如何发生的?

当接收端上新计算的 CRC 码与传输的原始 CRC 码不匹配时,就会发生 CRC 错误。这表明数据在传输过程中被损坏或修改。

CRC 依靠多项式除法来生成 CRC 码。数据位通过使用模 2 除法与 CRC 多项式进行除法运算。这个除法的余数就是 CRC 码。

CRC 错误检测的步骤

主要步骤如下:

  1. 生成 CRC 码:发送设备使用生成多项式对数据进行模 2 除法运算。余数即为 CRC 码。

  2. 附加 CRC 码:将 CRC 码附加到原始数据上并进行传输。

  3. 重新生成 CRC:接收方对接收到的数据重新进行 CRC 生成过程。

  4. 比较 CRC:将新计算得到的 CRC 与接收到的 CRC 码进行比较。如果它们不同,就检测到了 CRC 错误。

理解 CRC 错误检测算法

CRC 中使用的多项式除法过程如下:

  • 数据位被视为被除数。它与作为除数的 CRC 多项式进行除法运算。

  • 进行模 2 除法。这涉及到如果被除数位为 1,则通过异或运算对除数进行位运算。

  • 除法后剩下的余数成为 CRC 码。

CRC 多项式经过精心设计,可以检测常见的错误,如位翻转。不同的 CRC 标准使用针对其应用进行优化的不同多项式。

CRC 错误检测的示例

让我们以要传输的示例数据包10011010为例。

使用 CRC-4 多项式x^4 + x + 1

  1. 在数据后附加 4 个零位,以初始化 CRC 寄存器:10011010 0000

  2. 使用多项式进行模 2 除法运算:10011010 0100

  3. 余数0100是生成的 4 位 CRC 码。

  4. 如果在接收时,计算得到的 CRC 是1111而不是0100,则检测到错误。

CRC 在数据完整性中的重要性

CRC 在传输或存储过程中防止数据损坏起着关键作用:

  • 检测网络上经常发生的位翻转或突发错误。

  • 验证存储介质上保存的数据的完整性,这些介质容易受到缺陷和随时间损坏的影响。

  • 在系统故障升级并导致失败之前提供早期指示。

CRC 的常见应用

一些使用 CRC 的示例:

  • 存储介质,如硬盘、固态硬盘、光盘和磁带。

  • 有线和无线网络协议,如以太网、WiFi、蓝牙。

  • 容器和存档文件格式,如 Zip、7z、tar、PNG。

CRC 的限制和漏洞

虽然 CRC 非常有效,但它也有一些限制:

  • 无法检测到所有可能的错误。长时间的突发错误可能会未被检测到。

  • 如果攻击者重新计算 CRC,那么故意修改的数据可能会未被检测到。

  • 不提供任何 错误恢复 或纠正机制。

结论

总之,循环冗余校验依赖于模 2 多项式除法来检测意外或故意的数据损坏。它是网络和存储系统中使用的重要数据完整性保护机制。CRC 错误警示下面可能存在的问题,应及时进行调查和解决。