计算机网络——数据链路层(差错控制)

news2024/12/23 4:25:10

计算机网络——数据链路层(差错控制)

  • 差错从何而来
  • 数据链路层的差错控制
    • 检错编码
      • 奇偶校验码
      • 循环冗余校验(CRC)
        • FCS
    • 纠错编码
      • 海明码
      • 海明距离
      • 纠错流程
        • 确定校验码的位数r
        • 确定校验码和数据位置
      • 求出校验码的值
      • 检错并纠错

我们今年天来继续学习计算机网络数据链路层这一小节的内容,我们今天主要来看数据链路层中关于数据控制与纠错——差错控制

差错从何而来

计算机网络中数据链路层出现的差错主要来源于以下几个方面:

  1. 噪声
  • 全局性噪声:这类噪声源于通信信道自身的电气特性,如随机热噪声,这是由于导体内部电子的热运动导致的,这种噪声具有随机性和持续性,是信道固有属性,难以完全避免。为了减少此类噪声的影响,通常采取提高信噪比的方法,例如使用更好的物理介质、增强信号强度或采用更先进的信号处理技术。
  • 局部性噪声:这类噪声是由于外部环境中的短暂事件引起,如电磁干扰(EMI)、闪电、电源波动或其他瞬态现象产生的冲击噪声。这类噪声往往突发性强,可能会导致短时间内大量数据位发生错误。针对这类噪声,常通过使用各种编码技术来进行差错检测和纠正,比如循环冗余校验(CRC)、前向纠错码(FEC)等。
  1. 硬件故障:包括但不限于电缆破损、接头松动、接口失效、传输设备老化等问题,这些都可能导致信号失真或错误。
  2. 信号衰减与畸变:随着信号在传输过程中的距离增加,其振幅、频率和相位可能逐渐衰减或发生改变,特别是在长距离传输和无线传输时,这种现象更为显著,从而导致接收端解码出错。
  3. 多径效应:对于无线通信而言,信号可能经过多个路径到达接收端,各个路径的信号相互叠加,可能会引入差错。
    在这里插入图片描述

同时差错的分类:
在计算机网络中,数据链路层可能出现的差错大致可以分为以下几类:

    1. 单比特错误(Single-Bit Error):
      这是最基本的错误类型,指在数据传输过程中,单个比特(bit)由于噪声或者其他原因发生了反转,即1变成了0或者0变成了1。
    1. 多比特错误(Multiple-Bit Error):
      指在一个数据单元内(如一个字节、一个码字)同时有两个或更多比特发生了错误。
    1. 突发错误(Burst Error):
      在数据流中相邻的一段比特序列中出现连续的错误。突发错误经常由传输通道中的突发噪声或信号暂时失去同步等原因造成。
    1. 帧丢失(Frame Loss):
      整个数据帧在传输过程中未能成功到达接收端,可能是由于严重的信号干扰、硬件故障或网络拥塞等原因导致。
    1. 帧重复(Frame Duplication):
      同一数据帧在传输过程中被意外地重复发送多次。
    1. 帧乱序(Frame Misordering):
      序列传输的数据帧在接收端收到了正确的帧,但它们的顺序与发送时的顺序不一致。
    1. 数据位滑动(Bit Slipping):
      在同步传输系统中,如果接收端与发送端的时钟频率稍有差异,可能会导致接收端采样点发生偏移,进而产生位滑动错误。

差错控制技术设计时会根据不同的错误类型选择合适的检错和纠错编码方案,例如奇偶校验、循环冗余校验(CRC)用于检测单比特或多比特错误,而更复杂的编码如卷积码、级联码、交织码和海明码等可以用来检测并纠正突发错误。对于帧丢失、重复和乱序问题,则需要依靠协议栈中的相关机制进行管理,如序列号、确认应答、超时重传等手段。

综上所述,数据链路层在设计差错控制机制时,需要考虑到这些潜在的错误来源,并通过适当的编码、检错和纠错算法以及重传策略来保证数据的正确传输。

数据链路层的差错控制

