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

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

1. 循环冗余检验CRC的原理

  • 在发送端,先把数据划分为组,假定每组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。
  • 在所要发送的数据后面增加n位冗余码,虽然增大了数据传输的开销,但却可以进行差错检测,当传输可能出现差错时,付出这种代价往往是值得的。

2. n位冗余码的求值方法

  • 用二进制的模2运算进行2^(n)乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数P,得出商是Q而余数是R(n位,比P少一位)。
  • 例子: M=101001(即k=6),假定除数P=1101(即n=3)。
    经模2除法运算后的结果是,商Q=110101(这个商并没有什么用处),而余数R=001。这个余数R就是用作冗余码拼接在数据M的后面发送出去。因此加上FCS后发送的帧时101001001(即(2^n)*M+FCS),共有(k+n)位。

    这里写图片描述
  • 这种为了进行检错而添加的冗余码常称为帧检验序列FCS(Frame Check Sequence)。

注:CRC是一种检错方法,FCS是添加在数据后面的冗余码,在检错方法上可以选用CRC,也可以不选用CRC。


参考文献:
[1]《计算机网络(第5版)》谢希仁——第三章 3.1

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CRC (循环冗余检测) 是一种在数据传输中常用的错误检测机制。它的工作原理是通过生成校验码来检测数据传输过程中是否出现了错误或者损坏。 举个例子来说明CRC的工作原理:假设我们要传输一串二进制数据:10111001。CRC的工作原理是在发送数据之前,通过特定的算法生成一个校验码。 首先,我们选择一个生成多项式,常用的有CRC-8、CRC-16和CRC-32等。假设我们选择的是CRC-8,那么我们需要一个8位的生成多项式。比如说,我们选择的生成多项式是11001101。 接下来,我们将数据位数和生成多项式的位数相加,得到的结果就是校验码(Remainder)。对于这个例子来说,我们的数据位数是8位,生成多项式的位数也是8位,所以校验码的位数也是8位。 然后,我们在数据后面加上这个校验码。比如说,我们的数据是10111001,生成的校验码是1101,那么我们就将这两部分连接起来,得到101110011101。这个就是我们要发送的数据包,包括数据和校验码。 在接收端,当数据包传输完成后,接收端会使用同样的生成多项式来计算接收到的数据包是否存在错误。如果计算得到的校验码和接收到的校验码一致,就说明数据传输过程中没有出现错误。如果不一致,就说明数据包存在错误。 通过CRC,我们可以有效地检测到数据传输过程中可能出现的错误。这是因为CRC具有检测到单比特错误、双比特错误和多比特错误的能力。通过选择合适的生成多项式,CRC可以提供很高的错误检测能力,成为数据传输中常用的错误检测机制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值