【计算机网络】 —— 数据链路层(壹)

news2025/1/20 5:54:06

文章目录

前言

 一、概述

1. 基本概念

2. 数据链路层的三个主要问题

二、封装成帧

1. 概念

2. 帧头、帧尾的作用

3. 透明传输

4. 提高效率

三、差错检测

1. 概念

2. 奇偶校验

3. 循环冗余校验CRC

1. 步骤

2. 生成多项式

3. 例题

4. 总结

四、可靠传输

1. 基本概念:

2. 可靠传输的实现机制

1. 停止等待协议 SW

(1)否定分组NAK

(2)超时重传

(3)分组重复

(4)确认迟到

(5)SW协议的信道利用率

2. 回退N帧协议GBN

(1)无差错情况

(2)累积确认

(3)有差错情况

(4)发送窗口尺寸超过上限

(5)总结

3. 选择重传协议SR

(1)SR协议工作过程

(2)SR协议的窗口尺寸

(3)窗口尺寸超出上限

(4)总结


前言

上篇文章中,对于计算机网络的物理层相关内容进行了整理和总结,今天开始数据链路层的学习,还请多多支持!

回顾上期内容:计算机网络 ——【物理层】icon-default.png?t=O83Ahttps://blog.csdn.net/2401_86777036/article/details/143993284?sharetype=blogdetail&shareId=143993284&sharerefer=APP&sharesource=2401_86777036&sharefrom=link

 一、概述

1. 基本概念

链路(Link):从一个节点到相邻节点的一段物理线路,中间没有任何其他的交换节点

数据链路(Data Link):把实现通信协议的硬件和软件加到链路上,就构成了数据链路

数据链路层以为单位传输和处理数据 

2. 数据链路层的三个主要问题

封装成帧:数据链路层给网络层交付的协议数据单元添加帧头和帧尾

差错检测:接收方主机收到帧后通过检错码和检错算法判断帧在传输过程中是否产生误码

可靠传输:可以简单理解为发送方发送什么,接收方就接收到什么

二、封装成帧

1. 概念

数据链路层对上层交付的协议数据单元添加帧头和帧尾使之成为一个帧

2. 帧头、帧尾的作用

        1. 包含重要的控制信息

        

        2. 帧定界

        PPP帧:帧头、帧尾各有一字节的标志字段

接收方主机的数据链路层依据帧定界标志,从物理层交付的比特流中提取出一个个帧

BUT!并不是每一个数据链路层协议的帧中都有帧定界标志!

例如:以太网V2的MAC帧中:帧头和帧尾中并没有帧定界标志

接收方如何提取出以太网帧呢???

发送方数据链路层封装好以太网帧后交付给物理层,物理层收到后,会在以太网帧前添加8字节的前导码

前导码:

        前7个字节为前同步码 —— 作用:是接受方的时钟同步

        最后一个字节为帧开始定界符 —— 表名其后面紧跟的为以太网MAC帧

以太网还规定了帧间间隔为96比特时间 ——> MAC帧不需要帧结束定界符

3. 透明传输

数据链路层对上层交付的传输数据没有限制,就好像数据链路层不存在一样

帧定界标志也是一个特殊的数值

如果上层交付的协议数据单元中,也包括这个数值

接收方还能正确接收这个帧么?答案明显是错误的,接收方会对帧是否结束产生误判,这种情况下就不能称为透明传输

数据链路层的处理办法:

在发送帧之前,对帧的数据部分进行扫描,每发现一个帧定界符,就在前面插入一个转义字符

接收方识别到转义字符时,就可以识别之后的一个字符为数据,从而剔除转义字符后提取数据

转义字符ESC:特殊的控制字符,长度为一字节,十进制数值为27

同样!!转义字符也是特殊的数值,如果数据中也存在转义字符的数值呢???

处理方法同上,在发送帧之前,对帧的数据部分进行扫描,每发现一个帧定界符和转义字符,就在前面插入一个转义字符

对于面向比特的物理链路 ——> 比特填充法

——> 零比特填充法:在发送帧之前,对帧的数据部分进行扫描,每5个连续的1后插入一个0

——> 接收方接收时剔除0即可

4. 提高效率

为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大一些