数据链路层的差错控制主要包括以下几个方面的技术和方法:

    1. 检错编码
      奇偶校验:通过对数据添加额外的校验位,使得所有位数的总和是奇数或偶数,接收方可以通过重新计算校验和来判断是否有错误。
      循环冗余校验(CRC):是一种更强大的检错方法,它通过附加一个冗余码(CRC码)到原始数据块后面,然后通过数学算法在接收端验证CRC值是否相符,以此来检测帧中的错误。
    1. 纠错编码
      前向纠错(FEC):通过使用特殊的编码技术(如Hamming码、BCH码、RS码、Turbo码或LDPC码等),不仅可以检测错误,还可以在一定范围内纠正错误,无需等待重传。
      在这里插入图片描述

检错编码

奇偶校验码

奇偶校验码(Parity Check Code)是一种简单的错误检测编码方法,主要用于在数据传输或存储过程中检测数据的完整性。奇偶校验码通过在原始数据位之后或之中增加一个校验位(也称为奇偶校验位),使得包含校验位在内的所有“1”的个数要么是奇数(奇校验),要么是偶数(偶校验)

具体来说:

  • 奇校验:如果原始数据位中“1”的个数是偶数,则校验位设置为“1”,使得整个数据块(原始数据位+校验位)中“1”的总数成为奇数。如果原始数据位中“1”的个数已经是奇数,则校验位设为“0”。
  • 偶校验:与此相反,若原始数据位中“1”的个数是奇数,则校验位设为“1”以保证总“1”的个数为偶数;若原始数据位中“1”的个数已经是偶数,则校验位设为“0”。

奇偶校验码的主要优点在于实现简单,占用资源少。然而,它也有明显的局限性:

  1. 它只能检测出单个比特错误,也就是说,如果数据在传输过程中恰好只有一位发生变化,那么奇偶校验可以在接收端检测出这一错误。
  2. 当传输过程中出现两个或两个以上的比特错误时,奇偶校验可能无法检测出来,因为它无法区分单比特错误和多比特错误对“1”的总数的影响。

举一个例子:

假设我们有一个8位的数据串 “1010 0110”,现在我们要给这个数据串添加一个奇校验位,以确保整个数据块中"1"的个数为奇数。
首先,我们需要计算当前8位数据中"1"的个数。在这个例子中,共有4个"1"。由于我们想要的是奇数个"1",而现在已经有偶数个"1"(4个),所以我们需要在最后添加一个"1"作为奇校验位于是,加上奇校验位后的完整数据串就变成了 “1010 0110 1”

在数据接收端,对于带有奇校验位的数据串 “1010 0110 1” 的奇偶校验检查步骤如下:
接收端收到完整的数据帧后,将奇校验位与原始8位数据合并考虑。
计算整个数据帧(包括原始数据位和奇偶校验位)中 “1” 的个数。
根据奇校验的原则,如果计算得出的 “1” 的个数是奇数,则认为校验通过,数据没有发生错误
如果计算得出的 “1” 的个数是偶数,则意味着数据在传输过程中可能发生了错误,因为按照奇校验规则,应该是一个奇数个 “1”,但现在却成了偶数个。
在这个例子中,接收端计算 “1010 0110 1” 中 “1” 的个数,发现共有5个 “1”,满足奇校验的要求,因此校验结果表明数据正确传输,无误。

对于奇偶校验码,只能检测单位出错,而不能检测多位出错的原因如下:

假设我们有一个4位的数据字1011,并决定使用偶校验。为了保持1的总数为偶数(或奇数,取决于我们选择的是偶校验还是奇校验),我们需要在数据后面添加一个校验位。在这个例子中,数据字中已经有3个1了(奇数个),所以我们需要添加一个1作为校验位,使得1的总数变为偶数。
原始数据字:1011
添加偶校验位后(假设校验位加在末尾):10111(此时1的个数为4,是偶数,满足偶校验的要求)
现在,假设在传输过程中发生了两位错误,数据变为了11011。如果我们用偶校验来检查这个数据:11011中1的个数仍然是4,是偶数,满足偶校验的要求。因此,从偶校验的角度来看,这个数据似乎是正确的。但是,实际上它包含了两位错误。这就是奇偶校验码不能检测多位错误的原因。它只能告诉我们数据中1的总数是奇数还是偶数,而不能告诉我们错误的具体位置或数量。
在这里插入图片描述

