如何进行CRC校验

为了保证数据传输的可靠性,计算机网络传输数据时,必须采用差错检验措施,数据链路层广泛应用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。

基本原理:
CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。

冗余码:发送端,先把数据划分为组,假设每组k个比特。假定待传送的数据M=101001,CRC运算就是在数据M后面添加供差错检验用的n位冗余码。用二进制的模2运算进行2^n乘M的运算,这相当于在M后面添加n个0。得到k+n位的数除以收发双方事先商定的长度为(n+1)位的除数p,得出商是Q余数是R(n位,比p少一位)。

在接收端把接收到的数据以帧为单位进行CRC检验:把收到的每一帧都除以同样的除数P(模2运算),然后检查得到的余数R:
如果在传输过程中无差错,那么经过CRC检验后得出的余数R肯定是0。
总之在接收端对收到的每一帧数据进行检测后,有以下两种情况:
1、若余数R=0,则判定这个帧没有错,就接受;
2、若余数R≠0,则判定这个帧有错,就丢弃。

一种简便的方法是使用多项式来表示循环冗余检验过程,在上边的例子中,用多项式P(X) = x^3 +X^2+1表示P = 1001(最高位对应X^3,最低位对应X^0)。

例题:要发送的数据为1101011011,采用CRC的生成多项式是P(X)=X^4+X+1,试求应添加在数据后面的余数。
数据在传输过程中最后一个1变成了0,问接收端能否发现?
数据在传输过程中最后两个1变成了0,问接收端能否发现?

解答如下:
要发送的数据为1101011011,采用CRC的生成多项式是P(X)=X^4+X+1,,则可用11010110110000除以10011获得数据后面的余数,其余数为1110,计算过程如下图:
这里写图片描述
数据传输过程中最后一个1变成0,则接收端用11010110101110(数据最后一个1变成0即:1101011010,余数为1110)除以10011,获得余数为1101,不是0000,故接收端判定该数据帧有错。
数据传输过程中最后两个1变成0,则接收端用11010110001110(数据最后一个1变成0即:1101011000,余数为1110)除以10011,获得余数为1011,不是0000,故接收端判定该数据帧有错。

在数据链路层若仅仅使用循环冗余检验CRC差错检测技术提供可靠传输服务,只能做到对帧的无差错接收。注意:我们现在并没有要求数据链路层向网络层提供可靠传输服务,可靠传输服务指:数据链路层的发送端发什么,在接收端就收到什么。传输差错分为两种:1、比特差错(1可能变成0,0可能变成1);2、收到的帧没有出现差错,但出现了帧丢失、帧重复等。故在数据链路层使用CRC校验,能够实现无比特差错的传输,但这还不是可靠传输。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值