最大传输单元MTUMaximum Transfer Unit):考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧数据部分的长度上限

三、差错检测

1. 概念

  • 比特差错:比特在传输过程中可能产生产错(0变为1,1变为0)
  • 误码率BER(Bit Error Rate):在一段时间内,传输错误的比特占传输的比特总数的比率,BER = 错误的比特 / 总的比特
  • 差错检测:使用差错检测码来检测数据在传输过程中是否产生了比特差错
  • 差错检测码:

其中FCS字段就是帧检验序列,让接收方的数据链路层检查帧在传输过程中是否产生了差错

2. 奇偶校验

在待发送的数据后添加一位奇偶校验位,使整个数据(包括添加的校验位)中1的个数为奇数(奇校验)或偶数(偶校验)

缺点:如果传输过程中比特1的奇偶性没有发生变化,就检测不出是否发生差错

3. 循环冗余校验CRC

循环冗余校验CRC —— Cyclic Redundancy Check

1. 步骤

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

2. 生成多项式

常用的生成多项式:

生成多项式必须包含最低次项1

3. 例题

发送方:

接收方:

4. 总结

  • 检错码只能检测帧在传输过程中是否出现差错,但不能定位错误,因此无法纠错;
  • 可以使用冗余信息更多的纠错码进行前向纠错,但纠错码的开销比较大,在计算机网络中很少使用;
  • 循环冗余校验CRC有很好的检错能力,虽然计算比较复杂,但易于硬件实现,因此被广泛适用于数据链路层;
  • 计算机网络中通常使用检错重传的方式来纠正传输中的错误,或者丢掉检测到差错的帧,这取决于数据链路层向其上层提供的是否是可靠传输。

四、可靠传输

1. 基本概念:

        对于检测到差错的数据:

                不可靠传输:丢弃产生差错的帧

                可靠传输:想办法实现发送方发送什么,接收方就收到什么

        传输差错:

                分组丢失

                分组失序

                分组重复

2. 可靠传输的实现机制

1. 停止等待协议 SW

        SW —— Stop-and-Wait

(1)否定分组NAK

接收方接收到数据之后,会对数据进行差错检测:

  • 如果检测没有产生误码,则返回确认分组ACK
  • 如果检测到存在误码,则丢弃该分组,并返回否定分组NAK

发送方接收到否定分组NAK之后,会重新发送一份数据分组,直至接收到确认分组ACK,之后才会将数据从缓存中删除

(2)超时重传

如果发送方发送数据后,数据在传播过程中丢失,接收方接收不到数据,就不会给发送方返回ACK或者NAK,发送方就会一直阻塞等待;

超时重传:发送方中存在一个重传计时器,重传计时器中设置有一个重传时间,发送方发送数据后,如果在规定的重传时间内没有收到ACK,就会重传上一份数据。

如果接收方接收到数据之后,检测到存在误码:

        可以不立即返回NAK,而是等待发送方的超时重传;

        但对于误码率较高的点对点链路,为了使对方尽快重传,也可选择发送NAK

(3)分组重复

接收方正确接收数据后,返回ACK确认分组,ACK在传播过程中丢失,触发了发送方的超时重传机制,此时就会导致接收方接收到两份一样的数据,而接受方无法判断是否是重复分组

为避免分组重复问题,就需要给每个数据分组添加序号,对于停止等待协议,每次发送一个数据分组后就会停止等待,所以只需要保证每次发送的数据序号和上一次发送的数据序号不同即可,因此只需要一个比特位来编号即可

(4)确认迟到

接收方正确接受数据之后,返回ACK,但ACK在传输过程中因某些原因,未能及时到达发送方,从而触发了发送方的超时重传,重传0号数据分组,之后才接收到ACK,此时就会立即发送1号数据分组

接收方再次收到0号数据分组之后,发现是重复的数据分组,就会丢弃并返回一个ACK,于是发送方就收到了对0号分组的重复确认,发送方无法正确辨别ACK

此时需要才取的措施就是,对确认分组ACK也进行编号,只需要保证每次的ACK序号和上一次发送的ACK序号不同即可,因此也只需要一个比特位来编号即可

