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

news2024/11/13 9:19:19

文章目录

  • 🍔可靠传输的实现机制
    • ⭐停止 - 等待协议
        • 🗒️注意
      • 🔎停止 - 等待协议的信道利用率
        • 🗃️练习题
    • ⭐回退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.coloradmin.cn/o/1553460.html

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

相关文章

GitHub开源项目权限管理-使用账号和个人令牌访问

1.打开后台账号设置 2.找到左下角的Developer settings 3.找到Personal access tokens 的 Tokens(classic) 4.选择创建新证书 5.填写证书信息 6.点击生成证书,复制证书并且保存起来(血泪教训,证书只会在创建时显示一次,以后就再也…

篮球论坛系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. …

iOS UIFont-实现三方字体的下载和使用

UIFont 系列传送门 第一弹加载本地字体:iOS UIFont-新增第三方字体 第二弹加载线上字体:iOS UIFont-实现三方字体的下载和使用 前言 在上一章我们完成啦如何加载使用本地的字体。如果我们有很多的字体可供用户选择,我们当然可以全部使用本地字体加载方式,可是这样就增加了…

SpringBoot3任务处理

目录 1.异步任务 无返回值异步任务 效果 有返回值异步任务 效果 2.定时任务 效果 3.邮件任务 获取授权码 加入依赖 配置文件 纯文本邮件 效果 复杂邮件 效果 1.异步任务 Async注释: SpringBoot中的异步调用,可以写在类上或方法上&#…

如何选择指纹浏览器?盘点好用是防关联浏览器

在网络世界中,保护您的在线隐私和安全非常重要。反检测浏览器是专门为此诞生的工具,旨在通过更改浏览器指纹来帮助您做到这一点,它们使网站、广告商和其他人很难跟踪您的在线行为。 一、什么是反检测浏览器? 您是否想过网站如何检…

PCD3012五通道高功率因数LED控制芯片,集成700V高压MOSFET 低THD 外围极少元件

概述 PCD 3012B 是一款五段低 THD 、高功率因数 LED 线性恒流控制芯片,芯片集成了 700V 高压 MOSFET ,采用独特创新的器件工艺技术,具有优越的抗雪崩击穿及浪涌能力,在外围无保护器件时可通过650V 雷击浪涌测试,内置…

实验7 内置对象response

编写代码&#xff0c;掌握request、response的用法。【参考课本4.6.2】 三、源代码以及执行结果截图&#xff1a; input.jsp <% page language"java" contentType"text/html; charsetutf-8" pageEncoding"utf-8"%> <!DOCTYPE html>…

重学SpringBoot3-SpringBoot可执行JAR的原因

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringBoot可执行JAR的原因 Spring Boot可执行JAR的结构打包运行JAR 包内部结构 工作原理优点总结 Spring Boot 的一个核心特性是它的可执行 JAR&#x…

在word中显示Euclid Math One公式的问题及解决(latex公式,无需插件)

问题&#xff1a;想要在word中显示形如latex中的花体字母 网上大多解决办法是安装Euclid Math One。安装后发现单独的符号插入可行&#xff0c;但是公式中选择该字体时依然显示默认字体。 解决办法&#xff1a;插入公式后&#xff0c;勾选左上角的latex 在公式块中键入latex代码…

在宝塔面板中,为自己的云服务器安装SSL证书,为所搭建的网站启用https(主要部分攻略)

前提条件 My HTTP website is running Nginx on Debian 10&#xff08;或者11&#xff09; 时间&#xff1a;2024-3-28 16:25:52 你的网站部署在Debain 10&#xff08;或者11&#xff09;的 Nginx上 安装单域名证书&#xff08;默认&#xff09;&#xff08;非泛域名&#xf…

Tensorflow2.0笔记 - metrics做损失和准确度信息度量

本笔记主要记录metrics相关的内容&#xff0c;详细内容请参考代码注释&#xff0c;代码本身只使用了Accuracy和Mean。本节的代码基于上篇笔记FashionMnist的代码经过简单修改而来&#xff0c;上篇笔记链接如下&#xff1a; Tensorflow2.0笔记 - FashionMnist数据集训练-CSDN博…

Codeforces Round 937 (Div. 4)

A. Stair, Peak, or Neither?&#xff08;模拟&#xff09; #include<iostream> using namespace std;int main(){int t;scanf("%d", &t);int a, b, c;while(t--){scanf("%d%d%d", &a, &b, &c);if(a < b && b < c) p…

(免费分享)基于微信小程序电影院购票系统带论文

基于小程序的电影院购票管理系统【含报告】&#xff1a;前端 vue、elementui、小程序&#xff0c;后端 maven、springboot、springmvc、spring、mybatis&#xff0c;角色分为管理员、用户&#xff1b;集成小程序浏览电影&#xff0c;购票等功能于一体的系统。 目录 摘要 I Ab…

fpga 通过axi master读写PS侧DDR的仿真和上板测试

FPGA和ARM数据交互是ZYNQ系统中非常重要的内容。PS提供了供FPGA读写的AXI-HP接口用于两者的高速通信和数据交互。一般的&#xff0c;我们会采用AXI DMA的方式去传输数据&#xff0c;DMA代码基本是是C编写&#xff0c;对于FPGA开发者来说不利于维护和debug。本文提供一种手写AXI…

系统分析师-数学与经济管理

系统架构设计师 系统架构设计师-软件开发模型总结 文章目录 系统架构设计师前言一、最小生成树二、最短路径三、网络与最大流量四、不确定型决策 前言 数学是一种严谨、缜密的科学&#xff0c;学习应用数学知识&#xff0c;可以培养系统架构设计师的抽象思维能力和逻辑推理能…

【WebJs 爬虫】逆向进阶技术必知必会

前言 在数字化时代&#xff0c;网络爬虫已成为一种强大的数据获取工具&#xff0c;广泛应用于市场分析、竞争对手研究、舆情监测等众多领域。爬虫技术能够帮助我们快速、准确地获取网络上的海量信息&#xff0c;为决策提供有力支持。然而&#xff0c;随着网络环境的日益复杂和…

基于vue的MOBA类游戏攻略分享平台的设计与实现|Springboot+Vue+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. …

istio 设置 istio-proxy sidecar 的 resource 的 limit 和 request

方式一 修改 configmap 查看当前 sidecar 的 cpu 和 memory 的配额 在 istio-sidecar-injector 中查找&#xff0c;修改后重启 pod 可以生效&#xff08;下面那个 proxy_init 配置不管&#xff0c;不知道是干嘛的&#xff09; 方式二 如果是通过 iop 安装的 istio&#xf…

连同网络的操作次数【并查集】

用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。线缆用 connections 表示&#xff0c;其中 connections[i] [a, b] 连接了计算机 a 和 b。 网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。 给你这个…

那些激励你深入研究技术的语录

遇到耗时高的问题&#xff0c;90%能用重启解决&#xff0c;但是不找到原因&#xff0c;问题一定会再次出现。 代码里的Bug就像房间里的老鼠&#xff0c;你不找到它&#xff0c;它就会一直捣乱。 代码的质量决定了程序的稳定性&#xff0c;而程序的稳定性则决定了业务的成败。 不…