CRC循环冗余校验,经典例子讲解~

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~

CRC循环冗余校验

1 CRC校验简介

1.1 CRC校验简介与原理?

      CRC校验是一种常用检错校验方式。接收方用与发送方相同的模2除法的除数,并通过CRC校验来辨别数据再传输过程中是否出现的错误。注意CRC校验只能检错,不能纠错!

      CRC校验原理:其根本思想就是先在要发送的数据帧后面附加一个CRC校验码(CRC校验码是通过发送端和接收端共同选定的某个特定除数通过模2除法计算出来的),生成一个新帧后发送给接收端。新帧到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)特定的除数,看是否能整除(由于在发送端发送的新帧末尾携带了CRC校验码,因此新帧是能整除以特定除数的(也就是模2除法计算后余数为0)),如果余数为0,则表示传输数据正确;如果余数不为0,则表示数据传输过程出现错误!

    具体来说,CRC校验原理就是以下几个步骤:

   (1)先选定一个特定的模2除数(二进制形式的除数,通常以多项式表示,所以CRC又称为多项式编码方法)。

   (2)假设所选定的模2除数的二进制位数为k位,假设原数据帧位数为m位。然后在原数据帧后面加上k-1位个“0”(CRC占位值),然后以这个加了k-1个“0“的新数据帧(m+k-1位)以"模2除法"方式除以模2除数,所得到的余数就是该帧的CRC校验码,注意:余数的位数一定要是比除数位数只能少一位,也就是说余数长度为k-1位,不足则前面补0)。

   (3)再把CRC校验码替换原数据帧末尾的CRC占位值,形成一个新数据帧,然后将新数据帧发送到接收端;

   (4)最后在接收端再把这个新帧以“模2除法”方式除以前面选定的模2除数,如果余数为0,则表明该帧在传输过程中没出错;如果余数不为0,则表示数据传输过程出现了错误。

1.2 模2除法

      "模2除法"与"算术除法"类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。相当于二进制中的逻辑异或运算(二进制位相同异或值为0,二进制位不同异或运算值为1)!

      模2加法位运算为:1+1=0,0+1=1,1+0=1,0+0=0,无进位,也无借位;

      模2减法位运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。

      模2除法示例:

2 CRC校验码计算

      从上面的分析可以知道要计算出CRC校验码需要如下两个关键步骤:

      (1)选定模2除数;

      (2)通过模2除法计算CRC校验码

      下面用一个例子来演示CRC校验码的计算。

      题:假设选择的CRC生成多项式为G(x) = x^4 + x^3 + 1,求出二进制序列10110011的CRC校验码? 最终的发送数据帧是多少?

      解:

      (1)首先把生成多项式转换成二进制数(模2除数),由G(x) = x^4 + x^3 + 1可以知道(模2除数一共是5位,位数等于最高位的幂次加1,即4+1=5),然后根据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个模2除数二进制的第4位、第3位和第0位的二进制均为1,其它位均为0),这样我们就到模2除数的二进制比特串为11001;

     (2)模2除数位数为5位,根据前面的介绍可得知CRC校验码的位数为4位(校验码的位数比生成多项式的位数少1);

     (3)原数据帧为10110011,在它末尾加4个0(CRC占位值),得到101100110000,然后把这个数通过"模2除法"方式除以模2除数,得到的余数(即CRC码)为0100;

     (4)把上步计算得到的CRC校验0100替换原始帧101100110000后面的四个“0”(CRC占位值),得到带CRC校验码的新数据帧101100110100。再把这个新数据帧发送到接收端;

     (5)当新数据帧到达接收端后,接收端会把这个新数据帧再用相同的模2除数11001以"模2除法"方式计算余数,验证余数是否为0,如果余数为0,则表明该帧在传输过程中没出错;如果余数不为0,则表示数据传输过程出现了错误。

      以上详细讲解了CRC校验码的计算方式,并得到了携带CRC校验码的新数据帧。你get到了吗?

    (1) 商务合作微信号:M9392W

    (2) 购物商城: 扫码即可进入博主开发的小程序购物商城,享超大优惠购物,支持一下博主吧~

    (3) 博主微信公众号IT特靠谱,学习更多开发实战技巧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Most

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值