CRC循环冗余校验引起的二进制除法如何计算风暴

谈CRC循环冗余校验的之前,先把二进制除法说一下,先回忆一下十进制之间的除法是如何运算的,

在这里插入图片描述

这个式子在做除法的时候满足了这几个条件:

  • 从被除数的最左边开始向右做除法
  • 被除数运算的两位永远比除数大
  • 如果相减的时候需要向前一位借1,则前一位要减1

知道两个概念

模2和

两个二进制位相加不进位,即 0+0=0,0+1=1,1+0=1,1+1=0(此时不进位)

模2减

两个二进制位相减不借位,即0-0=0,0-1=1(此时不进位),1-0=1,1-1=0

两种不同的二进制除法

除法

这个方法和正常的十进制除法没什么区别,就和刚开始回顾的二进制除法运算方法一样,在下面的例子中,被除数前四位1010除以111要考虑向前一位借1,其实把这些二进制转换成十进制的除法就是83/7=11…6,而这个二进制的运算结果完全吻合。
在这里插入图片描述

模2除法

模2除法就要用到之前说的两个概念之中的1个,就是模2减,除数和被除数相减的时候不考虑进位(可以看作做异或运算),这就引出了CRC(Cyclic Redundancy Check)循环冗余校验,用来检测或校验数据传输或者保存后可能出现的错误,本次主要讲解在计算机网络信息传输中的校验,计算机组成原理的信息保存校验原理和网络信息校验一样,不做深入讲解。在相减的时候每一次都是3位之间相减。你可能会问,为什么有时结果是1,有时结果是0呢,主要是被除数百位和除数百位相减可以抵消,不然相减结果还是3位就没有意义了。

在这里插入图片描述

CRC 循环冗余校验

编码过程

计算机传输数据的时候要最底层是物理层,向上有数据链路,网络层等等。当然数据要从计算机输出,是自上向下传输,比如从网络层得到一个IP数据报,封装成数据帧。在发送端把数据划分成组,假设每一组k位,数据M=101001,那么k=6,在M后面添加n位的二进制数值(冗余码)用来差错检验。添加冗余码的时候被除数和除数之间进行的是模2除法

接下来确定除数,除数采用二进制系数多项式,如下表

名称多项式对应除数
CRC-8x8+x2+x+11000 0011 1
CRC-16x12+x11+x3+x2+x+11100 0000 01111

x8+x2+x+1表示二进制第8,2,1,0位为1,黄色的就是0位,其它多项式同理

接下来继续M数据的处理,设除数P=1101,则n=3,为什么冗余码的长度是3呢?

因为余数比除数少1,余数是被用来做校验用的。被除数是2nM=101001000

为什么后面多出来n个0呢?这和后面的检验有关由于拿到的是(k+n)的数据要对数据做模2运算最后判断余数,只有被除数处于(除数+除数的余数)才会等于0,所以0的个数和余数的个数一样。

根据上面模2除法运算结果是商为110100,余数为001,把101010改为101001001,这就是一个完整的可校验数据。

下表是本题的各个数据的含义

符号含义
M一组数据101001
n冗余码的位数3
k每组数据的位数6
P除数1101
2nM被除数101001000
Q110101
R(余数)冗余码001
2nM+R发送的数据101001001

差错检测能力

利用多项式,我们定义误码多项式E(X)是接收到的消息码字与正确码字的异或。即

E(X) = Trecv(X) XOR Tcorrect(X) …… (14)