发送方在接收到重复的确认分组ACK0时,会直接忽略该确认分组,等待正确的确认分组

(5)SW协议的信道利用率

信道利用率U计算公式:

由此可见,我们可以得出

当往返时延RTT远大于数据的发送时延时(例如卫星链路),信道的利用率就会非常低

如果出现重传,信道的利用率还会进一步降低

于是为了解决停止等待协议信道利用率低的问题,就出现了回退N帧协议和选择重传协议

2. 回退N帧协议GBN

        GBN —— Go-Back-N

对于停止等待协议,每次发送一个数据分组后就会停止等待,所以每发送一个数据分组就至少需要等待一个收发双方的往返时间,信道利用率很低

此时如果采用流水线传输:

回退N帧协议:在流水线传输的基础上,通过发送窗口来限制发送方可连续发送的数据分组个数

发送窗口W_T{}尺寸:1< W_{T}\leqslant 2^{n}-1(n为数据分组的比特位)

当发送窗口W_T{}=1时,就是停止等待协议

(1)无差错情况

发送方的发送窗口序号落在0~4号分组,一次发送给接收方

接收方依次进行接收,每接收一个数据分组,接收窗口向后滑动一个位置,并返回一个对应的ACK分组

发送方每接收一个ACK分组,发送窗口就向后滑动一个位置

发送方就可将收到确认的数据分组就可以从缓存中删除了

(2)累积确认

接收方没必要对接收到的数据分组逐个发送确认分组,接收方在接收到一批数据分组后,可以对按序到达的最后一个数据分组发送确认ACK_{n}

ACK_{n}表示:序号n之前的所有数据分组都已经正确接收

此时,就算ACK1丢失了,发送方只接受到了ACK4,就会知道0~4号分组被正确接收

(3)有差错情况

5号数据分组检测到存在误码,丢弃该数据分组

前四个数据分组也不会被接受,也会被丢弃,此时,每丢弃一个数据分组,就会返回一个上一批接收到的最后一个数据分组对应的确认分组

发送方接收到重复的确认分组,就知道之前发送的数据分组存在差错,就可以立即重传这批数据,至于收到几个重复的就会立即重传和具体实现有关

如果不足以立即重传,就会在重传计时器超时时,对发送窗口内的数据全部重传

此时,可以看出,在第一次发送中,就算6,7,0,1号数据分组没有产生差错,也会受到牵连不会被接收,发送方依旧需要重传这些数据

所以,当网络质量不好时,回退N帧协议并不一定比停止等待协议高

(4)发送窗口尺寸超过上限

接收方正确按序接收后,给发送方返回累计确认ACK7

此时,如果ACK7在返回过程中丢失......发送方就会接收不到确认分组,于是在重传计时器超时后,就会重传之前的全部分组

重传的0~7到达接收方,接收方无法分辨新旧分组,会再次接收,于是就会发生分组重复的现象

(5)总结

回退N帧协议是在流水线传输的基础上,通过发送窗口来限制发送方可连续发送的数据分组个数,是一种连续的ARQ协议,在协议工作的过程中,发送窗口和接收窗口不断向后滑动,于是这类协议又被称作滑动窗口协议

3. 选择重传协议SR

        SR —— Selective-Request

为了进一步提高性能,可以设法只对产生误码到的数据分组进行重传。因此,接收方的接收窗口不应只为1,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后一并提交上层。

此时!为了使发送方仅重传出现差错的分组,接收方不能再使用累积确认的方式,而需要对每个正确接受的数据分组进行逐一确认

发送窗口W_{T}1< W_{T}\leqslant 2^{n-1}

接收窗口W_{R}W_{R} = W_{T}

(1)SR协议工作过程

假设:发送方对落在发送窗口的数据分组进行发送:

传播过程中,2号数据分组丢失,接收方接收到0、1号数据时,接收窗口向后滑动,并返回对应的ACK分组;接收3号数据时,窗口不向后移动,但返回对应ACK分组(3号不是按序到达的分组);并将0、1号数据交给上层

接收方接收到0、1号ACK分组,窗口向后滑动,发送方可以将0、1号数据从缓存中删除;此时4、5号数据分组出现在发送窗口中,发送方对其进行发送;接收到ACK3,发送窗口不向后滑动,因为不是按序到达的ACK分组,同时记录已经收到ACK3,确保不会超时重传3号数据分组

