2.3数据链路层01

2.3数据链路层

2.3.1数据链路层概述

1、数据链路层在网络体系结构中所处的地位

如下图所示:主机H1给主机H2发送数据,中间要经过三个路由器、电话网、局域网、广域网等多种网络。
在这里插入图片描述
从五层协议原理体系结构的角度来看,主机应该具有体系结构中的各个层次,而路由器只需要具有体系结构中的网络层、数据链路层、物理层。网络中的各个设备通过传输媒体进行互连,主机H1将需要发送的数据逐层封装后通过物理层将构成数据包的各个比特转换为电信号发送到传输媒体,数据包进入到路由器后,从下往上逐层解封到网络层,路由器根据数据包的目的网络地址自身的转发表确定数据包的转发端口,然后从网络层向下逐层封装数据包,最后通过物理层将数据包发送到传输媒体,最后到达主机H2,主机H2在接收到数据包后再逐层解封。
在这里插入图片描述

当我们研究数据链路层时,我们可以只关心数据链路层,而不考虑其他各层。我们可以想象,数据只在数据链路层从左至右沿水平方向传送。从数据链路层来看,主机H1到主机H2的通信可以看作是在4段不同的链路上的通信所组成的。
在这里插入图片描述

所谓的链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。要在链路上传输数据,仅有链路还不够,还需要一些通信协议来控制这些数据的传输,如果把实现这些协议的硬件和软件加到链路上就构成了数据链路(DataLink)

在数据链路上传输的数据包,又称为。(数据链路层是以帧作为单位传输和处理的)
在这里插入图片描述
注意:结点就是网络中的一台主机
数据链路层的协议有很多种,但是有三个基本问题是共同的。这三个基本问题就是:封装成帧、透明传输和差错检测

2.3.2 封装成帧

封装成帧是指数据链路层给上层交付的协议数据单元添加帧头帧尾使之成为帧。
数据链路层的上层是网络层,数据在5层协议体系结构中的传输是逐层封装的。

  • 帧头和帧尾中包含有重要的控制信息
    以太网V2的MAC帧:前14个字节是帧头,后4个字节是帧尾
    目的地址和源地址都是MAC地址
    PPP帧:前5个字节是帧头,后3个字节是帧尾
    在这里插入图片描述

  • 帧头和帧尾的作用之一就是帧定界

    • 例如:PPP帧的第一个字节和最后一个字节就是帧定界,通过这两个字节就能够从物理层交付的比特流中提取出一个一个的帧。
      在这里插入图片描述
  • 并不是每种数据链路层协议的帧都包含有帧定界标志,例如MAC帧在帧头和帧尾中是没有包含帧定界的标志的,那么接收方是如何从物理层交付的比特流中提取出一个个的以太网帧的呢?
    知道怎么打包就知道怎么解包
    数据链路层封装MAC帧的步骤:

    • 第一步:数据链路层封装好MAC帧,将其交付给物理层。
    • 第二步:物理层在MAC帧的前面添加8字节的前导码,前导码的前7个字节为前同步码,其作用是使接收方的时钟同步,之后的1个字节为帧开始定界符,表明其后紧跟着的就是MAC帧。
      在这里插入图片描述

2.3.3透明传输

1、透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。

  • 当数据帧中的数据是帧定界标志时,发送端的数据链路层该如何处理呢?
    • 当物理链路提供的是面向字符的传输服务时(物理链路以字符为单位传输数据)
      SOH表示帧头,EOT表示帧尾
      在这里插入图片描述

      网络层传输的数据通常使用数据包(Packet)进行传输。数据包是在传输层(Transport Layer)上封装了网络层(Network Layer)的数据,并添加了一些必要的控制信息。

      在数据包中,每个数据包通常包含了帧头(Frame Header)和帧尾(Frame Footer)作为边界标识。帧头和帧尾的目的是帮助接收端正确解析和提取数据,以便恢复原始的传输数据。
      上图所示意思为:网络层传输的数据中有与帧尾相同的内容,可能会导致接收端在解包时出现错误。这种情况被称为帧同步错误(Frame Synchronization Error),即接收端无法准确地确定帧的起始和结束位置,从而导致数据解析错误。

      解决办法:
      数据链路层在交付数据给物理层时,对帧进行扫描,首先扫描到SOH,然后每扫描到一个SOH或者EOT就在前面加转义字符ESC,直至扫描到最后一个EOT,这种方式称之为:字节填充(byte stuffing)或字符填充(character stuffing)
      在这里插入图片描述
      接收端的数据链路层在将数据送往网络层之前删除插入的转义字符

    • 当物理链路提供的是面向比特的传输服务时(物理链路以比特为单位传输数据)
      在这里插入图片描述
      在数据发送前采用零比特填充法:对数据进行扫描,每5个连续的比特1后面就插入1个比特0
      在这里插入图片描述

