计算机网络:数据链路层 —— 数据链路层的三个重要问题

news2024/11/26 0:32:03

文章目录

    • 数据链路层的重要问题
      • 封装成帧
        • 封装过程
        • 帧的数据载荷
      • 透明传输
        • 实现透明传输
      • 差错检测
        • 传输差错
          • 误码(比特差错)
          • 分组丢失
          • 分组失序
          • 分组重复
        • 奇偶校验
        • 循环冗余校验
          • 生成多项式
          • 方法流程
        • 纠错码

数据链路层的重要问题

封装成帧

在计算机网络中,封装成帧(Frame encapsulation)是数据链路层的一项重要任务。它将从更高层接收到的协议数据单元PDU,如网络层的数据包,添加一个首部和一个尾部,使其转换成数据链路层的帧格式,以便于在物理链路上传输和处理。

帧首部和尾部的作用之一就是帧定界(并不是每一种数据链路层协议的帧都包含有帧定界标志,例如以太网 V2 的 MAC帧

点对点协议 PPP 帧格式:

![[PPP Frame Model.png]]

封装过程

封装成帧的过程通常包括以下步骤:

  1. 帧起始标志(Frame Start Delimiter):在帧的开始处添加一个特定的标志,用于表示帧的开始边界,通常是一个预定义的比特模式(如 01111110)。

  2. 帧头(Frame Header):帧头包含了一些重要的控制信息,如地址、控制字段等,用于识别帧的发送和接收端,以及帧的类型和操作。

  3. 数据字段(Data Field):数据字段是待传输的数据包。它可能包含从更高层传递下来的信息,例如网络层的数据包。

  4. 帧尾(Frame Footer):帧尾通常包含了一些错误检测和纠正的机制,例如循环冗余校验(CRC)、帧检验序列字段(FCS),用于检测传输过程中的比特错误。

帧的数据载荷

为提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度

考虑到对缓存空间的需求以及差错挥制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maxmum Transfer Unit,MTU)。例如,以太网的 MTU 为 1500 个字节

![[Maxmum Transfer Unit,MTU Model.png]]

透明传输

透明传输(Transparent Transmission)是指在数据链路层实现的一种传输方式,其中数据链路层对上层传输的数据不做任何修改或解释。也就是说,数据链路层对上层交付下来的协议数据单元 PDU 没有任何限制,就好像数据链路层不存在一样。传输的数据在链路层保持不变,原样传输到接收端。

透明传输的特点是,上层协议可以自由地将数据传递给数据链路层,而不必考虑链路层的具体实现和细节。这样可以更加灵活地使用不同的上层协议,而不受数据链路层的限制。

实现透明传输

一般原理性方法方法:

  • 面向字节的物理链路使用字节填充的方法实现透明传输:在把帧交付给物理层之前,会对帧的数据载荷进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符(长度为一个字节,十进制为 27)

  • 面向比特的物理链路使用比特填充的方法实现透明传输:发送方的数据链路层在把帧交付给物理层之前,会对帧的数据载荷进行扫描,只要出现 5 个连续的比特 1,就在其后填入一个比特 0(零比特填充法)。接收方的数据链路层在把数据载荷向上交付网络层之前,会对帧的数据载荷进行扫描,每当发现连续的 5 个 比特 1,就把其后的一个比特 0 删除。

为了实现透明传输,数据链路层通常会使用特定的编码和解码技术,以确保传输数据的唯一性和完整性。这些技术包括差错检测帧起始标志帧长度字段等,以便在接收端正确地识别和处理接收到的数据。

差错检测

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错)比特 1 可能变成比特 0;比特 0 可能变成比特 1

使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

传输差错
  • 误码出现在数据链路层及其下层

  • 分组丢失、分组失序、分组重复出现在数据链路层的上层

误码(比特差错)

比特差错也称为误码

如发送方的数据链路层采用某种检错技术,根据帧的内容计算出一个检错码,将检错码填入帧尾部。接收方的数据链路层从帧尾部取出检错码,采用与发送方相同的检错技术,根据检错码检测出帧在传输过程中是否出现了误码。帧尾部中用于存放检错码的字段称为帧检验序列FCS

比特流在传输过程中可能受到噪声干扰,传输媒体质量等因素的影响而出现比特差错。在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate, BER

提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零,使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

分组丢失

分组丢失(Packet Loss):在数据传输过程中,有时候数据包可能会在传输过程中丢失,这可能是由于网络拥塞、路由器故障、路由器输入队列将满、或者其他网络问题导致的。分组丢失可能会导致通信中断或数据不完整。

分组失序

分组失序(Packet Reordering):数据包在传输过程中可能会因为网络路由不同而导致顺序被打乱,即数据包到达的顺序与发送时的顺序不一致。这可能是由于网络拓扑变化或者不稳定路由引起的。分组失序可能会导致数据包在接收端无法正确重组,从而影响数据的正确性。

分组重复

