三、数据链路层(三)差错控制

news2024/11/24 4:48:13

目录

3.1检错编码

3.1.1奇偶校验码

3.1.2循环冗余码(CRC)

3.2纠错编码

3.2.1海明码


传输差错可分为两种

  1. 位错帧中某些位出现了差错,也称比特差错、误码
  2. 帧错帧的丢失、重复或失序等错误。

通常利用编码技术进行差错控制,主要有两类:

  1. 自动重传请求(Automatic Retransmission reQuest, ARQ)
  2. 前向纠错(Forward Error Correction, FEC)

ARQ方式中,接收端检测出差错时,就设法通知发送端重发,直到接收到正确的码字为止。 

FEC方式中,接收端不但能发现差错,而且能确定比特串的错误位置,从而加以纠正。

因此,差错控制又可分为检错编码(Error-Detecting Code)和纠错编码(Error-Crrecting Code)

总结:

检错编码(如奇偶校验码、循环冗余码)都只能发现位错,然后用自动重传请求方式(ARQ)来纠正位错及帧错。

纠错编码(如海明码)不仅可以发现位错,还能指出出错的比特位从而进行前向纠错(FEC)

本小节讨论的是这三种编码方法是如何发现位错的。

3.1检错编码

检错编码都采用冗余编码技术,其核心思想是在有效数据(信息位)被发送前,先按某种关系附加一定的冗余位,构成一个符合某一规则的码字后再发送。

3.1.1奇偶校验码

 奇偶校验码是奇校验码和偶校验码的统称

  • 奇校验是在待发送的数据后面添加1个校验位,使得添加校验位后整个数据中比特1的个数奇数。
  • 偶校验是在待发送的数据后面添加1个校验位,使得添加校验位后整个数据中比特1的个数偶数。
  • 无论是约定奇校验还是偶校验,如果有奇数个比特位发生误码可以检测出,如果有偶数个比特位发生误码会漏检。

3.1.2循环冗余码(CRC)

Cyclic Redundancy Code,又称多项式码

循环冗余校验CRC的基本思想:

  1.  收发双方约定好一个生成多项式G(X)
  2. 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据后面作为帧检测序列(FCS)一起传输。
  3. 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。

下面两张图片为发送方和操作方的所有操作细节 

 下面两张图片为用实例来解释操作步骤。

 

补充:CRC校验可以用硬件完成。

CRC其实是具有纠错功能,但在数据链路层仅使用了它的检错功能,检测到帧出错后就直接丢弃,是为了方便协议的实现。

有一些特殊的多项式,因为其有很好的特性,而成了国际标准。

3.2纠错编码

在数据通信的过程中,解决差错问题的一种方法是在每个要发送的数据块上附加足够的冗余信息,使接收方能够推导出发送方实际送出的应该是什么样的比特串。

3.2.1海明码

海明距离(码距):码距是一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。比如1000与1111,有三位不一样,码距为3。1000、1111、1001这个编码集的码距为1(即取最小值)

  • 海明码纠错d位(即共有d位发生了差错并能纠正),需要码距为2d+1的编码方案。
  • 检测d位(d=2时,比如1000变为1011,能检测出2位错误,码距最少为3),需要码距为d+1的编码方案。

笔者对码距的理解并不是很深入,只知道海明距离(码距)并不是海明码独有的。

海明码的码距通常为3(可以纠正一位错,或者检测二位错)

海明码的码距还可以为4(可以纠正一位错,同时检测二位错)

可见海明码只能纠正单比特错。

利用海明码纠错的步骤:

  1. 利用海明不等式算出冗余信息位数。
  2. 确定冗余信息位的分布。
  3. 求出冗余信息位的值。
  4. 检错并纠错。

补充:

一般来说,数据的传输差错是由噪声引起的。通信信道的噪声可分为两类:

热噪声:一般是信道固有的,引起的差错是随机差错,可以通过提高信噪比来降低它对数据传输的影响。

冲击噪声:一般是外界电磁干扰引起的,引起的差错是突发差错,它是引起传输差错的主要原因,无法通过提高信噪比来避免。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试题:数据结构和算法

1、时间复杂度解释一下 算法的时间复杂度,用来度量算法的运行时间,记作: T(n) O(f(n))。它表示随着 输入大小n 的增大,算法执行需要的时间的增长速度可以用 f(n) 来描述。 当 T(n) c,c 为一个常数的时候,我们说这个…

[附源码]Python计算机毕业设计Django基于vue+mysql开发的考试系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Java web 2022跟学尚硅谷(九)书城项目

Java web 2022跟学尚硅谷九书城项目需求分析数据库设计ER图书城1.0简单部署项目类图相关代码UserControllerUserDAOImplUserDAOBookCartItemOrderOrderItemUserUserServiceImplUserServiceapplicationContext.xml书城1.1实现功能1. 用户登录2. 首页图书列表展示3. 首页价格筛选…

Vue3-ElemenPlu,全栈开发后台系统1-1-2-9第一章,第二章前端系统架构设计