考研真题:
在这里插入图片描述

2、为了提高帧的传输效率,应当使帧的数据部分IP数据报)的长度尽可能大些,即减少封装次数。
3、考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(MaximumTransferUnit)。
在这里插入图片描述

2.3.4差错校验

1、实际的通信链路都不是理想的,比特流在传输过程中由于受到各种干扰可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错,或者称为误码
在这里插入图片描述

2、一段时间内,传输错误的比特占所传输比特总数的比率称为误码率Bit Error Rate)

3、接收方是如何知道数据在传输的过程中出现差错了呢?使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

4、在封装好的帧中利用若干个字节表示帧校验序列FCS字段。FCS:Frame Check Sequence(帧校验序列)。FCS字段由一些差错校验算法计算得出,常用的校验算法为:循环冗余校验CRC(Cyclic Redundancy Check)。
5、接收方在接收到数据后计算出一个FCS,然后将计算得出的FCS与接收到的数据帧中的FCS进行比较。
在这里插入图片描述
数据载荷是网络层封装后的ip报文

由于判断FCS是否正确只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。接收方可以通过检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务

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

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

相关文章

数据结构初阶之插入排序与希尔排序详解

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞,评论,收藏。 一起努力,共赴大厂。 目录 一.前言 二.插入排序 …

深入浅出Pytorch宝典1.0

文章目录 前言1. 张量操作2. 自动微分3. 数据加载和处理4. 模型构建和训练5. 预训练模型和迁移学习6. 调试和性能7. 高级特性总结 torch中主要的数据对象主要特点和功能张量的创建 数据处理和转换1.torch.tensor() 创建一个新的张量(Tensor)2.torch.zero…

YOLOv8训练自己的数据集

文章目录 1. 创建数据集文件结构数据集标注脚本分割数据集转换数据格式 2. 配置文件2.1 数据集配置2.2 选择需要的模型 3. 模型训练4. 测试 1. 创建数据集 环境: Ultralytics YOLOv8.0.230 🚀 Python-3.8.18 torch-2.3.0.dev20231226cu118 CUDA:0 (NVIDI…

嵌入式linux_C应用学习之API函数

1.文件IO 1.1 open打开文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);pathname&#xff1a;字符串类型&#xff0c;用于标…

代码随想录算法训练营第六天| 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

常见的三种哈希结构&#xff1a;vector数组、set &#xff08;集合&#xff09;、map(映射) 哈希表理论基础 常见的三种哈希结构&#xff1a;vector数组、set &#xff08;集合&#xff09;、map(映射) 242.有效的字母异位词 固定类别的存储内查找用固定大小的vector&#xff1…

Pandas实战100例 | 案例 49: 数值运算

案例 49: 数值运算 知识点讲解 Pandas 提供了进行基本数学运算的简便方法&#xff0c;允许你在 DataFrame 的列之间执行加法、减法、乘法和除法等操作。 数值运算: 直接对 DataFrame 的列应用算术运算符&#xff08;, -, *, /&#xff09;可以执行相应的数值运算。 示例代码…

【DDR】基于Verilog的DDR控制器的简单实现(三)——读操作

上一节 【DDR】基于Verilog的DDR控制器的简单实现&#xff08;二&#xff09;——写操作 本文继续以美光(Micron&#xff09;公司生产的DDR3芯片MT41J512M8RH-093&#xff08;芯片手册&#xff09;为例&#xff0c;说明DDR芯片的读操作过程。下图为读操作指令格式&#xff08;…

