计算机网络——数据链路层-流量控制和可靠传输

一、流量控制

流量控制是指由接收方及时控制发送方发送数据的速率,使接收方来得及接受。
   • 停止等待流量控制
   • 滑动窗口流量控制

1、停止—等待流量控制

   停止-等待流量控制的基本原理是发送方每发出一帧后,就要等待接收方的应答信号,收到应答信号后,发送方才能发送下一帧;接收方每接受一帧,就要返回一个应答信号,表示可以接受下一帧,若接受方不返回应答信号,则接收方必须一直等待。这种方式是流量控制中最简单的方式,传输效率很低。

2、滑动窗口流量控制

• 每次只允许发送一帧,滑动窗口流量控制允许一次发送多个帧,因此提高了传输效率。
• 发送窗口:滑动窗口流量控制的基本原理是在任意时刻,发送方都维持一组连续的允许发送的帧
的序号,称为发送窗口;
• 接收窗口:同时,按收方也维持一组连续的允许接收的帧的序号,称为接收窗口。

如图(a)所示,发送端的发送窗口大小为5,在发送开始时,允许发送帧序号为0~4的共5个帧。每发送一帧后,若未收到确认,发送窗口自动减1,如图(b)所示。若序号为0~4的帧都已经发送完毕,且未收到一个确认帧,则无法继续发送后续帧,如图(c)所示。而当发送端每收到一个确认帧之后,发送窗口就向前滑动一个帧的位置,图(d)给出了收到三个确认帧之后的发送窗口示意,此时可继续发送序号为5~7的3个帧。

接收窗口的大小与发送窗口无关,当接收窗口大小为1时,如图所示,收到一个数据帧后,将窗口向前移动一个位置,并发送确认帧。若收到的数据帧落在接收窗口之外,则一律丢弃该数据帧。注意到,当接收窗口大小为1时,可保证帧的有序接收。另外,需要注意的是,数据链路层的滑动窗口协议,窗口的大小在传输过程中是固定的。 

滑动窗口流量机制可以在收到确认信息之前发送多个数据分组,提高了网络的吞吐量,解决了端到
端的通信流量控制问题。

3、可靠传输机制
• 〝可靠传输”是指数据链路层的发送端发送什么,接收端就接收什么。
• 数据链路层的可靠传输通常采用确认和重传两种机制来完成。
确认可以是每发送一帧就确认一次,也可以是一次累积确认多个帧,后一种情況可以把确认
捎带在一个回复帧中(称为捎带确认)。
重传可分为超时重传和自动重传请求ARQ两种方式。
• 超时重传是指发送方在发送某个帧后就启动一个计时器,在设定时间内如果没有得到发送的
帧的确认,就重新发送该帧,直到发送成功为止。
• ARQ通过接收方请求发送方重传出错的帧。ARQ通常分为三种,即停止-等待 (Stop-and-
Wait) ARQ、后退N帧(Go-Back-N) ARQ和选择重传 (Selective Repeat)ARQ。
• 停止-等待(Stop-and-Wait)协议:发送窗口尺寸和按收窗口的大小都等于1;
• 后退N帧GBN(Go-Back-N)协议:发送窗口大于1,接收窗口等于1;
• 选择重传SR (Selective Repeat) 协议:发送窗口和接收窗口的大小均大于1。

4、流量控制与可靠传输机制

 在发送结点:
1)从主机取一个数据帧;
2)将数据帧送到数据链路层的发送缓存;
3)将发送缓存中的数据帧发送出去;
4)等待;
5)若收到由接收结点发过来的信息(此信息的格式与内容可由双方事先商定好),则从主机取一个新的数据帧,然后转到2)。
在接收结点:
1)等待;
2)若收到由发送结点发过来的数据帧,则将其放入数据链路层的接收缓存;
3)将接收缓存中的数据帧上交主机;
4)向发送结点发一信息,表示数据帧已经上交给主机;
5)转到1)。

1)发送端发送数据帧后,等待接收端的应答帧;
2)接收端收到数据帧后,通过 CRC 校验,如果无差错,回送一个确认帧 ACK ,否则,回送一个否认帧 NAK ;
3)发送端收到应答帧,如果是 ACK ,发送下一数据帧,如果是 NAK ,重发数据帧