Vue3+ElementPlus Lo2+MongoDB 菜单按钮权限,JWT认证,审批流,常规的CRUD,模块化,组件化 技术栈: 架构设计,vue3全家桶,koa2, 权限: Role-Based A

[附源码]Node.js计算机毕业设计辅导员班级量化管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

IMX6启动流程

目录 1. 流程图 2. u-boot.imx的构造 1. 流程图 正常情况下,一台IMX6设备的启动路径就是图中自上而下最左边那条路: 启动/复位后先检查CPU的ID(每颗芯片独一无二) ------> 检查复位状态(有没有按下复位键) ------> 检查boot模式(mmc? USB? SPI…

ARM寄存器组织(常见专用寄存器、控制寄存器CPSR)

目录 一、寄存器的概念 1、什么是寄存器? 2、寄存器的分类 3、不同工作模式下使用的寄存器 二、常见专用寄存器 1、R15(PC,Program Counter) 2、R14(LR,Link Register) 3、R13(SP,Stack Pointer&am…

FineReport大数据分析工具- 统一切换轮播图表接口

1. 概述 1.1 版本 报表服务器版本 功能变动 11.0 - 1.2 预期效果 某些场景下,需要让一张报表内的多个轮播图表同时切换。那么该如何实现呢?效果如下图所示: 1.3 实现思路 按钮添加点击事件,通过 JS 脚本调用接口统一切换轮播…

【模拟电路】431基准电压源

项目简介 概述 431电压基准芯片为3脚稳压集成电路,431基准电压源具有良好的热稳定性能的,三端可调分流,也被称为电压调解器或三端取样集成电路。凭借体积小、重量轻、精度高、稳定可靠、基准电压精密可调、输出电流大,且价格便宜…

LightDock、PatchDock蛋白蛋白对接软件linux端命令行使用

本文实在ubuntu下操作 DDB1-CRBN.pdb 、brd4.pdb 是需要对接的两个pdb蛋白文件 1、PatchDock 网页版:https://bioinfo3d.cs.tau.ac.il/PatchDock/php.php PatchDock有网页版,如下;软件版需要申请获取下载链接 参考:https://bioi…

QT4.8.7 打开Mupdf

一.Win10环境 1.Win10 Visual Studio 2017 安装 这个直接安装了 a.打开mupdf 源码 b.编译源码 参考这几个贴子 在Qt中调用Mupdf库进行pdf显示 mupdf-1.17.0 源代码编译、下载 qt vc pdf阅读器 我用的是mupdf-1.11-source的,用VS2017打开会有这个问题 c.修改配…

移植MQTT-C库(附源码)

Software (mqtt.org)中mqtt客户端的c库里面有一个叫MQTT-C的库,就2个实现文件,算比较简单的了,实现了基本的mqtt客户端功能,移植一下试试。 我的移植代码放在我的资源里面:https://download.csdn.net/download/oushao…

BigInteger类和BigDecimal类

BigInteger类 BigInteger适合保存比较大的整型 当在编程中遇到需要保存一个特别大的数字,比如地球的人口。 这时如果用long类型保存可能都不够了,此时就需要用到BigInteger BigInteger不能直接*/add()加subtract()减multiply()乘divide()除 使用演示&…

推荐系统学习笔记-论文研读--渐进分层抽取的多任务学习模型

研究背景 多任务相关性的复杂性和竞争性,MTL模型往往会出 现性能退化和负迁移跷跷板现象,即一项任务的性能往往会因影响其他任 务的性能而得到提高 研究成果 跷跷板现象的发现,MTL由于复杂的内在关联性而没有优于相应的单任务模型从联合表…

[附源码]Node.js计算机毕业设计仿咸鱼二手物品交易系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

11月CPI超预期放缓,下一步加息基调且看今晚

随着2022年最后一次美国“通胀报告”的公布,美联储未来政策走向决议将迎来关键时刻!12月13日晚,美国劳工部公布的报告显示,美国11月CPI同比增长7.1%,超预期放缓,增速低于预期值7.3%和前值 7.7%。美国11月核…

SSM个人饮食管理系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 个人饮食管理系统 网站前台:关于我们、联系我们、新闻信息、食谱信息、交流信息 管理员功能: 1、…

JavaScript(四):流程控制

流程控制if语句if else 语句(双分支语句)if -else if语句(多分支语句)三元表达式switch语句for循环while循环do while 循环continue关键字break关键字if语句 语法结构 if(条件表达式){ //条件成立执行的代…

计算摄影——风格迁移

这一章来总结一下图像风格迁移相关的内容,风格迁移的任务是将一幅图作为内容图,从另外一幅画中抽取艺术风格,两者一起合成新的艺术画,要求合成的作品即保持内容图的主要结构和主体,又能够具有风格图的风格,…

精品spring boot+MySQL新冠物资管理系统vue

《spring bootMySQL新冠物资管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术: 操作系统:Windows 10、Windows 7、Windows 8 开发语言:Java 使用框架:spring boot 前端技术&…