发送方接收4、5号数据,并返回对应ACK分组,但是窗口不向后滑动;发送方接收到4、5号ACK分组,记录已经收到4、5号数据

等重传计时器超时,对2号数据分组进行重传

接收方正确接收2号数据分组,返回对应ACK,接收窗口向后滑动

发送方接收到ACK2,发送窗口也向后滑动

(2)SR协议的窗口尺寸

(3)窗口尺寸超出上限

假设:将W_{T}W_{R}都设置为5

发送方将发送窗口的数据进行发送

接收方正确接收数据,并返回对应ACK分组,接收窗口向后滑动

假设确认分组返回过程中,ACK0丢失

发送方接收到1-4号ACK分组,并记录已经接收,过一段时间,重传计时器超时,就会重传0号数据分组

接收方无法分辨新旧数据分组,就会接收这个0号数据分组,就会出现分组重复的差错

(4)总结

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

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

相关文章

亚马逊 aws-waf-token 算法生成,协议逆向,通杀!!!

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 难度不大&#xff0c;核…

SpringBoot 赋能家乡特色推荐系统:高效架构与前沿技术集成

1 绪 论 1.1课题背景与意义 在Internet高速发展的今天&#xff0c;计算机的应用几乎完全覆盖我们生活的各个领域&#xff0c;互联网在经济&#xff0c;生活等方面有着举足轻重的地位&#xff0c;成为人们资源共享&#xff0c;信息快速传递的重要渠道。在中国&#xff0c;网上管…

肥羊直播 1.0.2 |频道非常丰富的高清画质电视直播软件

肥羊直播App是一款专为电视用户设计的直播软件&#xff0c;提供丰富多彩的直播内容&#xff0c;包括央视、卫视、综合、地方、卡通动漫、娱乐、历史古装和电影等频道。该软件支持多种设备&#xff0c;如智能电视、高清机顶盒和安卓手机&#xff0c;为用户带来便捷且高清的观看体…

基础加/解密程序V2.0(Ascll码加减实现) txt保存密钥

Hello大家好&#xff0c;这次我对上篇博客&#xff08;基础加/解密程序&#xff08;Ascll码加减实现&#xff09;-CSDN博客&#xff09;中的代码略加修改&#xff0c;退出了2.0版本&#xff0c;这次我加入了txt输入/出流&#xff0c;使得可随时对密钥进行更改。不过在使用前&am…

代码随想录算法训练营day50|动态规划12

不同的子序列 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。、 编辑距离中的删除元素&#xff0c;其实就是直接变数字&#xff0c;其只删除原来的较长的数组里的元素 递推模拟&#xff0c;使用s的最后一个元素匹配&#xff0c;或者删除…

keil报错---connection refused due to device mismatch

解决办法如下&#xff1a; 记得改成1 把Enable取消

黑森林实验室发布FLUX.1 Tools控制套件,全面介绍

FLUX.1 Tools是什么 FLUX.1 Tools 是由 Black Forest Labs 发布的一套模型工具&#xff0c;旨在为文本到图像模型 FLUX.1 提供更多的控制和可操作性&#xff0c;使得对真实和生成图像的修改和重新创作成为可能。这套工具包括四个核心功能&#xff1a;FLUX.1 Fill、FLUX.1 Dept…

【包教包会】CocosCreator3.x——重写Sprite,圆角、3D翻转、纹理循环、可合批调色板、不影响子节点的位移旋转缩放透明度

一、效果演示 重写Sprite组件&#xff0c;做了以下优化&#xff1a; 1、新增自变换&#xff0c;在不影响子节点的前提下位移、旋转、缩放、改变透明度 新增可合批调色板&#xff0c;支持色相、明暗调节 新增圆角矩形、3D透视旋转、纹理循环 所有功能均支持合批、原生平台&…

AI 语音:IIElevenLabs 如何通过文本训练出新的声音

网址&#xff1a;Free Text to Speech & AI Voice Generator | ElevenLabs 1&#xff09;点击添加新的声音 2&#xff09;根据需要选择 3&#xff09;比如我选择第一个&#xff08;从文本提示设计一个全新的声音&#xff09; 4&#xff09;通过中文将想要的声音要求翻译成…

