CRC循环冗余校验学习及总结

一、什么是CRC冗余校验?

循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。----来自百度百科
这个解释貌似有些抽象。具体详解会在下文详解。

二、为什么要有CRC冗余校验

先贴上一个数据帧的结构:
在数据的实际传输过程中数据可能会发生差错,也就是说比特在物理链路中收各种影响数据会和发送时的数据不一致,可能某个比特位在传输过程中会由0变为1或者相反,即实际通信链路是不理想的,为了确保数据传输的准确性,计算机在传输数据时必须采用各种数据校验机制,比如说奇偶校验和CRC数据冗余校验。

三、.CRC冗余校验的原理是什么?

那么CRC循环冗余校验的原理是什么呢,众所周知在数据帧的最后有一个CRC校验码,这是CRC循环冗余校验的根本所在,那么这个校验码是怎么来的呢?其实这个校验码就是一个余数,被除数是数据段的数据M左移n位(右移后空出来的位置用0填充),除数是收发双方实现原定好的长度为k数据P,那么大伙是不是有疑问那么究竟源数据M要左移几位呢n到底要为多大?其实右移的位数的大小n就是除数位数的k-1。至于为什么请往下看。假设M为1001010,P为1101
我们实际走一下这个过程,这样比较容易理解一点,具体步骤如下:

其实这个和我们小学学的除法区别不大,只有一点不同,注意看你源数据和除数相减时和我们十进制除法是不一样的,这里用的是,模2运算就是进行加减法的时候两个数字同为1或者同为0则结果为0不同则为1。冗余码就是除完以后的余数
所以实际发送的就是数据部分加冗余码即按照上面的例子就时M+冗余码(这里的+不是算算数运算符),即1001010101。看到这里你是不是就明白了为什么冗余码的长度是除数的长度减一了吧。
那么接收端接收到数据以后怎么验证自己收到的数据是不是正确无误的呢,接收端拿到数据以后就直接用数据连上校验码除以已知的除数如果余数位0则数据正确,如果余数不为0则判定该则该帧有误,就丢弃,要注意的是判断只能判断帧是否正确但不能判断帧出错几位或者说在哪个位置出错。
看到这你是不是就理解了CRC循环冗余校验呢,不理解的话就评论吧,我们在评论中交流一下。
如果文中有什么错误,欢迎大家指出。谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值