为了检测多位错误,我们需要使用更复杂的校验方法,如循环冗余校验(CRC)等。这些方法通过添加更多的校验位和使用更复杂的算法来提供更强大的错误检测能力。

循环冗余校验(CRC)

循环冗余校验(Cyclic Redundancy Check, CRC)是一种广泛应用在数据通信和存储系统中的错误检测编码技术。相较于简单的奇偶校验,CRC提供了更强的错误检测能力,尤其适用于检测并定位突发错误。

CRC工作原理的核心是利用一个预先定义好的多项式(称为生成多项式)对数据进行模2除法操作,生成一个固定长度的校验码(CRC码),并将这个校验码附加到数据块的末尾。当数据在传输过程中可能发生错误时,接收端重新计算接收到的数据块的CRC校验码,并与接收到的校验码进行比较。如果两者相符,则认为数据传输正确;如果不符,则表示数据在传输过程中出现了错误

具体步骤如下:

  1. 初始化CRC寄存器:选择一个预设长度的二进制寄存器(通常是16位或32位),并填充初始值(通常是全1或全0)。
  2. 数据位处理:将待校验的数据从最高位到最低位逐位(或按指定字节顺序)与CRC寄存器内的值进行异或(XOR)操作,然后将结果向左移一位(相当于模2除法中的除法操作)。
  3. 除法运算:每次左移后,如果最高位是1,则还需要与生成多项式的二进制表示进行异或(相当于模2除法的减法步骤),直到所有的数据位都被处理完。
  4. 得到CRC校验码:最终留在CRC寄存器内的数值即为CRC校验码,将其添加至原始数据的末尾。
  5. 接收端校验:接收端收到带有CRC校验码的数据块后,独立地对该数据块重新计算CRC校验码,并与收到的CRC校验码进行对比,若二者相同则表示数据传输无误。
    在这里插入图片描述

CRC的一个关键特性是其能够检测到多位错误,而且在特定条件下还能一定程度上检测到突发错误。不同的CRC算法使用的生成多项式不同,每种生成多项式对应着不同的CRC校验标准,如CRC-16、CRC-32等。这些标准因其在数据安全和效率上的平衡而广受青睐。
在这里插入图片描述

FCS

上面还有一个概念FCS:

FCS(Frame Check Sequence)是指帧校验序列,它是数据链路层用于错误检测的一种方法,类似于CRC(循环冗余校验)。FCS通常被包含在一个数据帧的尾部,作为该帧数据完整性和准确性的校验码。
在数据链路层协议中,如以太网Ethernet、HDLC(高级数据链路控制)、PPP(点对点协议)等,FCS都是必不可少的一部分。发送方会在每个数据帧后面附加上根据特定算法计算出的FCS,接收方在接收到整个帧后会重新计算FCS并与接收到的FCS进行比较。如果两者一致,则表明该帧在传输过程中没有发生错误或者错误在纠错范围内;如果不一致,则说明数据帧在传输过程中可能受到了损坏,接收方可能会丢弃该帧。
FCS的具体计算方法可以采用多种错误检测算法,其中CRC算法是最常用的实现方式之一。在以太网中,FCS就是基于CRC-32算法计算得出的32位校验值,而在PPP协议中,既可以使用CRC-16也可以使用其他类型的FCS算法。

举个栗子:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

但是注意一下:
在这里插入图片描述

纠错编码

海明码

