【计算机网络篇】数据链路层(4.2)可靠传输的实现机制

news/2024/4/29 8:04:28/文章来源:https://blog.csdn.net/m0_72853403/article/details/137135750

文章目录

  • 🍔可靠传输的实现机制
    • ⭐停止 - 等待协议
        • 🗒️注意
      • 🔎停止 - 等待协议的信道利用率
        • 🗃️练习题
    • ⭐回退N帧协议
      • 🎈回退N帧协议的基本工作流程
        • 🔎无传输差错的情况
        • 🔎超时重传的情况
          • 🗃️练习
      • 🌹小结
    • ⭐选择重传协议
      • 🎈选择重传协议的基本工作流程
        • 🗃️练习

在这里插入图片描述

🍔可靠传输的实现机制

⭐停止 - 等待协议

如下图所示,收发双方基于因特网进行通信,而不是局限在一条点对点的数据链路。纵坐标是时间
发送方给接收方发送一个数据分组,接收方对其进行差错检测,并向发送方发送确认分组
发送方收到接收方的确认分组后,才能发送下一个数据分组在这里插入图片描述


发送方给接收方发送一个数据分组,但是数据分组丢失了在这里插入图片描述

如下图所示,我们来展示一下解决上述情况的方法
在这里插入图片描述
但是,上面的这种停止 - 等待协议,仍然不能完全实现可靠传输,比如下面的情况
在这里插入图片描述
在这里插入图片描述

🗒️注意

在这里插入图片描述

🔎停止 - 等待协议的信道利用率

发送方发送完一个数据分组后就停止发送,并等待接收方对该数据分组的确认,当收到确认分组后,可以发送下一个数据分组,如此反复进行在这里插入图片描述
TD:发送方发送数据分组所耗费的发送时延
RTT:信号在收发双方之间往返传播所耗费的时间
TA:接收方发送确认分组所耗费的数据时延
TD+RTT+TA:是使用停止等待协议的发送方,从发送一个数据分组开始,到可以发送下一个数据分组为止所经历的时间


由于仅仅是在时间TD内才用来传送有用的数据,也就是数据分组,因此,信道利用率U可以使用下面的公式进行计算
在这里插入图片描述

上述推导没有考虑超时重传的情况
若出现超时重传,对于传送有用的数据信息来说,信道利用率还要降低。
在往返时间RTT相对较大的情况下,为了提高信道利用率,收发双方不适合采用停止-等待协议,而可以选择使用回退N帧(GBN)协议或选择重传(SR)协议。

🗃️练习题

在这里插入图片描述

⭐回退N帧协议

在这里插入图片描述

TD:数据分组的发送时延
RTT:信号在收发双方之间的往返传播时延
由于确认分组一般很短,所以发送时延一般可以忽略(所以没有在图中画出)


如果发送方在未收到接收方发来确认分组的时候,可以连续发送多个数据分组,而不必每发送完一个数据分组,就停下来等待接收方的确认分组,则这种来实现传输方式可以显著提高信道利用率
在这里插入图片描述

注意:在使用流水线传输方式时,发送方不能无限制地连续发送数据分组,否则可能会导致网络中的路由器或接收方来不及处理这些数据分组,进而导致数据分组的丢失,这实际上是对网络资源的浪费。
回退N帧协议采用流水线传输方式,并且利用发送窗口来限制发送方连续发送数据分组的数量,这属于连续ARQ协议。


发送方

在这里插入图片描述
接收方

在这里插入图片描述
在这里插入图片描述

🎈回退N帧协议的基本工作流程

🔎无传输差错的情况

发送方将序号落入发送窗口内的0~4号数据分组,依次连续发送出去,他们经过因特网的传输,正确到达了接收方(也就是没有出现乱序和误码)
在这里插入图片描述

接收方按序接受它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对数据分组的确认分组
在这里插入图片描述

