CRC校验

对于陌生人而言,CRC这个名词听着就好陌生,绞尽脑汁在想到底是什么,但是由于互联网时代,百度一下你就知道。CRC校验最常用于网络方面,是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。在“数字电路”、“组成原理”、“网络”等计算机方面都有所涉及。

CRC循环冗余校验:

在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验因特网校验循环冗余校验等。

CRC循环冗余码的组成:

CRC码由两部分组成,前一部分是k+1个比特的待发送信息(固定不变),后一部分是r个比特的冗余码。
计算过程中主要用到两个多项式:f(x) 和 G(x)。
f(x) 是一个k阶多项式,其系数是待发送的k+1个比特序列;
G(x) 是一个r阶的生成多项式,由发收双方预先约定。
所以CRC循环冗余,又称多项式码。

CRC是怎样实现校验的:

设实际要发送的信息序列为1010001101(10个比特,k = 9),则以它们作为f(x) 的系数,得到对应的9阶多项式为:
f(x)= 1*x^9 + 0*x^8 + 1*x^7 + 0*x^6 + 0*x^5 + 0*x^4 + 1*x^3 + 1*x^2 + 0*x + 1
再假设发收双方预先预订了一个5阶(r = 5)的生成多项式:
G(x) = x^5 +x^4 +x^3 +x^2 + x+1
= 1*x^5 + 1*x^4 + 0*x^3 + 1*x^2 + 0*x + 1
则其系数序列为110101。
CRC码的产生方法:
1>生成 r 个比特的冗余码:用模2除法进行 x^r f(x) / G(X) 运算,得余数R(x) ,其系数即是冗余码。
这里写图片描述
其中的余数01110即为冗余码,对应的余式:
R(x) = x^4 + x^3 + x^2 + x + 0
2>得到带CRC校验的发送序列:用模2减法进行 x^5 f(x) - R(x) 运算得到带CRC校验的发送序列,即x^5 f(x) - R(x) = 101000110101110。形式上看,就是在原信息序列后面附加上冗余码。

在接收方,用同样的生成多项式G(x) 除所收到的序列。若余数为0,则表示传输无差错,否则说明传输过程出现差错。若收到的序列是101000110101110,用它除以G(x) = x^5 +x^4 +x^2 + 1(即110101),因为余数为0,所以收到的序列无差错。

3>常见的标准生成多项式:

CRC-12:G(x) = x^12 + x^11 + x^3 + x^2 + 1
CRC-16:G(x) = x^16 + x^15 + x^2 + 1
CRC-12:G(x) = 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
从中可以看出,只要选择足够的冗余位,就可以使得漏检率减少到任意小的程度。CRC能够检测出下列错误:
全部的奇数个错
全部的二位错
全部长度小于或等于r(冗余码长度)位的突发错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值