海明码(Hamming Code)是由美国科学家理查德·卫斯里·海明(Richard W. Hamming)于1950年发明的一种线性纠错码。海明码是一种能够同时检测并纠正单个比特错误的编码方法,特别适用于存储和通信领域,以提高数据的可靠性。
海明码的基本思想是在原始数据位的基础上增加若干校验位(也称作冗余位),形成一个新的编码字。这些校验位被巧妙地分布在编码字的不同位置上,每个校验位负责监督一组特定的数据位,通过计算这些数据位的异或(XOR)值来确定校验位的值
当数据在传输或存储过程中发生错误时,海明码能够通过比较接收到的编码字中各个校验位与其负责监督的数据位之间的关系,准确地定位出发生错误的比特位置,并在某些情况下直接修正单比特错误。
在这里插入图片描述

海明距离

海明距离(Hamming Distance)是指两个等长字符串之间对应位置上不同字符的个数。在信息论和编码理论中,尤其是在讨论纠错编码时,这个概念非常关键。它以其发明者理查德·哈明的名字命名。
具体来说,如果我们有两个二进制序列
A=a1​a2​…anB = b1b2…bn ,它们长度都是 ( n ),那么这两个序列的海明距离 ( H(A, B) ) 就是:
( ˝ A , B ) = ∑ i = 1 n ∣ a i − b i ∣   \H(A, B) = \sum_{i=1}^{n} |a_i - b_i|\ (˝A,B)=i=1naibi 
由于这里考虑的是二进制数,所以只有两种可能的结果:要么是 0,要么是 1(如果它们不同)。因此,海明距离实际上就是两个序列不相同的比特位的数量。
在这里插入图片描述
在纠错编码中,比如海明码,设计的目的是确保任何两个合法编码(即没有错误的编码)之间的海明距离至少达到某个最小值,这样就能保证即使有单个比特错误发生,也能通过比较接收码与预期码之间的海明距离来发现并纠正该错误。

纠错流程

确定校验码的位数r

海明不等式给出了构造纠错码时数据位数(n)、校验位数®以及可纠正错误位数(t)之间的关系。海明不等式表达为:
2 k ≥ ( n + 1 ) 2^{k} \geq(n+1) 2k(n+1)
其中,kk 是信息位数(等于原始数据位数),nn 是编码后的码字长度(包括信息位和校验位)
或者:
2 k ≥ m + k + 1 {2^k} \ge {m + k+1} 2km+k+1
在这里插入图片描述

确定校验码和数据位置

在这里插入图片描述在这里插入图片描述

求出校验码的值

在这里插入图片描述

检错并纠错

在这里插入图片描述在这里插入图片描述

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

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

相关文章

C#打印50*30条码标签

示例图: 源码下载地址:https://download.csdn.net/download/tiegenZ/89035407?spm1001.2014.3001.5503

【Java程序设计】【C00379】基于(JavaWeb)Springboot的旅游服务平台(有论文)

【C00379】基于(JavaWeb)Springboot的旅游服务平台(有论文) 项目简介项目获取开发环境项目技术运行截图 博主介绍:java高级开发,从事互联网行业六年,已经做了六年的毕业设计程序开发&#xff0c…

STM32F103 CubeMX 使用USB生成键盘设备

STM32F103 CubeMX 使用USB生成键盘设备 基础信息HID8个数组各自的功能 生成代码代码编写添加申明信息main 函数编写HID 修改1. 修改报文描述符2 修改 "usbd_hid.h" 中的申明文件 基础信息 软件版本: stm32cubmx:6.2 keil 5 硬件:…

【剑指offer】顺时针打印矩阵

题目链接 acwing leetcode 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 数据范围矩阵中元素数量 [0,400]。 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出:[1,2,3,4,8,12,11,10,9,5,6,7] 解题 …

MySQL【三】操作数据库基础

库、表、记录的概念 库(Database):库是一个容器,用于存储表和其他对象(如视图、存储过程等) 表(Table):表是一个由列和行组成的矩阵,其中每列都定义了表中的…

MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误

参考MQTT.fx和MQTTX 链接ONENET物联网开发平台避坑细节干货。_mqttx和mqttfx-CSDN博客 在输入password和username后还是提示错误,是因为在使用token的时候,key填写错误,将设备的密钥填入key中