0~4号确认分组经过因特网的传输,正确到达了发送方,发送方每按序接收一个确认分组,发送窗口就向前滑动一个位置,这样就有新的序号落入了发送窗口在这里插入图片描述
发送方可以将收到确认的数据分组从发送缓存中删除了,而接收方应当从接收缓存中尽快取走已正确接收到的数据分组在这里插入图片描述
从上面的例子可以看出,在无传输差错的情况下,回退N帧协议的信道利用率比停止-等待协议的信道利用率有显著提高。提高的程度取决于发送窗口的大小。

🔎超时重传的情况

发送方将序号落入发送窗口内的0~4号数据分组,依次连续发送出去,它们经过因特网的传输,按序到达了接收方,然而,二号数据分组在传输过程中产生了误码在这里插入图片描述

接收方按序接收0号和1号数据分组,接收窗口向前滑动2个位置,并给发送方发送0号确认分组和1号确认分组
接收方通过2号数据分组中的检错码,检测出了2号数据分组中有误码,因此将其丢弃,接收窗口不能向前滑动,由于3和4号数据分组的序号未落入接收窗口在这里插入图片描述

因此,接收方将它们丢弃,接收窗口不能向前滑动。
另外,接收方每收到一个未按序到达的数据分组(也就是序号未落入接收窗口的数据分组),除将其丢弃外,还给发送方发送针对最近按序接收的数据分组的确认分组


对于本例,最近已按序接收的是1号数据分组,而接收方丢弃了无法按序接收的3号和4号数据分组。因此,接收方会发送2个针对1号数据分组的重复确认
在这里插入图片描述

发送方收到0号和1号确认分组,就将发送窗口向前滑动2个位置,这样就有新的序号5和6落入发送窗口
发送方现在可以将5号和6号的数据分组依次发送出去
在这里插入图片描述
发送方收到针对1号数据分组的2个重复确认,发送方就知道了 接收方并未按序正确接收2号数据分组,而有2个序号未落入接收窗口的数据分组也不能接收 因此被丢弃
在这里插入图片描述

接收方收到5号和6号数据分组,由于它们的序号未落入接收窗口在这里插入图片描述

因此接收方将它们丢弃,接收窗口不能向前滑动
在这里插入图片描述

并且还会给发送方发送2个针对1号数据分组的重复确认。发送方又收到了针对1号数据分组的2个重复确认在这里插入图片描述

至此,发送方已经收到了针对1号数据分组的4个重复确认,发送方就知道了接收方并未按序正确接收2号数据分组。到目前为止,已有4个序号未落入接收窗口的数据分组被接收方丢弃了。发送方此时可以立即重传2号数据分组,也就是在2号数据分组的重传计时器超时前,就提早进行重传。
需要说明的是,发送方收到几个重复确认后就立即开始重传,可由具体实现决定


为了简单起见,对于本例,我们假设发送方收到4个重复确认时仍然不会立刻重传,当2号数据分组发生超时,发送方就将序号落入发送窗口内的超时的 2号数据分组,和其后已发送的3~6号数据分组全部重传
在这里插入图片描述

尽管发送方之前已发送的3 ~ 6号数据分组到达接收方的时候并未出现误码,但是接收方只能接收序号落入接收窗口内的数据分组。因此,一旦2号数据分组出现误码被接收方丢弃,其后连续发送的3 ~ 6号数据分组都要被重传这就是回退N帧协议名称的由来
即:一旦出错,就需要退回去重传已发送过的N个数据分组

从本例可以看出:一个数据分组的差错就可能引起大量数据分组的重传。
在信道质量较差(容易出现误码)的情况下,回退N帧协议的信道利用率并不比停止-等待协议的信道利用率高。

在这里插入图片描述
在这里插入图片描述

🗃️练习

在这里插入图片描述

🌹小结

在这里插入图片描述

⭐选择重传协议

回退N帧协议在无数据分组差错的情况下,其信道利用率比停止—等待协议要高出不少,但是,一个数据分组的差错,就可能引起大量数据分组的重传,而这些重传的数据分组,原本已经正确到达接收方,但由于序号未落入接收窗口内而被接收方丢弃。显然,这些数据分组的重传是对通信资源的严重浪费
为了进一步提高信道利用率,可以设法只重传出现差错的数据分组,这就需要接收窗口WR的尺寸>1,以便先收下失序,但是正确到达接收方且序号落入接收窗口WR内的数据分组,等到所缺数据分组收集齐后,再一并送交上层,这就是选择重传协议在这里插入图片描述
为了使发送方仅重传出现差错的数据分组,接收方不再采用累积确认,而需要对每一个正确接收的数据分组进行逐一确认