分组重复(Packet Duplication):有时候,数据包可能会在网络中重复传输,这可能是由于路由器繁忙分组在输入队列中等待较长时间,导致主机对该分组进行超时重发。分组重复可能会导致数据冗余或者应用程序收到重复数据。

奇偶校验
  • 奇校验是在待发送的数据后面添加 1 个校验位,使得添加该校验位后的整个数据中比特 1 的个数为奇数

![[Odd Parity Check.png]]

  • 偶校验是在待发送的数据后面添加 1 个校验位,使得添加该校验位后的整个数据中比特 1 的个数为偶数

![[Even Parity Check.png]]

  • 在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码

  • 在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,无法检测出误码(漏检)

在实际使用时,奇偶校验又可分为垂直奇偶校验、水平奇偶校验以及水平垂直奇偶校验

循环冗余校验

数据链路层广泛使用漏检率极低循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。

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

发送方 CRC 操作

![[Sender CRC.png]]

接收方 CRC 操作

![[Receiver CRC.png]]

生成多项式

循环冗余算法要求生成多项式必须包含最低次项

若有如下生成多项式: G ( X ) = X 4 + X 2 + X + 1 = 1 ∗ X 4 + 0 ∗ X 3 + 1 ∗ X 2 + 1 ∗ X 1 + 1 ∗ X 0 \begin{equation} \begin{aligned} G(X) &= X^4+X^2+X+1\\&=1*X^4+0*X^3+1*X^2+1*X^1+1*X^0 \end{aligned} \end{equation} G(X)=X4+X2+X+1=1X4+0X3+1X2+1X1+1X0
生成多项式各项系数构成的比特串 10111 为计算冗余码时所用到的除数

常用的生成多项式:

CRC-16 = X 16 + X 15 + X 2 + 1 X^{16} + X^{15} + X^{2} + 1 X16+X15+X2+1,简记式 8005

CRC-CCITT = X 16 + X 12 + X 5 + 1 X^{16} + X^{12} + X^{5} + 1 X16+X12+X5+1,简记式 0x1021

CRC-32 = X 32 + X 26 + X 23 + X 22 + X 16 + X 12 + X 11 + X 10 + X 8 + X 7 + X 5 + X 4 + X 2 + X 1 + 1 X^{32} + X^{26} + X^{23} + X^{22} + X^{16} + X^{12} + X^{11} + X^{10} + X^{8} + X^{7} + X^{5} + X^{4} + X^{2} + X^{1} + 1 X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1,简记式 0x04C11DB7

方法流程

发送方

  1. 构造“被除数”,待发送数据后面添加生成多项式最高次数个0

  2. 构造“除数”,生成多项式各项系数构成的比特串作为除数

  3. 做“二进制模2除法”,相当于对应位进行逻辑异或运算

  4. 检查“余数”,余数的位数应与生成多项式最高次数相同如果位数不够,则在余数前补0来凑足位数。

  5. 将冗余码添加到待发送数据的后面进行发送。

![[CRC发送计算.png]]

接收方

  1. 构造“被除数”,接收到的信息作为被除数

  2. 构造“除数”,生成多项式各项系数构成的比特串作为除数

  3. 做“二进制模2除法”,相当于对应位进行逻辑异或运算

  4. 检查“余数”,余数为0可认为传输过程无误码;余数不为0,可认为传输过程产生了误码

![[CRC计算.png]]

纠错码

奇偶校验、循环冗余校验等差错检测技术,只能检测出传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。要想纠正传输中的差错,可以使用冗余信息更多的纠错码(例如海明码)进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。

在计算机网络中,通常采用检错重传方式来纠正传输中的差错(可靠传输服务),或者仅仅丢弃检测到差错的帧(不可靠传输服务),这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。

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

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

相关文章

基于Java+SpringBoot+Uniapp的博客系统设计与实现

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

Jenkins整合Docker实现CICD自动化部署(若依项目)

前期准备 提前准备好jenkins环境 并且jenkins能使用docker命令,并且已经配置好了jdk、node、maven环境,我之前写了安装jenkins的博客,里面讲得比较详细,推荐用我这种方式安装 docker安装jenkins,并配置jdk、node和m…

【分布式架构】分布式事务理论与实践

一、分布式事务理论 1. ACID理论 场景:单机架构中保证事务的理论 2. CAP理论 场景:分布式架构中保证事务的理论 概念 一致性:数据在不同的节点每一时刻都是一致的可用性:一部分的节点出现异常,但是系统仍然可用分…

【3dgs】3DGS与NeRF对比

以下是 3DGS(3D Geometry Sensing)与 NeRF(Neural Radiance Fields)对比表格: 更加详细的资料,轻参考: NERF/3DGS 对比维度3DGS (3D Geometry Sensing)NeRF (Neural Radiance Fields)基本原理…

【Linux进程信号】Linux信号产生机制详解:掌握系统通信的关键

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 ❀Linux进程信号 📒1. 信号入门📜2. 信号捕捉初识📚3. 信号…

Windows应急响蓝安服面试