webpack练习之手写loader

手写一个style-loader来把样式文件插入head里面,准备工作 vue webpack就自己弄了,webpack的一些配置也自己配置好 一、创建index.css文件 .box{width: 100px;height: 100px;background-color: red; }然后在vue的main.js文件中引入它 二、创建自定义l…

MyBatis-Plus分页接口实现教程:Spring Boot中如何编写分页查询

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

港大新工作 HiGPT:一个模型,任意关系类型 !

论文标题: HiGPT: Heterogeneous Graph Language Model 论文链接: https://arxiv.org/abs/2402.16024 代码链接: https://github.com/HKUDS/HiGPT 项目网站: https://higpt-hku.github.io/ 1. 导读 异质图在各种领域&#xf…

云原生靶场kebernetesGoat、Metarget

靶场 文章目录 靶场kebernetesGoat靶场安装Docker in DockerSSRF漏洞容器逃逸到主系统Docker CIS 基线分析Kubernetes CIS 安全基线分析分析被部署挖矿软件的容器镜像获取环境信息Hidden in layersRBAC最低权限配置错误使用 Sysdig Falco 进行运行时安全监控和检测 Metarget ke…

UE5、CesiumForUnreal实现海量POI撒点显示与聚合功能

1.实现目标 POI是UE+GIS三维场景中经常需要展示的要素,在UE中常用的表示POI方法有两种。一种是Mesh,即空间的方式;另一种是Widget,即屏幕上的方式,本文这里使用的是Widget屏幕展示的形式来表示POI。 本文这里使用的POI点位数量共3.3w+,采用直接网格聚合算法,并进行性能优…

ROS机器人入门第四课:话题通信

文章目录 ROS机器人入门第四课:话题通信一、话题通信概述(一)概念(二)作用 二、话题通信基本操作需求:分析:流程:(一)发布方解释一些关键的ROS函数和概念: (二&#xff0…

2024年福建事业单位招聘详细流程

2024年福建事业单位招聘详细流程,速速查收!

湖北汽车工业学院 实验一 关系数据库标准语言SQL

头歌 实验一 关系数据库标准语言SQL 制作不易!点个关注呗!为大家创造更多的价值! 目录 头歌 实验一 关系数据库标准语言SQL**制作不易!点个关注呗!为大家创造更多的价值!** 第一关:创建数据库第…

简单服务器通信、IO多路复用(select、poll、epoll)以及reactor模式。

网络编程学习 简单服务器通信TCP三次握手和四次挥手三次握手(如下图)常见问题? 四次挥手 client和server通信写法server端client端 通信双方建立连接到断开连接的状态转换怎么应对多用户连接?缺点 IO多路复用select优缺点 pollpol…

算法---动态规划练习-5(下降路径最小和)

下降路径最小和 1. 题目解析2. 讲解算法原理方法一方法二 3. 编写代码法一法二 1. 题目解析 题目地址:点这里 2. 讲解算法原理 方法一 首先,通过matrix的大小确定矩阵的行数m和列数n。 创建一个大小为(m1) (n2)的二维动态规划数组dp,其中d…

OC 技术 苹果内购

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…

2022 年甘肃省职业院校技能大赛 高职组 网络系统管理竞赛 网络构建模块试题

2022 年甘肃省职业院校技能大赛 高职组网络系统管理竞赛 网络构建模块试题 目 录 考试说明… 3 任务描述… 3 任务清单… 3 (一)基础配置… 3 (二)有线网络配置… 4 (三)无线网络配置… 6 (四&a…

惊艳亮相!新版飞桨星河社区邀您共赴星辰大海

亲爱的开发者们: 一场始于好奇、归于热爱的邂逅,让开发者们在飞桨星河社区相聚,相逢于活动、课程、比赛、项目……五年来,千万开发者的共同参与,让这个社区更富活力、更加温暖。 2018年,AI Studio 1.0版本上…

RHCE- 4-Web服务器(2)

基于https协议的静态网站 概念解释 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。 HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中…