🎈选择重传协议的基本工作流程

本例假设采用3个比特给分组编序号,则序号范围是0 ~ (2^3−1)
在这里插入图片描述
发送方将序号落入发送窗口内的0~3号数据分组连续发送给接收方,其中,0号数据分组在传输过程中出现误码
在这里插入图片描述

接收方将其丢弃,接收方将失序但是正确到达接收方且序号落入接收窗口内的1 ~ 3号数据分组进行缓存,并给发送方发送相应的1 ~ 3号确认分组,缓存的1 ~ 3号数据分组暂时不能交付给上层,由于还未收到序号落入接收窗口内的0号数据分组,因此,接收窗口不能向前滑动
在这里插入图片描述

发送方收到失序的1 ~ 3号确认分组后,并不能向前滑动发送窗口,但要记录1 ~ 3号数据分组已被确认(这里的失序是指:没有收到0号数据分组,就收到了1 ~ 3号确认分组,因此,只有0号数据分组被超时重传)在这里插入图片描述
0号数据分组正确到达接收方,接收方正确接收序号落入接收窗口内的0号数据分组,并给发送方发送0号确认分组,接收方现在可以将接收窗口向前滑动4个位置,这样,序号4 ~ 7落入接收窗口内,0号确认分组正确到达发送方
在这里插入图片描述

发送方收到0号确认分组后,将发送窗口向前滑动4个位置,这样,序号4 ~ 7就落入发送窗口内,这样,发送方就可以将序号落入发送窗口内的4 ~ 7号数据分组连续发送出去,而接收方也在等待接收序号落入接收窗口内的4 ~ 7号数据分组在这里插入图片描述
发送方可将发送缓存中 序号已被移除发送窗口 的数据分组删除了,而接收方应尽快将接收缓存中序号已被移出接收窗口的数据分组取走在这里插入图片描述

🗃️练习

在这里插入图片描述

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

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

相关文章

Linux vim用法

在命令模式下,点i 进入输入模式 输入模式下:通过箭头可以实现左右上下移动 o是从新起下一行开始写 O是新起上一行开始写 $是到此行的末尾 0是到此行的开头 gg是到第一行 yy是复制此行,p是粘贴 dd是删除此行 u是撤销 Ctrl r是反向撤…

边缘计算网关在机械制造企业的应用效果和价值-天拓四方

随着智能制造行业的飞速发展,数据量的激增和实时性要求的提高,传统的数据处理方式已经难以满足生产需求。而边缘计算网关的出现,为智能制造行业带来了革命性的变化。下面,我们将通过一个具体案例展示边缘计算网关在智能制造行业的…

pycharm使用远程服务器的jupyter环境

1、确保服务器上安装了jupyter,如果没有,执行下面命令安装 pip install jupyter2、启动jupyter notebook服务 jupyter notebook --no-browser --port8888 --ip0.0.0.0 --allow-root表明在服务器的8888 端口上启动 Jupyter Notebook,并允许从任何 IP 地…

手动实现一个扩散模型DDPM

扩散模型是目前大部分AIGC生图模型的基座,其本质是用神经网络学习从高斯噪声逐步恢复图像的过程,本文用python代码从零开始构建了一个简单的扩散模型。 理论部分 DDPM(Denoising Diffusion Probabilistic Models) 是一种在生成对抗网络等技术的基础上发展…

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的,可以图片添加水印。 您可以在视频点播中进行配置: https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

小米汽车正式发布:开启智能电动新篇章