Vant UI +Golang(gin) 上传文件

前端基本用法&#xff1a;点击查看 实现代码&#xff1a; const afterRead (file) > {console.log(file);//set content-type to multipart/form-dataconst formData new FormData();formData.append("file", file.file);request.POST("/api/v1/users/up…

2021 年“泰迪杯”数据分析技能赛B 题肥料登记数据分析

2021 年“泰迪杯”数据分析技能赛B 题肥料登记数据分析 完整代码请私聊 博主 # 一、背景 肥料是农业生产中一种重要的生产资料&#xff0c;其生产销售必须遵循《肥料登记管理办法》&#xff0c;依法在农业行政管理部门进行登记。各省、自治区、直辖市人民政府农业行政主管部门主…

C#常见错误—空对象错误

System.NullReferenceException&#xff1a;未将对象引用设置到对象的实例 在C#编程中&#xff0c;System.NullReferenceException是一个常见的运行时异常&#xff0c;其错误信息“未将对象引用设置到对象的实例”意味着代码试图访问一个未被初始化或已被设置为null的对象的成…

MATLAB Simulink® - 智能分拣系统

系列文章目录 前言 本示例展示了如何在虚幻引擎 环境中对四种不同形状的标准 PVC 管件实施半结构化智能分拣。本示例使用 Universal Robots UR5e cobot 执行垃圾箱拣选任务&#xff0c;从而成功检测并分类物体。cobot 的末端执行器是一个吸力抓手&#xff0c;它使 cobot 能够拾…

【SpringMVC】应用分层

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;场景引入 二&#xff1a;前后端分离三层架构 1&#xff1a;表现层 2&#xff1a;业务…

【TCP 网络通信(发送端 + 接收端)实例 —— Python】

TCP 网络通信&#xff08;发送端 接收端&#xff09;实例 —— Python 1. 引言2. 创建 TCP 服务器&#xff08;接收端&#xff09;2.1 代码示例&#xff1a;TCP 服务器2.2 代码解释&#xff1a; 3. 创建 TCP 客户端&#xff08;发送端&#xff09;3.1 代码示例&#xff1a;TCP…

在阿里云/Linux环境搭建Gitblit服务

在阿里云/Linux环境搭建Gitblit服务 1. 整体描述2. 前期准备3. 安装步骤3.1 下载gitblit3.2 上传gitblit3.3 解压文件3.4 修改文件配置3.5 启动gitblit3.6 安全组配置 4. 总结 1. 整体描述 前段时间买了一个阿里云服务器&#xff0c;2核2G&#xff0c;3M固定带宽的配置&#x…

定时任务——xxl-job源码解析

摘要 本文深入解析了xxl-job的源码&#xff0c;xxl-job是一个分布式任务调度平台&#xff0c;其核心设计思想是将调度行为抽象成“调度中心”&#xff0c;而任务逻辑则由“执行器”处理&#xff0c;实现调度与任务的解耦。文章详细介绍了调度器和执行器的初始化流程、任务执行…

吉他初学者学习网站搭建系列(9)——如何用coze做一个网站助手

文章目录 背景功能搭建智能体新增工作流效果总结 背景 随着AI大模型的普及&#xff0c;国内也涌现出许多帮助用户更便捷使用大模型的平台。扣子就是其中之一。国内已经有蛮多用户了&#xff0c;我试用了这个平台&#xff0c;来给我的网站搭建一个小助手&#xff0c;效果非常好…

Anaconda 下安装OpenCV 4.10.0

大家也可以使用pip安装。 pip install opencv-python4.10.0 这里使用conda安装 conda install opencv4.10.0 import cv2 print(cv2.__version__)

帝可得-商品管理

商品管理 需求说明 商品管理主要涉及到三个功能模块&#xff0c;业务流程如下&#xff1a; 新增商品类型: 定义商品的不同分类&#xff0c;如饮料、零食、日用品等。新增商品: 添加新的商品信息&#xff0c;包括名称、规格、价格、类型等。设备货道管理: 将商品与售货机的货…