文章目录0.前言1.简介2.原理3.模 2 除法4.CRC 校验码计算示例5.常用CRC版本6.小结参考文献0.前言我们经常碰到 CRC 这个概念尤其是在通信领域。但是 CRC 的原理是什么呢我们有必要了解一下。1.简介CRCCyclic Redundancy Check循环冗余校验是一种数据错误检测方法主要用来检测数据传输或者保存后是否出现错误。CRC 相对于其他检测手段如奇偶校验、算术和校验等因其检错能力强、开销小、易于编码器和检测电路实现从检错的正确率与性能等方面都比其他校验方式有优势所以 CRC 成为计算机通信领域最为普遍的校验方式。2.原理CRC 原理看起来比较复杂难懂因为大多数书上基本上是以二进制的多项式形式来说明。其实 CRC 原理比较简单其根本思想是在发送的数据帧后面附加一个数这个就是 CRC 校验码生成一个新帧发送给接收端。接收端收到数据后采用相同的除数对数据进行模2除法运算。因为在发送端发送数据帧之前就已通过附加一个数做了“去余”处理即可以被整除了所以结果应该是没有余数。如果有余数则表明该帧在传输过程中出现了差错。理解 CRC最为关键的就是理解 CRC 校验码的生成方法。CRC 校验码生成方法是对原始数据采用特定的多项式对应一个二进制数进行模 2 除法运算得到的余数即为 CRC 校验码。从上面可以看出CRC 校验中有两个关键点一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串多项式二是把原始帧与上面选定的除数进行模2除法运算计算出 CRC 校验码。多项式可以随机选择也可按国际上通行的标准选择但最高位和最低位必须均为 1。3.模 2 除法模 2 除法与算术除法类似但每一位除的结果不影响其它位即不向上一位借位所以实际上就是异或。例如被除数 100101(2) 对除数 1110(2) 采用模 2 除法后商为 11(2)余数为 1。4.CRC 校验码计算示例由以上分析可知既然除数是随机的或者按标准选定所以 CRC 校验的关键是如何求出余数也就是 CRC 校验码。下面以一个例子来具体说明整个过程。现假设选择的 CRC 生成多项式为P(X) X4 X3 1要求出二进制序列 10110011 的 CRC 校验码。下面是具体的计算过程1首先把生成多项式转换成二进制数由P(X) X4 X3 1可以知道它一共是 5 位总位数等于最高位的幂次加1即 415然后根据多项式各项的含义多项式只列出二进制值为 1 的位也就是这个二进制的第 4 位、第 3 位、第 0 位的二进制均为 1其它位均为 0很快就可得到它的二进制比特串为 11001。2因为生成多项式的位数为 5根据前面的介绍得知 CRC 校验码的位数为 4校验码的位数比生成多项式的位数少 1。因为原数据帧 10110011在它后面再加 4 个 0得到 101100110000然后把这个数以“模2除法”方式除以生成多项式得到的余数即 CRC 校验码为 0100。如下图所示。3把上步计算得到的 CRC 校验码 0100 替换原始帧 101100110000 后面的四个 0得到新帧 101100110100。再把这个新帧发送到接收端。4当以上新帧到达接收端后接收端会把这个新帧再用上面选定的除数 11001 以模2除法方式去除验证余数是否为 0如果为 0则证明该帧数据在传输过程中没有出现差错否则出现了差错。5.常用CRC版本CRC 校验码的生成关键是选择一个二进制多项式作为除数。目前不同版本的 CRC 已经有标准的二进制多项式下面给出常用 CRC 版本名称多项式表示法应用举例CRC-8X8X2X10x107CRC-12X12X11X3X2X10x180Ftelecom systemsCRC-16X16X15X210X18005Bisync, Modbus, USB, ANSI X3.28, SIA DC-07, many others; also known as CRC-16 and CRC-16-ANSICRC-CCITTX16X12X510X11021ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCSCRC-32X32X26X23X22X16X12X11X10X8X7X5X4X2X10x104C11DB7ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCSCRC-32CX32X28X27X26X25X23X22X20X19X18X14X13X11X10X9X8X610x11EDC6F41iSCSI, SCTP, G.hn payload, SSE4.2, Btrfs, ext4, Ceph6.小结通过以上 CRC 校验原理的剖析和 CRC 校验码的计算示例大家应该对这种看似复杂的 CRC 校验原理和计算方法应该比较清楚了。参考文献百度百科.模2除法CSDN.CRC码计算及校验原理的最通俗诠释