为什么引入CRC

现实的通信链路都不会是理想的。这就是说,比特在传输的过程中可能会产生差错:1可能会变成0,0可能会变成1,这就叫做比特差错。在一段是时间内,传输错误的比特占所传输比特总数的比率成为误码率BER(Bit Error Rate)。误码率与信噪比有很大的关系,在实际通信中不可能使误码率下降到零。
因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
目前在数据链路层广泛使用了循环冗余检测CRC的检测技术

CRC的原理

CRC运算实际上就是在数据长为k的后面添加供差错检测用的n位冗余码,然后构成帧k+n位发送出去。

首先来介绍几个概念
(1)模2运算:实际上是按位异或运算,即相同为0,相异为1,也就是不考虑进位、借位的二进制加减运算。如:1111+1010 = 0101
(2)FCS:其实就是冗余码,帧检验序列(Frame Check Sequence)
(3)生成多项式:其实就是除数,比如下面将要用到的除数p = 1101

计算n位冗余码

现假定待传输的数据M = 101001(k = 6),除数p = 1101 (n = 3)比n多一位
这n位冗余码可以用下面的方法得出。
(1)用二进制的模2运算进行(2^n)乘M的运算,相当于在M后面添加n个0
即M后面添加3个0
(2)现在得到M = 101001000(k+n = 9)位的数除以除数p(n = 3)位,
得到商是Q(不关心),余数R =001(n位)R就是冗余码FCS

现在加上FCS后发送的帧是101001001

在接收端把接收到的数据M = 101001001以帧为单位进行CRC检验:把收到的每一个帧都除以相同的除数p(模2运算),然后检查得到的余数R。
如果在传输过程中没有差错,那么经过检验后得到余数R肯定是0。
(读者可以自己检验下,被除数现在是M = 101001001,除数P= 1101,看余数是否为0)
总之,在接收端对接收到的每一个帧经过CRC检验后,有两种情况:
(1)余数R = 0,则判断这个帧没有问题,就接受
(2)余数R != 0,则判断这个帧有差错,就丢弃。

总结一下:

在数据链路层若仅仅使用CRC差错检验技术,则只能做到对帧的无差错接收。

循环冗余检验CRC原理相关推荐

  1. 【数据校验杂谈】循环冗余检验 (CRC) 算法原理

    2019独角兽企业重金招聘Python工程师标准>>> 循环冗余检验 (CRC) 算法原理 Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于 ...

  2. 循环冗余检验 CRC

    一.总体流程: 把要发送的每组数据2^nM(k+n位)除以除数P(n+1位),计算出冗余码FCS(n位),然后再求出要发送的数据:2^nM+R. 接受端把收到的数据除以除数P,看余数R是否为0,如果为 ...

  3. 不要跑,CRC没这么难!(简单易懂的CRC原理阐述)

    不要跑,CRC没这么难!(简单易懂的CRC原理阐述) 网上大多的教材都是面向大佬的很多细节原理都没有讲清楚,对于我们这些新萌菜鸟们实在太不友好了.于是我写一篇相对轻松易懂的博客,希望能对学习CRC的朋 ...

  4. 简单易懂的CRC原理阐述

    转载: https://segmentfault.com/a/1190000018094567 网上大多的教材都是面向大佬的很多细节原理都没有讲清楚,对于我们这些新萌菜鸟们实在太不友好了.于是我写一篇 ...

  5. CRC 循环冗余检验【计网必考】

    CRC 循环冗余检验作为一个重点,也是数据链路层必考的一个考点,所以我把差错检测单独拿出来分析一起看一下.总结不易,一个简单的攒,Thanks♪(・ω・)ノ 目录 一.介绍及工作原理 二.校验计算过程 ...

  6. 数据链路层差错检测:CRC(循环冗余检验)

    1.循环冗余检验(CRC): 在发送端,先把数据划分为祖,假定每组K个比特.现假定待传送的数据M = 101001(k=6).CRC运算就是在数据M后面添加提供差错检测的n位冗余码,然后构成一个帧发送 ...

  7. CRC循环冗余检验的纠错功能和代码实现

    CRC循环冗余检验的纠错功能和代码实现 写这篇文章呢,主要是想聊一下CRC的纠错功能,虽然我们谈到CRC很少说到它的纠错功能,但不代表没有,因此写一文以记录下它的纠错功能以及如何用java代码实现. ...

  8. 蓝牙:CRC原理详解(附crc16校验代码)

    CRC原理详解(附crc16校验代码) 参考链接: https://www.cnblogs.com/esestt/archive/2007/08/09/848856.html Cyclic Redun ...

  9. CRC原理详解(附crc16校验代码)

    CRC原理详解 算法原理 查表法 反向算法 附录1:crc16校验表及用法 算法原理 Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被 ...

最新文章

  1. redux源码分析之一:createStore.js
  2. linux超实用的管理命令
  3. [20180808]exists and not exists.txt
  4. 信号的采样与插值重建(包含matlab)
  5. Shell sed命令,替换文件内容、替换目录下所有文件内容、读取文件内容
  6. 湖北省计算机技能高考c语言试题及答案,最新湖北省技能高考C语言测试题
  7. 你能理解、不能理解和不需要理解的量子计算
  8. 三大工艺因素影响百万像素镜头成像质量
  9. 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_01.SpringMVC概述及入门案例
  10. python音乐推荐系统的设计与实现_基于协同过滤的音乐推荐系统
  11. 20201021 plecs示波器导出高质量图片
  12. 同济版《线性代数》引发激烈争议!
  13. 新浪微博热门话题(30 分)(字符串)
  14. 难以置信!一篇文章就梳理清楚了 Python OpenCV 的知识体系
  15. 微信小程序微商城(九):微信授权并实现个人中心页面页面
  16. Oculus联合创始人Palmer Luckey:我不认为Facebook是VR的未来
  17. 音频处理中的瞬态概念 Transient phenomena of Audio Signal Proccess
  18. SCTP-流控制传输协议
  19. java读取zip文件,并将json中的反转义斜杆去除
  20. vue学习之生命周期,钩子函数执行顺序

热门文章

  1. c++大小写字母转换
  2. python常用库文件一键安装
  3. 上海海事大学计算机考研资料汇总
  4. 多卡聚合智能融合通信设备疫情检查站视频传输方案
  5. linux多磁盘合并,挂载到相同文件夹
  6. #教计算机学画卡通人物#生成式对抗神经网络GAN原理、Tensorflow搭建网络生成卡通人脸
  7. MySQL的limit分页公式和总页数计算
  8. delphi 数字转字符串补全
  9. 【数学建模学习】matlab实现评价模型——层次分析法(AHP)
  10. 微信小程序如何使用阿里字体图标(用法非常简单适用web)