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

一、流量控制

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

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:发送有效数据的时间(时间往往需要换算计算):

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper是如何保证事务的顺序一致性的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何保证事务的顺序一致性的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何保证事务的顺序一致性的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过多个机制来保证事务的顺序一…

实际开发中,常见pdf|word|excel等文件的预览和下载

实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…

Qt使用CMake编译项目时报错:#undefined reference to `vtable for MainView‘

博主将.h文件和.cpp文件放到了不同的文件目录下面&#xff0c;如下图所示&#xff1a; 于是构建项目的时候就报错了#undefined reference to vtable for MainView&#xff0c;这个是由于src/view目录下的CMake无法自动moc头文件导致的&#xff0c;需要手动moc include/view目录…

会员制电商创新:开源 AI 智能名片与 2+1 链动模式的协同赋能

摘要&#xff1a;本文聚焦于电商领域会员制的关键作用&#xff0c;深入探讨在传统交易模式向数字化转型过程中&#xff0c;如何借助开源 AI 智能名片以及 21 链动模式商城小程序&#xff0c;实现对会员数据的精准挖掘与高效利用&#xff0c;进而提升企业的营销效能与客户洞察能…

第27周:文献阅读及机器学习

目录 摘要 Abstract 一、文献阅读 发现问题 研究方法 CNN-LSTM DT SVR 创新点 案例分析 数据准备 模型性能 预测模型的实现 仿真实验及分析 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周阅读文献《Short-term water qua…

【机器遗忘之UNSIR算法】2023年IEEE Trans期刊论文:Fast yet effective machine unlearning

1 介绍 年份&#xff1a;2023 期刊&#xff1a;IEEE Transactions on Neural Networks and Learning Systems 引用量&#xff1a;170 Tarun A K, Chundawat V S, Mandal M, et al. Fast yet effective machine unlearning[J]. IEEE Transactions on Neural Networks and Le…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程&#xff0c;还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收&#xff0c;那么子进程就会变成一个僵尸进程——即程序执行完成&#xff0c;但是进程没有完全结束&#xff0c;其…

Docker- Unable to find image “hello-world“locally

Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…

Android配件应用默认启动与USB权限申请区别

使用效果&#xff1a; USB配件授权演示 选择USB配件默认打开应用 申请USB配件使用权限

vue2框架配置路由设计打印单

业务效果: 查询出列表后&#xff0c;点击申请单按钮&#xff0c;弹出申请表格&#xff0c;可进行打印 后端实现 控制器、服务层等省略&#xff0c;关联查出数据提供接口给前端即可 <!--获取详细信息(用于申请单打印)--><select id"selectXxxxDetail" par…

第29天:Web开发-PHP应用弱类型脆弱Hash加密Bool类型Array数组函数转换比较

#知识点 1、安全开发-原生PHP-弱类型脆弱 2、安全开发-原生PHP-函数&数据类型 3、安全开发-原生PHP-代码审计案例 一、PHP弱类型对比 1、 和 两个等号是弱比较&#xff0c;使用进行对比的时候&#xff0c;php解析器就会做隐式类型转换&#xff0c;如果两个值的类型不相等就…

在Ubuntu 18.04.6 LTS安装OpenFace流程

一、修改配置:将gcc8&#xff0c;g8作为默认选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 sudo update-alternatives --config gcc 选择版本&#xff0c;再查看gcc --version sudo update-alternatives --install /usr/bin/g g /usr/bin/g-…

【亚马逊云科技】基于Amazon EKS部署高可用的OceanBase的最佳实践

一、前言 随着企业业务的快速发展和数据量的不断增长&#xff0c;高性能、高可用的数据库解决方案成为了关键需求。OceanBase作为一款分布式关系型数据库&#xff0c;以其高扩展性、高可用性和高性能的特点&#xff0c;逐渐受到企业的广泛关注。然而&#xff0c;在复杂的分布式…

计算机网络:网络层知识点及习题(一)

网课资源&#xff1a; 湖科大教书匠 1、概述 网络层实现主机到主机的传输&#xff0c;主要有分组转发和路由选择两大功能 路由选择处理机得出路由表&#xff0c;路由表再生成转发表&#xff0c;从而实现分组从不同的端口转发 网络层向上层提供的两种服务&#xff1a;面向连接…

简历_熟悉缓存高并发场景处理方法,如缓存穿透、缓存击穿、缓存雪崩

系列博客目录 文章目录 系列博客目录1.缓存穿透总结 2.缓存雪崩3.缓存击穿代码总结 1.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对…

阿里云 人工智能与机器学习

阿里云的 人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09; 服务为企业提供了全面的AI解决方案&#xff0c;帮助用户在多个行业实现数据智能化&#xff0c;提升决策效率&#xff0c;推动业务创新。阿里云通过先进的技术和丰富的工具&#xff0c;支持用…

LabVIEW语言学习过程是什么?

学习LabVIEW语言的过程可以分为几个阶段&#xff0c;每个阶段的重点内容逐步加深&#xff0c;帮助你从入门到精通。以下是一个简洁的学习过程&#xff1a; ​ 1. 基础入门阶段 理解图形化编程&#xff1a;LabVIEW是一种图形化编程语言&#xff0c;与传统的文本编程语言不同&am…

【办公类-47-02】20250103 课题资料快速打印(单个docx转PDF,多个pdf合并一个PDF 打印)

背景需求&#xff1a; 2023区级大课题《运用Python优化3-6岁幼儿学习活动材料的实践研究》需要做阶段资料 本来应该2024年6月就提交电子稿和打印稿。可是python学具的教学实验实在太多了&#xff0c;不断生成&#xff0c;我忙着做教学&#xff0c;都没有精力去整理。 2025年…

【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标…

Nginx (40分钟学会,快速入门)

目录​​​​​​​ 一、什么是Nginx ? 可以做什么 &#xff1f; 二、正向代理和反向代理 三、负载均衡 四、动静分离 五、Nginx 常用命令 六、Nginx实战及总结 一、什么是Nginx ? 可以做什么 &#xff1f; Nginx 是高性能的 HTTP 和反向代理的 web 服务器&#xff0c…