1)正常情况
接收方在收到一个正确的数据帧后,即交付给主机B,同时向主机A发送一个确认帧ACK。当主机A收到确认帧后才能发送一个新的数据帧。
2)数据帧出错
当结点B检验出收到的数据帧有差错时,结点B就向主机A发送一个否认帧NAK,以表示主机A应当重传出现差错的那个数据帧。

3)数据帧丢失

由于某些原因,结点B收不到结点A发来的数据帧。若到了重传时间t仍收不到结点B的任何确认
帧,则结点A就重传前面所发送的帧。
4)确认帧丢失
主机A在重传时间内没有收到B发来的确认帧,则A就重传前面所发送的数据帧。通过上面的分析可知,在停止-等待协议中要解决两个问题,即死锁问题和重复帧问题。

5)死锁问题

发生帧丢失时结点B不会向结点A发送任何确认帧,如果结点A要等到收到结点B的确认信息后再发送下一个数据帧,那么就将永远等待下去。于是就出现了死锁现象。
解决死锁问题的方法是,在结点A发送完一个数据帧时,就启动一个超时计时器。若到了超时计时器所设置的重传时间t而仍收不到结点B的任何确认帧,则结点A就重传前面所发送的这一数据帧。若在重传时间内收到确认,则将超时计时器清零并停止。

6)重复帧问题

当出现确认帧丢失时,则超时重传将使主机 B 收到两个同样的数据帧。由于主机 B 无法识别重复帧,因而在主机 B 收到的数据中出现了重复帧差错。
解决重复帧的方法是,使每一个数据帧带上不同的发送序号。每发送一个新的数据帧就把它的发送序号加1。若结点 B 收到发送序号相同的数据帧,就表明出现了重复帧。这时应丢弃重复帧,因为已经收到过同样的数据帧并且也交给了主机 B 。但此时结点 B 还必须向 A 发送确认帧 ACK ,因为 B 已经知道 A 还没有收到上一次发过去的确认帧 ACK 。

与帧的编号有关的需要注意的几个问题如下:
任何一个编号系统的序号所占用的比特数一定是有限的。因此,经过一段时间后,发送序号就会重
复。
②序号占用的比特数越少,数据传输的额外开销就越小。
③对于停止等待协议,由于每发送一个数据帧就停止等待,因此用一个比特来编号就够了(一个比特可表示0和1两种不同的序号)。
④数据帧中的发送序号 N ( S )以0和1交替的方式出现在数据帧中。
⑤每发一个新的数据帧,发送序号就和上次发送的不一样。用这样的方法就可以使收方能够区分开新的数据帧和重传的数据帧了。

停止-等待协议ARQ的优点是比较简单;缺点是通信信道的利用率不高,也就是说,信道还远远没有被数据比特填满。

后退 N 帧

 GBN 协议的基本思想是,发送方连续发出 N 个帧,接收方以流水线方式顺序接收各个帧,并进行差错检测。一旦某个帧有错,则接收方就丢弃该帧和它之后所收到的所有帧(不管这些帧是正确的还是错误的),对出错的帧不发送确认帧;发送方在出错帧的确认帧超时后,从出错的帧开始重传所有已发送但未被确认的帧。

