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

一、流量控制

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

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.mzph.cn/news/891874.shtml

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

相关文章

GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线

文章目录 零、前言一、授权码登录体验优化&#xff1a;一步直达聊天界面二、全新“项目”功能&#xff1a;让工作更有条理三、语音功能升级&#xff1a;全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥&#xff0c;目标是带十万人玩转ChatGPT。 亲爱的用户&…

RabbitMQ-基本使用

RabbitMQ: One broker to queue them all | RabbitMQ 官方 安装到Docker中 docker run \-e RABBITMQ_DEFAULT_USERrabbit \-e RABBITMQ_DEFAULT_PASSrabbit \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network mynet\-d \rabbitmq:3…

弹性云服务器ECS“规格”

规格详细资料&#xff1a;规格清单&#xff08;x86&#xff09;_弹性云服务器 ECS_华为云 通用计算型 各规格详细介绍请参见通用计算型。 规格名称 计算 磁盘类型 网络 通用计算型X1 CPU/内存配比&#xff1a;自定义vCPU数量范围&#xff1a;1-16处理器&#xff1a;第三…

Java SpringBoot使用Apache POI导入导出Excel文件

点击下载《Java SpringBoot使用Apache POI导入导出Excel文件(源代码)》 1. Apache POI 简介 Apache POI 是一个强大的 Java 库&#xff0c;用于处理 Microsoft Office 文档&#xff0c;包括 Excel 文件&#xff08;.xls 和 .xlsx&#xff09;。在 Java Spring Boot 项目中&am…

在 macOS 中,设置自动将文件夹排在最前

文章目录 1、第一步访达设置2、第二步排序方式 需要两步设置 1、第一步访达设置 按名称排序的窗口中 2、第二步排序方式 选择名称

汇编环境搭建

学习视频 将MASM所在目录 指定为C盘

Sentinel-5P遥感数据下载及预处理教程【20250105】

Sentinel-5P是欧空局&#xff08;Europe Space Agency&#xff0c;ESA&#xff09;于2017年10月13日发射的一颗全球大气污染监测卫星。卫星搭载了对流层观测仪&#xff08;Tropospheric Monitoring Instrument&#xff0c;TROPOMI&#xff09;&#xff0c;可以有效的观测全球各…

java项目之高校心理教育辅导系统的设计与实现(springboot+mybatis+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 高校心理教育辅导系统的设…

打造三甲医院人工智能矩阵新引擎(一):文本大模型篇--基于GPT-4o的探索

一、引言 当今时代,人工智能技术正以前所未有的速度蓬勃发展,深刻且广泛地渗透至各个领域,医疗行业更是这场变革的前沿阵地。在人口老龄化加剧、慢性疾病患病率上升以及人们对健康需求日益增长的大背景下,三甲医院作为医疗体系的核心力量,承担着极为繁重且复杂的医疗任务。…

美的空气净化器好用吗?拾梧、美的、戴森空气净化器除烟哪个好?

说到二手烟&#xff0c;这可真是个让人头疼的问题&#xff01;它里面含有超过7000种化学物质&#xff0c;形式多样&#xff0c;处理起来比甲醛这些传统污染物难多了。在市场上那么多空气净化器里&#xff0c;要挑一个能真正对付二手烟的&#xff0c;简直就像大海捞针一样难。不…

WebRtc01:课程导学、框架介绍

应用 难点 课程大纲 学习收获 涉及内容 概述 用途 学习收获

电脑steam api dll缺失了怎么办?

电脑故障解析与自救指南&#xff1a;Steam API DLL缺失问题的全面解析 在软件开发与电脑维护的广阔天地里&#xff0c;我们时常会遇到各种各样的系统报错与文件问题&#xff0c;其中“Steam API DLL缺失”便是让不少游戏爱好者和游戏开发者头疼的难题之一。作为一名深耕软件开…

关系数据库查询与优化

关系数据库查询与优化 (1)查询所有没发表过文章的用户名(2)查询得票数大于100的所有文章标题,按得票数倒序排列(3)查询发表文章数大于5,文章平均得票数大于100的用户名,按平均得票数倒序排列(4)表的主键、外键和索引设计(5)大数据量下的存储及性能优化在关系数据库…

【Android项目学习】3. MVVMHabit

项目链接 文章目录 一. 项目结构1. 项目整体划分2. 模块细分 二. Android知识点学习1. registerActivityLifecycleCallbacks方法2. 一. 项目结构 1. 项目整体划分 MVVMHabit是以谷歌DataBindingLiveDataViewModel框架为基础&#xff0c;整合OkhttpRxJavaRetrofitGlide等流行…

GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程

大家好&#xff0c;今天给大家介绍一下&#xff1a;GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程。 文章目录 一、GPU算力平台概述人工智能智能发展为什么需要GPU算力平台 二、注册与登录账号注册流程 三、平台的应用之Anydoor应用启动器选择Anydoor的应用场景Anydoo…

学习虚幻C++开发日志——创建Selection Widget及其应用

教程视频&#xff1a;脚本冒险 - YouTube 前提&#xff1a;此代码运用到Common UI插件&#xff0c;需将其开启&#xff0c;以免后序编写产生未定义结构体的报错信息&#xff01; 用C进行UI绑定 创建继承于CommonUserWidget的类&#xff0c;此处命名为SelectionBase Select…

Kafka中的Topic和Partition有什么关系?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka中的Topic和Partition有什么关系&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka中的Topic和Partition有什么关系&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Apache Kafka 中&#…

SpringBoot Maven 项目 pom 中的 plugin 插件用法整理

把 SpringBoot Maven 项目打包成 jar 文件时&#xff0c;我们通常用到 spring-boot-maven-plugin 插件。 前面也介绍过&#xff0c;在 spring-boot-starter-parent POM 和 spring-boot-starter POM 中都有插件的管理&#xff0c;现在我们就撸一把构建元素中插件的用法。 一、…

c和c++中为什么要防止头文件被重复包含!

在编程中&#xff0c;头文件就像一本工具书&#xff0c;它包含了函数、类、宏、全局变量等的定义和声明&#xff0c;供其他代码文件引用。想象一下&#xff0c;如果你在写一篇文章时&#xff0c;反复引用同一本工具书的内容&#xff0c;会发生什么情况呢&#xff1f; 1. 避免重…

django vue3实现大文件分段续传(断点续传)

前端环境准备及目录结构&#xff1a; npm create vue 并取名为big-file-upload-fontend 通过 npm i 安装以下内容"dependencies": {"axios": "^1.7.9","element-plus": "^2.9.1","js-sha256": "^0.11.0&quo…