Windows应急响应 蓝队溯源流程 学习Windows应急首先要站在攻击者的角度去学习一些权限维持和权限提升的方法.,文章中的方法其实和内网攻防笔记有类似l红队教你怎么利用 蓝队教你怎么排查 攻防一体,应急响应排查这些项目就可以 端口/服务/进程/后门文件都是为了权限维持,得到s…

linux安装hadoop

目录 jdk安装配置 hadoop安装 hadoop配置 配置ssh免密登录 启动hadoop 实现文件上传下载 eclipse安装配置 jdk安装配置 1、删除centos自带的jdk yum list installed | grep java yum remove *openjdk* 2、下载jdk安装包 wget --no-check-certificate https://repo.h…

InternVid:用于多模态视频理解与生成的大规模视频-文本数据集 | ICLR Spotlight

InternVid 是一个开源的大规模视频-文本数据集,旨在促进视频理解和生成任务的发展,由上海人工智能实验室与南京大学、中国科学院等单位联合发布,相关的工作已经被ICLR2024接收。它包含超过 700 万个视频,总时长近 76 万小时&#…

位操作位操作位操作

呵呵哈哈哈哈哈哈哈哈哈和哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

MySQL—视图

前言: 视图是一个虚拟的表,是基于一个或多个基本表或其他视图的查询结果集。视图本身不占据物理储存空间,仅仅只是一个查询的逻辑表示,物理上依赖于数据表的数据。 视图具有简单,安全,逻辑数据独立&#…

CST软件优化超表面--- 偏振片- 线圆极化转换,天线阵任务,远场算轴比AR

本期我们继续看线极化转圆极化。本案例是个三层结构,比单层的偏振片有更宽的频率和更少的反射。我们将利用CST的天线阵列任务中的单元任务,加上优化器优化,使偏振片在多个入射角、多个频率,S11反射都够小,AR都够圆。 …

Spark-RDD的宽窄依赖以及Shuffle优化

目录 RDD宽窄依赖的区别 DAG有向无环图 窄依赖 宽依赖 shuffle过程 Shuffle介绍 Spark优化-避免shuffle RDD宽窄依赖的区别 窄依赖 每个父RDD的一个Partition最多被子RDD的一个Partition所使用 mapflatMapfilter宽依赖 一个父RDD的Partition会被多个子RDD的Partition所使…

LCD补充

LCD补充 目录 LCD补充 tip:随着我们学的越来越多,代码长度越来越长,编译越来越慢,有没有超过内存是我们比较关心的一件事,通过以下方法可以实时看到写的代码的大小 回顾LCD LCD补充功能 -- 1、有关在LCD上显示动图&#xff…

Python库matplotlib之九

Python库matplotlib之九 动画ArtistAnimation构造器成员函数应用例子 动画 Matplotlib基于其绘图功能,还提供了一个使用动画模块,生成动画的接口。动画是一系列帧,其中每个帧对应于图形上的一个图。 Matplotlib使用两个类来实现动画&#x…

ordinaryroad-barrage-fly wsl部署记录

系统:win11 wsl版本:wsl2 Linux:Ubuntu 22.04.4 LTS 文档:https://barragefly.ordinaryroad.tech/deploy/#_2-1-docker-compose docker相关的内容自己事先安装好 git clone https://github.com/OrdinaryRoad-Project/ordinaryr…

TensorBoard

1、概念 TensorBoard可以看作是一个“训练监控仪表盘”,可以 将训练过程中的数据可视化,让你通过图表直观地看到模型的表现, 识别问题,并进行调试和优化。 TensorFlow是用来训练模型的深度学习框架,在使用tensorflo…

基于SpringBoot+Vue的疫情物资管理系统(带1w+文档)

基于SpringBootVue的疫情物资管理系统(带1w文档) 基于SpringBootVue的疫情物资管理系统(带1w文档) 本课题研究和开发疫情物资管理系统管理系统,让安装在计算机上的该系统变成管理人员的小帮手,提高疫情物资管理系统信息处理速度,规范疫情物资…

内网wordpress更换IP后无法访问的解决办法

一、现象 一台装有wordpress的台式机,从一个校区移到了另一个校区,更换了IP地址,导致无法正常访问。 二、分析 安装wordpress的时候里面的ip(或域名)都已固定。安装好后,内网通过IP访问&am…

基于Maven 运行OpenRewrite的快速示例

本篇介绍一个基于Maven 运行OpenRewrite 的快速示例,展示了如何在Maven项目中使用OpenRewrite 进行代码重构。 本篇达成的效果是使用OpenRewrite 对源码自动格式化。 达成效果期望 项目中有一个类AutoFormatDemo ,类的代码如下 public class AutoFor…

ubuntu24 root用户修改密码 ubuntu新系统没有创建root用户

ubuntu 系统在虚拟机新建一个ubuntu24,但是在配置系统时候,并没有配置root密码,只是新增了一个自定义账号于密码,在创建好后,可以登录系统,设置root密码~ 1. ubuntu系统初始化后,登录自建账号 …