市场复盘总结 20240115

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 0% 失效 二进三&#xff1a; 进级率 中位数50% 最常用的二种方法&#xff1a; 方…

C语言代码 计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!

计算1!2!3!4!5!6!7!8!9!10! 代码示例&#xff1a; #include <stdio.h> int main() {int i 0;int n 0;int ret 1;int sum 0;for (n 1; n < 10; n){ret 1;for (i 1; i < n; i){ret ret * i;}sum sum ret;}printf("%d\n", sum);return 0; } 运…

记录centos7.9 离线安装fastllm 编译遇到的问题

centos7.9 安装fastllm 编译步骤 Step1安装cmake: 参考: https://bitsanddragons.wordpress.com/2022/09/19/error-cmake-3-1-or-higher-is-required-you-are-running-version-on-centos-7-x/ ​ 问题1&#xff1a;/lib64/libstdc.so.6: version GLIBCXX_3.4.20‘ not found …

解决Qt的release构建下无法进入断点调试的问题

在工作的时候遇到了第三方库只提供release版本的库的情况&#xff0c;我需要在这基础上封装一层自家库&#xff0c;在调试的时候遇到如下问题&#xff0c;但是在Qt环境下&#xff0c;release的库只能在进行release构建和调试。 卡在了一直进不了断点的情况。提示内容如下&#…

数据库知识汇总之MySQL

目录 MySQL数据库特点MySQL下载MySQL配置文件初始化MySQL配置安装MySQL服务 启动MySQL服务登录数据库修改数据库登录密码MySQL错误代码1130 MySQL数据库特点 MySQL是一个开源关系型数据库管理系统(RDBMS)&#xff0c;由Oracle公司维护和开发。它使用SQL语言进行数据库管理和操…

Flink常见异常解决办法

Flink启动报错 Caused by: java.lang.NoSuchMethodError: org.apache.flink.api.common.functions.RuntimeContext.getMetricGroup()Lorg/apache/flink/metrics/groups/OperatorMetricGroup;...at org.apache.flink.api.common.functions.util.FunctionUtils.openFunction(Fun…

DA14531-外设驱动篇-I2C通信应用

文章目录 1.I2C通信应用相关文件2.宏定义列表3.主要函数接口4.应用代码实例1.I2C通信应用相关文件 1)i2c.c和i2c.h(SDK文件) 2)app_I2cProtocol.c和app_I2cProtocol.h(用户应用文件) 2.宏定义列表 宏定义注解I2C_ADDRESSING_7B7-bit 地址I2C_ADDRESSING_10B10-bit 地址…

【LeetCode题目详解】59. 螺旋矩阵 II 54. 螺旋矩阵 LCR 146. 螺旋遍历二维数组(c++)

这篇文章的题目稍微难一点 题目建议&#xff1a; 本题关键还是在转圈的逻辑&#xff0c;在二分搜索中提到的区间定义&#xff0c;在这里又用上了。 一、59. 螺旋矩阵 II 题目&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按…

Compose中使用paging3进行列表分页加载Room中的数据

文章目录 一、前言二、相关依赖二、具体代码三、参考链接 一、前言 本文简要记录下流程&#xff0c;代码需要修改后才可以运行 二、相关依赖 <project>/build.gradle buildscript {ext {compose_version 1.5.4} }// Top-level build file where you can add configu…

DataX的安装使用

DataX概述&#xff1a; DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台&#xff0c;实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 插件 的模式&#xff0c;目前已开源&#xff0c;代…

如何用GPT制作PPT和写代码?

详情点击链接&#xff1a;如何用GPT制作PPT和写模型代码&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定…

【Docker】快速入门之Docker的安装及使用

一、引言 1、什么是Docker Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以将他们的应用及其依赖打包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之…

软件测试|使用pillow给图片添加水印

简介 水印是一种在图片上添加文字或图像的技术&#xff0c;用于标识图片的来源、版权信息或其他附加信息。Pillow 是一个强大的 Python 图像处理库&#xff0c;它提供了许多功能&#xff0c;包括给图片添加水印。本文将详细介绍如何使用 Pillow 给图片添加水印。 创建水印 在…