当E(X)能够被CRC多项式P(X)整除的时候(即R=0)CRC算法无法检查到错误。当我们选择一个适当的P(X)时,E(X)都不能被P(X)整除,因此可以检测出的出错情况有:

  • 单比特差错,只要P(X)含有一个以上的非零项。
  • 双比特差错,只要P(X)满足上述两种形式((12)(13)式)。
  • 任意奇数个比特差错,只要P(X)含有因式(X - 1)。
  • 任意突发差错,当突发差错长度小于或等于帧检验序列(F(X))的长度(n - k)。
  • 长度为(n - k + 1)的突发差错片段,这个片段等于(1-2-(n-k-1))。
  • 长度大于(n - k + 1)的突发差错片段,这个片段等于(1 - 2-(n-k))。
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CRC循环冗余校验)是一种常用的错误检测技术。CRC主要通过附加一个固定长度的校验码到数据中,来检测数据在传输过程中是否发生了错误。在CRC中,校验码是通过对数据进行除法运算得到的。 具体而言,给定一个二进制的数据块D,CRC会附加一个n位的校验码C到数据末尾,形成一个新的数据块D'C。校验码C被设计为使得D'C能够被一个特定的生成多项式G整除,如果在传输过程中发生了错误,这个多项式无法整除D'C,因此可以通过检查余数来判断是否发生了错误。 CRC的关键是选择适当的生成多项式G。常见的生成多项式包括CRC-8、CRC-16和CRC-32等。不同的生成多项式会产生不同长度的校验码,长度越长,检测到错误的可能性越高。 在进行CRC运算时,接收方会将接收到的数据块D'C除以生成多项式G。如果余数为0,则表明没有错误;如果余数不为0,则表明发生了错误。在这种情况下,接收方可以向发送方请求重新发送数据,以确保数据的正确性。 总而言之,CRC是一种通过附加校验码到数据中的方法,可以有效地检测传输过程中的错误。通过选择适当的生成多项式,可以提高CRC的检测能力。 ### 回答2: CRC循环冗余校验)是一种常见的错误检测技术,用于检测数据传输过程中是否发生了错误。它使用多项式除法的原理,将输入数据与生成多项式进行模2除法运算,得到校验码,然后将校验码附加到原始数据中进行传输,接收方再次进行CRC运算并检查校验码是否匹配,从而判断数据是否出现错误。 CRC算法主要基于封闭性和循环性的原则,它将传输的数据看作二进制数,使用一个生成多项式进行除法运算。该生成多项式在CRC算法中是固定的,不同的生成多项式对应不同的CRC校验码。一般情况下,生成多项式选取低于数据位数的最高次项为1,其余项为0。 CRC过程中,首先需要进行数据的比特填充,即将数据位数按照生成多项式的次数进行扩展,扩展的位数是生成多项式的位数减1。然后进行模2除法运算,逐位比较输入数据和生成多项式的对应位,若两位相同,则结果为0,否则为1。运算结束后得到CRC校验码,然后将其附加到原始数据后面,发送给接收方。 接收方收到数据后,同样经过除法运算得到接收到的校验码。如果接收到的校验码与发送方计算校验码相同,说明数据传输过程中没有发生错误。如果两个校验码不匹配,则表示数据存在错误,需要重传或进行其他处理。 CRC循环冗余校验是一种简单、高效且广泛应用的错误检测技术,它能够检测发生在数据传输过程中的大多数错误,并且具有较低的错误漏检率和错误检测率。在网络通信、存储系统、计算机硬件等领域广泛应用,能够确保数据的完整性和可靠性。 ### 回答3: CRC循环冗余校验)是一种常用的数据校验方法。在计算机通信和存储中,为了确保数据的完整性和准确性,我们经常需要对数据进行校验CRC是通过对数据进行除法运算来实现的。 CRC校验的基本原理是,将数据看作二进制多项式,然后利用除法运算来计算其余数。具体步骤如下: 1. 将待校验的数据表示为二进制形式,并在最高位补充k个0,其中k为CRC校验码的位数。 2. 选择一个固定的生成多项式G(x),作为除数。该多项式的系数即为CRC校验码的系数。 3. 将生成多项式G(x)左移k位,与待校验数据相异或。 4. 重复步骤3,直到所有数据位都被处理完。 5. 最后所得结果就是校验码,可以将其附加在原始数据后面发送。 6. 接收方根据接收到的数据,再次进行CRC校验。如果余数为0,则认为数据没有出错;反之,则认为数据出错。 CRC可以提供较高的校验效率和误码检测能力,常被应用于计算机网络、存储器、传感器等领域。它的优点是计算简单、校验速度快,并且能够检测到多种错误,包括单比特差错、双比特差错和突发差错等。 总而言之,CRC循环冗余校验是一种常用的数据校验方法,通过除法运算来计算校验码,并能够高效地检测数据的错误。它在通信和存储领域发挥着重要作用,确保了数据的完整性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值