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

文章目录

前言

 一、概述

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.mzph.cn/web/62246.shtml

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

相关文章

golang实现简单的redis服务

golang 手搓redis服务器仓库地址:实现思路: golang 手搓redis服务器 仓库地址: 仓库: https://github.com/dengjiayue/my-redis.git 实现思路: ● 协议: tcp通信 ● 数据包: 长度(4byte)方法(1byte)数据json ● 数据处理: 单线程map读写 ○ 依次处理待处理队列的请求(chan)…

智慧银行反欺诈大数据管控平台方案(八)

智慧银行反欺诈大数据管控平台的核心理念&#xff0c;在于通过整合先进的大数据技术、算法模型和人工智能技术&#xff0c;构建一个全面、智能、动态的反欺诈管理框架&#xff0c;以实现对金融交易的全方位监控、欺诈行为的精准识别和高效处理。这一理念强调数据驱动决策&#…

3D 生成重建019-LERF用文本在Nerf中开启上帝之眼

3D 生成重建019-LERF用文本在Nerf中开启上帝之眼 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 人类利用自然语言描述物理世界&#xff0c;根据各种特性&#xff08;视觉外观、语义、抽象关联&#xff09;寻找具体的3D位置。在这项工作中&#xff0c;作者提出了语言嵌…

如何选择合适的期刊投稿?从课题组经验到在线工具的使用全解析

~~~本文是作者个人的经验分享&#xff0c;建立在导师让自己选刊的情况下~~~ 投稿选刊是科研过程中至关重要的一步&#xff0c;选刊过程可能让许多初投稿的研究者感到迷茫和困惑&#xff1a;期刊那么多&#xff0c;如何找到最合适的&#xff1f; 本文将从多个角度介绍如何选择投…

.NET MAUI与.NET for Android/IOS的关系

2024年11月13日微软发布了.Net9.0,我打算体验一下。安装好.Net9.0 SDK后发现Visual Studio识别不到9.0&#xff0c;但是通过命令行dotnet --info查看是正常的&#xff0c;后面看到了VS有版本可以升级&#xff0c;把VS升级到17.12.0就可以了。更新完打开以后看到如下界面 这里…

【vivado】时序报告--best时序和worst时序

利用vivado进行开发时&#xff0c;生成best时序报告和worst时序报告。 best时序报告 slow选择min_max&#xff0c;fast选择none。 worst时序报告 fast选择min_max&#xff0c;slow选择none。

FastAPI 响应状态码:管理和自定义 HTTP Status Code

FastAPI 响应状态码&#xff1a;管理和自定义 HTTP Status Code 本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码&#xff0c;涵盖了常见的 HTTP 状态码分类&#xff0c;如信息响应&#xff08;1xx&#xff09;、成功状态&#xff08;2xx&#xff09;、客户端错误&a…

第P1周:Pytorch实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 1. 实现pytorch环境配置 2. 实现mnist手写数字识别 3. 自己写几个数字识别试试具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python…

网络安全技术详解:虚拟专用网络(VPN) 安全信息与事件管理(SIEM)

虚拟专用网络&#xff08;VPN&#xff09;详细介绍 虚拟专用网络&#xff08;VPN&#xff09;通过在公共网络上创建加密连接来保护数据传输的安全性和隐私性。 工作原理 VPN的工作原理涉及建立安全隧道和数据加密&#xff1a; 隧道协议&#xff1a;使用协议如PPTP、L2TP/IP…

河南省的教育部科技查新工作站有哪些?

郑州大学图书馆&#xff08;Z12&#xff09;&#xff1a;2007年1月被批准设立“教育部综合类科技查新工作站”&#xff0c;同年12月被河南省科技厅认定为河南省省级科技查新机构。主要面向河南省的高校、科研机构、企业提供科技查新、查收查引等服务。 河南大学图书馆&#xf…

Leetcode经典题6--买卖股票的最佳时机

买卖股票的最佳时机 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。…

【Pytorch】torch.reshape与torch.Tensor.reshape区别

问题引入&#xff1a; 在Pytorch文档中&#xff0c;有torch.reshape与torch.Tensor.reshape两个reshape操作&#xff0c;他们的区别是什么呢&#xff1f; 我们先来看一下官方文档的定义&#xff1a; torch.reshape&#xff1a; torch.Tensor.reshape: 解释&#xff1a; 在p…

spring6:3容器:IoC

spring6&#xff1a;3容器&#xff1a;IoC 目录 spring6&#xff1a;3容器&#xff1a;IoC3、容器&#xff1a;IoC3.1、IoC容器3.1.1、控制反转&#xff08;IoC&#xff09;3.1.2、依赖注入3.1.3、IoC容器在Spring的实现 3.2、基于XML管理Bean3.2.1、搭建子模块spring6-ioc-xml…

【认证法规】安全隔离变压器

文章目录 定义反激电源变压器 定义 安全隔离变压器&#xff08;safety isolating transformer&#xff09;&#xff0c;通过至少相当于双重绝缘或加强绝缘的绝缘使输入绕组与输出绕组在电气上分开的变压器。这种变压器是为以安全特低电压向配电电路、电器或其它设备供电而设计…

车机端同步outlook日历

最近在开发一个车机上的日历助手&#xff0c;其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现&#xff0c;毕竟手机日历是手机厂商自己带的系统应用&#xff0c;根本不能和车机端实现数据同步的。 那么只能去其他公共的平台寻求一些机会&…

OpenCV-图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

城电科技 | 光伏景观长廊 打造美丽乡村绿色低碳示范区 光伏景观设计方案

光伏景观长廊是一种结合了光伏发电技术和零碳景观设计的新型公共公共设施&#xff0c;光伏景观长廊顶上的光伏板不仅可以为周边用电设备提供清洁电能&#xff0c;而且还能作为遮阳设施使用&#xff0c;为人们提供一个美丽又实用的休闲娱乐空间。 光伏景观长廊建设对打造美丽乡…

开发系统准备与开发环境配置总结

开发前系统配置及环境搭建 系统配置0 Github打不开、速度慢怎么办1 WSL、Linux、Ubuntu、Docker都是什么鬼2 在Windows下安装WSL和Ubuntu3 配置MySQL4 配置Redis并启动服务5 Docker&#xff08;Windows和Ubuntu下&#xff09;6 Nginx 系统配置 你好&#xff01; 这是你第一次使…

uniapp 添加loading

在uniapp中添加loading可以使用uni的API uni.showLoading 方法。以下是一个简单的示例代码 // 显示loading uni.showLoading({title: 加载中 });// 假设这里是异步操作&#xff0c;比如网络请求 setTimeout(function () {// 隐藏loadinguni.hideLoading(); }, 2000);

C++(九)

前言&#xff1a; 本文主要讲述运算符的优先顺序。 一&#xff0c;运算符的优先级。 请看以下表达式&#xff1a; a32*5 运算结果为&#xff1a;13. 可以看到&#xff0c;在此代码中&#xff0c;先运行了2*5的结果&#xff0c;在此基础上在进行3操作&#xff0c;因此结果…