随着科技的不断进步,汽车产业正经历着前所未有的变革。智能电动汽车作为这一变革的重要方向,正吸引着越来越多的目光。在这个充满机遇和挑战的时代,小米汽车凭借其卓越的技术实力和深厚的市场底蕴,终于迈出了坚实的一步。今天&…

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议) 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手,243)1.1 为什么要三次握手,两次不行吗? 2. 释放连接的过程(…

Java基础语法(二)

前言 Hello,大家好!很开心与你们在这里相遇,我是一个喜欢文字、喜欢有趣的灵魂、喜欢探索一切有趣事物的女孩,想与你们共同学习、探索关于IT的相关知识,希望我们可以一路陪伴~ 1. 类型转换 1.1 自动类型转换 什么是自…

RabbitMQ3.x之三_RabbitMQ新建用户及开启远程访问

RabbitMQ3.x之三_RabbitMQ新建用户及开启远程访问 文章目录 RabbitMQ3.x之三_RabbitMQ新建用户及开启远程访问1. guest不能远程访问2. 创建专有用户远程访问RabbitMQ1. 创建用户2. 给用户分配tag(角色)3. 开启远程访问 3. 新用户远程登录 1. guest不能远程访问 在 RabbitMQ 中&…

网络爬虫框架Scrapy的入门使用

Scrapy的入门使用 Scrapy概述引擎(Engine)调度器(Scheduler)下载器(Downloader)SpiderItem Pipeline 基本使用安装scrapy创建项目定义Item数据模型对象创建爬虫(Spider)管道pipeline来保存数据启动爬虫 其他…

利用lidar生成深度图

前言 目前,深度图像的获取方法有:激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法等。针对深度图像的研究重点主要集中在以下几个方面:深度图像的分割技术,深度图像的边缘检测技术,基于…

python的神奇bug2

今天测试出一个很诡异的bug, 这个错误还真的很难发现 测试1 a [1,10,100] for i in a:print(i)if(i10):a[20,30,-1]一般来说我们在进行迭代时,a这个值时不能改动的,但是现在的问题时如果我不小心给改动了呢,结果如下 也就是说…

文本文件操作

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 文件操作 程序运行时&#xff0c;产生的数据都是临时数据&#xff0c;程序一旦运行结束都会被释放。通过文件可以将数据持久化。 C中对文件进行操作需要包含头文件<fstream> 文件…

关于深度学习的 PyTorch 项目如何上手分析?从什么地方切入?

文章目录 PyTorch 项目分析1.背景2.分析流程 PyTorch 项目分析 1.背景 当我们拿到一个 PyTorch 的深度学习项目时&#xff0c;应该怎么入手&#xff1f;怎么去查看代码&#xff1f; 2.分析流程 首先阅读对应项目的 README.md 文件。通过阅读 README.md &#xff0c;一般可以…

【Redis面试题】Redis 的大 Key 对持久化有什么影响?

目录 大 Key 对 AOF 日志的影响大 Key 对 AOF 重写和 RDB 的影响总结 Redis 的持久化方式有两种&#xff1a;AOF 日志和 RDB 快照。 所以接下来&#xff0c;针对这两种持久化方式具体分析分析。 大 Key 对 AOF 日志的影响 先说说 AOF 日志三种写回磁盘的策略 Redis 提供了 3 …

记录在项目中引用本地的npm包

1、先把需要的包下载下来&#xff0c;以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…

HarmonyOS 应用开发之UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动三方支付UIAbility&#xff09;。 本文将从如下场景…

Etcd 基本入门

1&#xff1a;什么是 Etcd ? Etcd 是 CoreOS 团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;Etcd基于 Go 语言实现。 名字由来&#xff0c;它源于两个方面&#xff0c;…

面试笔记——MyBatis(执行流程、延迟加载和缓存)

MyBatis 是一个持久层框架&#xff0c;用于简化 Java 应用程序与数据库之间的交互过程。具体而言&#xff0c;它提供了一种将数据库操作映射到 Java 方法的方式&#xff0c;通过 XML 文件或注解配置 SQL 语句与 Java 方法的映射关系。使用 MyBatis&#xff0c;开发人员可以通过…

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后&#xff0c;创建对象trainer时&#xff0c;需要从默认配置中获取类DetectionTrainer初始化所需的参数args&#xff0c;如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…