后退 N 帧( GBN )协议基于滑动窗口流量机制,发送窗口尺寸大于1(若采用 n 比特对帧进行编号,则发送窗口尺寸 W ,必须满足1< W ,≤2"-1),接收窗口尺寸等于1。若发送窗口尺寸大于2"-1,会造成接收方无法分辨新帧和旧帧。因为接收窗口尺寸为1,所以接收方只能按序来接收数据帧。

选择重传(SR)协议

使用 GBN 协议时,如果线路很糟糕,就会回退重发大量数据帧而浪费带宽资源。解决的策略可以有以下几种:①允许接收并缓存坏帧或丢失帧后面的帧;②接收方只把出错的帧丢弃,其后续帧保存在缓存中,向发送方发送对出错帧的非确认帧( NAK );③如果落在窗口内并从未接收过,就接受此帧,并存储起来。直到比它序号小的所有帧都按次序已经交给了网络层后,此帧才提交给网络层。以上这些需要加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧,这也是选择重传思想。


选择重传协议避免了重复传送那些本来已经正确到达接收端的数据帧,提高了信道利用率,但
代价是在接收端要设置具有相当容量的缓存空间。

选择重传协议也是基于滑动窗口流量控制机制,它的发送窗口尺寸 W ,和接收窗口尺寸 W 都大于1,一次性可发送或接收多个帧。

5、信道利用率

 信道利用率,也称为信道效率。
发送方在一个发送周期的时间内,有效地发送数据所需要的时间占整个发送周期的比率
例如,发送方从开始发送数据,到收到第一个确认帧为止,称为一个发送周期,设为T;
发送方在这个周期内共发送L比特的数据;
发送方的数据传输率为C;
则发送方用于发送有效数据的时间为L/C,信道的利用率为(L/C)/T
信道吞吐率=信道利用率*发送发的发送速率

二、数据链路层

 1:发送周期(注意是收到第一个确认帧为止,不一定是发一个帧就确认一个!):发送方从开始发送数据,到收到第一个确认帧为止,称为一个发送周期,设为T;
2:发送多少比特(看清楚单位,往往这里需要换算)的数据:发送方在这个周期内共发送L比特的
数据;在T内最多可以发送多少个数据帧=发送窗口/滑动窗口的大小=2n
3:发送有效数据的时间(时间往往需要换算计算):

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

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

相关文章

Linux运维相关基础知识(二)

系列文章目录 Linux常用命令 linux 账号管理与权限设定 Linux运维相关基础知识 文章目录 系列文章目录前言1. 自动任务执行at 与 atdcrontab 与 crond 2. SELinuxtty多任务管理与进程管理相关的命令/proc/* 文件的意义SELinux 3. 守护进程早期SystemV的init管理行为中daemon…

【CSS】第一天 基础选择器与文字控制属性

【CSS】第一天 1. CSS定义2. css引入方式2.1 内部样式2.2 外部样式2.3 行内样式 3. 选择器3.1 标签选择器3.2 类选择器3.3 id选择器3.4 通配符选择器 1. CSS定义 层叠样式表(CSS)是一种样式表语言&#xff0c;用来描述HTML文档的呈现(美化内容)。 书写位置&#xff1a;title标…

QT----------QT Data Visualzation

实现思路&#xff1a; 配置项目&#xff1a;在 .pro 文件中添加 QT datavisualization 以引入 QT Data Visualization 模块。创建主窗口&#xff1a;使用 QMainWindow 作为主窗口&#xff0c;添加 Q3DScatter、Q3DBars 和 Q3DSurface 等三维视图组件。初始化和创建三维图表&a…

连接Milvus

连接到Milvus 验证Milvus服务器正在侦听哪个本地端口。将容器名称替换为您自己的名称。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用浏览器访问连接地址htt…

AlphaPi相关硬件驱动提取

初涉硬件编程&#xff0c;在咸鱼上搞了几块AlphaPi和microbit的板鼓捣了一下&#xff0c;alphapi生态不完善&#xff0c;网上又无任何文档&#xff0c;搞封闭&#xff0c;可玩性实在有限&#xff0c;但貌似相关扩展板是可以插microbit的&#xff0c;于是想把这些扩展版用microb…

Nginx——静态资源部署(二/五)

目录 1.Nginx 服务器基础配置实例2.Nginx 服务操作的问题及解决方案2.1.Nginx 配置成系统服务2.2.Nginx 命令配置到系统环境 3.Nginx 静态资源部署3.1.Nginx 静态资源概述3.2.Nginx 静态资源的配置指令3.2.1.listen 指令3.2.2.server_name 指令3.2.2.1.配置方式3.2.2.2.匹配执行…

第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议

嗨&#xff0c;各位同学大家好&#xff01;笔者自985硕士毕业后&#xff0c;在机器人算法领域已经深耕 7 年多啦。这段时间里&#xff0c;我积累了不少宝贵经验。本专栏《机器人工程师带你从零入门SLAM》将结合下面的SLAM知识体系思维导图及多年的工作实战总结&#xff0c;将逐…

Vue 全局事件总线:Vue 2 vs Vue 3 实现

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

xml格式化(1):使用python的xml库实现自闭合标签

前言 最近一段时间一直想要写一个urdf格式化插件。 至于为什么嘛&#xff0c;因为使用sw2urdf插件&#xff0c;导出的urdf&#xff0c;同一标签的内容&#xff0c;是跨行的&#xff0c;这就导致&#xff0c;内容比较乱&#xff0c;而且行数比较多。影响阅读。 因此&#xff…

模型 九屏幕分析法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。九屏幕法&#xff1a;全方位分析问题的系统工具。 1 九屏幕分析法的应用 1.1 新产品研发的市场分析 一家科技公司计划开发一款新型智能手机&#xff0c;为了全面评估市场潜力和风险&#xff0c;他们…

基于开发/发布/缺陷分离模型的 Git 分支管理实践20250103

基于开发/发布/缺陷分离模型的 Git 分支管理实践 引言 在现代软件开发中&#xff0c;合理的分支管理策略是保证项目成功的关键因素之一。本文将详细介绍一种基于开发/发布/缺陷分离的 Git 分支管理模型&#xff0c;这种模型不仅能提升团队协作效率&#xff0c;还能确保代码质…

前端工程化之手搓webpack5 --【elpis全栈项目】

前端工程化之手搓webpack5 --【elpis全栈项目】 导读 基本流程&#xff1a;输入 – 编译 – 输出 #mermaid-svg-V8Gi7RFNikCuEhax {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-V8Gi7RFNikCuEhax .error-icon{fil…

【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介 此工具要实现的功能是&#xff1a;将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括&#xff1a; 1、Config.daml文件设置&#xff08;UI设置&#xff09; 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …

2023最新版IDEA创建一个SpringBoot项目 (详细教程)

在IDEA中创建一个SpringBoot项目 springboot是我们java开发中最流行的框架之一&#xff0c;下面我们看看如何在idea中创建一个springboot项目。 文章目录 在IDEA中创建一个SpringBoot项目一、springboot简单介绍二、快速开始1.新建项目2.配置Maven3.测试 总结 一、springboot简…

Spring SpEL表达式由浅入深

标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…

Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题

Compose 中的主题内的代码大量定义了 CompositionLocal&#xff0c;因此在学习主题之前&#xff0c;先学习 CompositionLocal 铺垫好基础。 1、CompositionLocal 1.1 显式传参与隐式传参 显式传参需要依赖函数的调用&#xff0c;层层传递&#xff1b;隐式传参通过创建全局变量…

利用webworker解决性能瓶颈案例

目录 js单线程的问题webworker的基本使用webworker的常见应用可视化优化导出Excel js单线程的问题 众所周知&#xff0c;js不擅长计算&#xff0c;计算是同步的&#xff0c;大规模的计算会让js主线程阻塞&#xff0c;导致界面完成卡死。比如有一个600多亿次的计算&#xff0c;…

【数据结构05】排序

系列文章目录 【数据结构05】排序 . 【算法思想04】二分查找 文章目录 系列文章目录[toc] 1. 基本思想与实现1.1 插入类排序1.1.1 直接插入排序&#xff08;*&#xff09;1.1.2 折半插入排序1.1.3 希尔排序&#xff08;*&#xff09; 1.2 交换类排序1.2.1 冒泡排序&#xff08…

数据挖掘——概论

数据挖掘——概论 数据、信息和知识的关联和联系数据挖掘数据挖掘定义数据挖掘的步骤数据挖掘的主要内容 数据、信息和知识的关联和联系 数据、信息和知识是知识工作者感知和认识客观事物的3个连贯的阶段。 数据无处不在&#xff0c;聚合/集成后转化为信息&#xff0c;结构化后…

Hello 2025

Hello 2025 A. MEX Table 题意&#xff1a; 给出 0 到 n ∗ m − 1 的数字&#xff0c;排列成 n m 的表格&#xff0c;最大化 ∑ i 1 n mex ⁡ ( { a i , 1 , a i , 2 , … , a i , m } ) ∑ j 1 m mex ⁡ ( { a 1 , j , a 2 , j , … , a n , j } ) 给出0到n*m-1的数字&…