1、循环冗余检验(CRC):

在发送端,先把数据划分为祖,假定每组K个比特。现假定待传送的数据M = 101001(k=6)。CRC运算就是在数据M后面添加提供差错检测的n位冗余码,然后构成一个帧发送出去,一共发送(k+n )位。在所要发送的数据后添加冗余码,显然增大了数据传输的开销,但却可以进行差错检测。当传输可能出现差错时,付出的代价往往是很值得的。

2、n位冗余码计算:

用二进制的模2运算进行2^n乘M的运算,这相当于在M后面添加n个0 ,得到的(k+n )位的数除于收发双方实现商定的长度为(n + 1)位的除数P,得出的商是Q而余数是R(n位,比P少一位)。

3、除数P:

用生成多项式P(X)表示上面的除数(假定n+1位),P(X) = X^3 + X^2 + 1则P = 1101。

即P(X) = X^n+ X^(n-2) + ….+ X^2 +1 , P = 101…101。

4、检测:

在接收端把收到的数据以帧为单位进行CRC检测:把收到的每一个帧除于同样的除数(模2运算),然后检查得到的余数R,如果传输过程无差错,经过CRC检测得到的余数肯定是0 。

1)、R = 0,则判定这个帧没有差错,就接受。

2)、R!= 0,则判定这个帧有差错,就丢弃。

5、例子:

M = 101001 (即 k = 6)。假定除数生成多项式P(X) = X^3 + X^2 + 1;则除数P 为1101 (即 n = 3)。经模2 除法运算的结果余数R = 001 ,这个余数就作为冗余码拼接在M的后面发送出去。这种为了进行差错检测添加的冗余码常称为帧检验序列FCS。因此加上冗余码之后发送的帧是101001001(即2^n M + FCS)。

在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC 检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。最后强调,在数据链路层仅仅使用CRC差错检测技术,则只能做到对帧的无差错接受,但还不是可靠传输。

数据链路层差错检测:CRC(循环冗余检验)相关推荐

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

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

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

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

  3. 循环冗余检验 CRC

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

  4. 数据链路层的循环冗余检验

    关于CRC 循环冗余检验码即为CRC,所求冗余码为FCS.循环冗余检验是数据链路层进行差错检测的一个方法.即检验发送的一串二进制数据到接收时里面是否产生误码.基本思路是:通过计算生成校验码,检错时将数 ...

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

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

  6. 【算法】CRC 循环冗余校验

    1.概述 循环冗余校验CRC (Cyclic Redundancy Check)是一种数据链路层的差错控制技术. 在数据的传输过程中可能会产生比特错误: 1可能变为0,0可能变为1. 在一段时间内,传 ...

  7. 数据链路层---差错检测和纠正

    数据链路层---差错检测和纠正 目录 数据链路层---差错检测和纠正 一.差错检测 二.差错纠正 1.反馈检测法 2.空闲重发请求方案 3.连续重发请求方案 帧同步虽然可以区分每个数据帧的起始和结束, ...

  8. 从原理到代码理解CRC循环冗余校验

    概述:本文详细介绍了CRC循环冗余计算的数学原理,算法中使用的参数说明,并以Modbus协议中的CRC-16算法为例,进行手算验证,同时提供LabVIEW和C语言的直接计算CRC-16 值的代码以及C ...

  9. 循环冗余检验CRC原理

    为什么引入CRC 现实的通信链路都不会是理想的.这就是说,比特在传输的过程中可能会产生差错:1可能会变成0,0可能会变成1,这就叫做比特差错.在一段是时间内,传输错误的比特占所传输比特总数的比率成为误 ...

最新文章

  1. Asp.net mvc 添加Jquery UI
  2. 第三方服务整合-阿里云OSS上传文件-填坑
  3. 15947884 oracle_Oracle Patch Bundle Update
  4. Vue第一部分(4):表单的双向数据绑定:v-model指令
  5. 机器人 魂斗罗铁血兵团_《魂斗罗铁血兵团:反叛》XBLA游戏下载
  6. Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例
  7. 华硕a501lb5200加内存和固盘并装上win7系统并设置固盘为第一启动
  8. Qt多线程间信号槽传递非QObject类型对象的参数
  9. 10个最重要SQL Server事务日志神话
  10. JQuery:视频+实战总结
  11. C语言中怎么将变量名转换为字符串 -转
  12. android 距离感应器控制屏幕熄灭_书房大变身!有格调的屏幕挂灯,加了它桌面秒变神仙颜值...
  13. tcping命令详解
  14. python 美化ppt_python操作PPT------PPT内容样式调整
  15. 基于stc15f2k60s2芯片单片机编程(串口超声波时间)
  16. apiCloud实现微信分享功能
  17. 《曾文正公家书》摘录一
  18. Hive大总结!!!
  19. 用python自动制作ppt第一讲——了解11种默认布局
  20. 每天五分钟机器学习:如何计算模型的假阳性率和真阳性率?

热门文章

  1. 第一节 接口概述 [转贴]
  2. android studio : clang++.exe: error: invalid linker name in argument '-fuse-ld=bfd
  3. 浅谈爬虫 《一》 ===python
  4. 学习笔记:AC自动机
  5. 在Controller中使用AOP
  6. 从Loagistic 到 SVM算法
  7. pureMVC简单示例及其原理讲解四(Controller层)
  8. JS 学习笔记--11---内置对象(Global/Math)
  9. window8下安装RabbitMQ
  10. WorldWind Java 版学习:1、启动过程