计算机网络-后退N帧协议(弊端 滑动窗口 运行中的GBN 滑动窗口长度习题 GBN协议性能分析 )

文章目录

  • 停等协议的弊端
  • 后退N帧协议中的滑动窗口
  • GBN发送方必须响应的三件事
  • GBN接受方要做的事
  • 运行中的GBN
  • 滑动窗口长度
  • GBN协议重点总结
  • 习题1
  • 习题2
  • GBN协议性能分析
  • 小结

停等协议的弊端

信道利用率低:在停等协议中,发送方在发送完一帧后必须等待接收方确认(ACK)才能发送下一帧。如果确认丢失或延迟,发送方会因超时而重新发送数据帧,这导致信道在等待确认时处于空闲状态,造成信道资源的浪费。(通过对比完成发送两个帧的所需时长可知道)

流水线:每个数据帧都会接着上一个数据帧发送

此时需要增加序号范围(流水线发送多)并可能还需要缓存多个数据帧(流水线连续发送)
在这里插入图片描述

后退N帧协议中的滑动窗口

发送窗口是一组连续的发送的帧序号(即一个一个发送出去)

发送一个帧后会复制一份保持到发送方
接受方接受到0号帧后会右移一位
发送方接受到0号帧的确认帧ACK 0后会右移一位

接受方可以接受多个帧后再发送最后一个帧的确认帧,这样也能保证前面的帧都已经接受到是因为接受到一个帧接收方的接受窗口才会移动,所以能发送最后一个帧那么之前的帧都已经接受到了。
在这里插入图片描述

GBN发送方必须响应的三件事

累计确认:GBN(Go-back-N)协议中的累计确认是一种机制,用于告知发送方哪些数据已经被接收方成功接收。

在GBN协议中,接收方使用累积确认(Cumulative Acknowledgment)的方式来通知发送方数据的接收状态。这意味着接收方不会为每一个成功接收的数据包都发送确认消息,而是发送一个确认号(ACK),该确认号代表了接收方期望收到的下一个数据包的序号。通过这种方式,发送方可以得知接收方已经成功接收了所有序号在确认号之前的数据包。

例如,如果接收方收到了序号为1、2和3的数据包,但是序号为4的数据包出现了错误或者丢失,那么接收方会发送确认号为4的ACK,表示它已经成功接收了序号为1、2和3的数据包,并且在等待序号为4的数据包。

超时事件GBN的处理行为与停等协议不同

在这里插入图片描述

GBN接受方要做的事

并为最近按序接收的帧重新发送ACK:将没有接收的序号的前一个的确认帧发送,发送方接收到后知道接收方接收到的帧的序号,从而能够发送接收方没有接收到的帧
在这里插入图片描述

运行中的GBN

当发送完1帧接收方并且接收到1帧后,发送的2帧丢失后,即使3帧发送并且接收方接收到了,也会丢弃并发送1号确认帧

当发送方接收到一个确认帧就会右移动相应的窗口数

发送方接收2号确认帧超时时将重传2号帧以及其之后的帧

可以理解接收方吃汉堡必须按照每层规定的吃
在这里插入图片描述

滑动窗口长度

后退N帧协议(Go-Back-N ARQ)中的滑动窗口长度的上界是为了确保接收方能够正确区分新帧和旧帧。

后退N帧协议中,发送方和接收方分别维护一个发送窗口和接收窗口。这些窗口本质上是序号的集合,指示了哪些帧可以被发送或接收。具体来说:

  • 发送窗口:允许发送方发送一组连续编号的帧。
  • 接收窗口:接收方只允许接受一个指定序号的帧,即接收窗口大小通常为1。

使用n比特进行帧编号时,可以产生(2^n)个不同的序号。为了确保接收方不会混淆新旧数据帧,发送窗口的大小应满足1 ≤ W_T ≤ 2^n - 1的条件。如果发送窗口的大小超过 (2^n - 1),则可能会发生一种情况,即某个已经发送但未被确认的数据帧的序号再次出现在窗口中,导致接收方无法区分这是新的传输还是之前已发送过的旧帧的重传。

例如,如果用3比特进行编号,虽然理论上可以有8个不同的序号,但如果设置发送窗口大小为8,那么当发送完0到7号帧后,若这些帧都已正确到达但还未被确认,发送窗口将满且暂停发送。此时,如果发生了错误需要重传,由于序号会重复出现,接收方将无法区分是新的传输还是旧帧的重传,从而可能导致混乱。

在这里插入图片描述

GBN协议重点总结

偶尔捎带确认:接收方偶尔会发送数据给发送方并将确认帧捎带上

确认序列号最大的,按序到达的帧:即当接收到1,2,4确认帧时,会以2为确认帧传回

发送窗口确定后在运行过程就不能轻易改变
在这里插入图片描述

习题1

收到3号帧确认时此时意味着3及之前的帧都接收到了,那么发送窗口将右移4个
在这里插入图片描述

习题2

发送方接收到第一个确认帧时已经发送的字节/发送方接收到第一个确认帧的时间
在这里插入图片描述

GBN协议性能分析

在这里插入图片描述

小结

在这里插入图片描述

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

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

相关文章

List去重有几种方式

目录 1、for循环添加去重 2、for 双循环去重 3、for 双循环重复坐标去重 4、Set去重 5、stream流去重 1、for循环添加去重 List<String> oldList new ArrayList<>();oldList.add("张三");oldList.add("张三");oldList.add("李四&q…

二分图的最大匹配

题目 给定一个二分图&#xff0c;其中左半部包含 n1 个点&#xff08;编号 1∼n1&#xff09;&#xff0c;右半部包含 n2 个点&#xff08;编号 1∼n2&#xff09;&#xff0c;二分图共包含 m 条边。 数据保证任意一条边的两个端点都不可能在同一部分中。 请你求出二分图的最…

基于python-socket构建任务服务器(基于socket发送指令创建、停止任务)

在实现ia业务服务器时需要构建一个python-socket客户端&#xff0c;1、要求能与服务器保持心跳连接&#xff0c;每10秒钟发送一次心跳信号&#xff1b;2、要求能根据socket服务器发送的指令创建或终止一个定时任务。 为此以3个类实现该功能&#xff0c;分别为socket通信类&…

Visual Studio Code(VSCode)软件相关(安装、用法、工具等)

1. MacOS使用code .命令行快速打开VScode https://blog.csdn.net/weixin_45345234/article/details/135072918 2. vscode 提示编写代码导入 使用TAB键导入

linux系统中gitlab的备份与恢复和邮件配置

gitlab的备份恢复和邮箱配置 Gitlab备份与恢复数据备份数据恢复 邮箱配置 Gitlab备份与恢复 数据备份 vim /etc/gitlab/gitlab.rb #gitlab的配置文件gitlab_rails[backup_path] "/var/opt/gitlab/backups" #备份默认数据目录如果修改了配置文件 gitlab-ctl…

成功解决SyntaxError: unexpected character after line continuation character

成功解决SyntaxError: unexpected character after line continuation character &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &…

蓝桥杯Learning

Part 1 递归和递推 1. 简单斐波那契数列 n int(input())st [0]*(47) # 注意这个地方&#xff0c;需要将数组空间设置的大一些&#xff0c;否则会数组越界 st[1] 0 st[2] 1 # 这个方法相当于是递推&#xff0c;即先求解一个大问题的若干个小问题 def dfs(u):if u 1:print(…

Object中的hashCode()

让hashcode方法的返回值为地址 vm参数中输入-XX:UnlockExperimentalVMOptions -XX:hashCode4&#xff0c;如下图&#xff1a; 参考 搞懂JAVAObject中的hashCode()_java_脚本之家 JDK核心JAVA源码解析(9) - hashcode 方法 - 知乎

pop链构造 [NISACTF 2022]babyserialize

打开题目 题目源代码如下 <?php include "waf.php"; class NISA{public $fun"show_me_flag";public $txw4ever;public function __wakeup(){if($this->fun"show_me_flag"){hint();}}function __call($from,$val){$this->fun$val[0];…

【小沐学QT】QT学习之Web控件的使用

文章目录 1、简介1.1 Qt简介1.2 Qt下载和安装1.3 Qt快捷键1.4 Qt帮助 2、QtWeb控件2.1 测试代码1&#xff08;QApplication&#xff09;2.2 测试代码2&#xff08;QApplicationQWidget&#xff09;2.3 测试代码3&#xff08;QApplicationQMainWindow&#xff09;2.4 测试代码4&…

记录一下 Unity团结引擎开发OpenHarmony Next 应用 环境搭建流程

原视频链接 记录环境搭建过程~&#xff0c;本文是图文版本 一、打开团结引擎官网下载对应的 团结引擎版本 官网地址&#xff1a;https://unity.cn/tuanjie/releases 根据各自的开发环境下载对应的软件版本&#xff0c;我是 windwos 环境&#xff0c;我就下载 windows 环境 …

微服务-实用篇

微服务-实用篇 一、微服务治理1.微服务远程调用2.Eureka注册中心Eureka的作用&#xff1a;搭建EurekaServer服务Client服务注册服务发现Ribbon负载均衡策略配置Ribbon配置饥饿加载 3.nacos注册中心使用nacos注册中心服务nacos区域负载均衡nacos环境隔离-namespaceNacos和Eureka…

深度学习神经网络实战:多层感知机,手写数字识别

目的 利用tensorflow.js训练模型&#xff0c;搭建神经网络模型&#xff0c;完成手写数字识别 设计 简单三层神经网络 输入层 28*28个神经原&#xff0c;代表每一张手写数字图片的灰度隐藏层 100个神经原输出层 -10个神经原&#xff0c;分别代表10个数字 代码 // 导入 Ten…

负载均衡.

简介: 将请求/数据【均匀】分摊到多个操作单元上执行&#xff0c;负载均衡的关键在于【均匀】。 负载均衡的分类: 网络通信分类 四层负载均衡:基于 IP 地址和端口进行请求的转发。七层负载均衡:根据访问用户的 HTTP 请求头、URL 信息将请求转发到特定的主机。 载体维度分类 硬…

前端开发_Vue入门

Vue概念 Vue 是一个用于构建用户界面的渐进式框架 构建用户界面&#xff1a;基于数据渲染出用户看到的页面渐进式&#xff1a;循序渐进框架&#xff1a;一套完整的项目解决方案 创建Vue实例 准备容器 引包&#xff08;开发版本/生产版本&#xff09; <script src"h…

消息中间件篇之Kafka-数据清理机制

一、Kafka文件存储机制 Kafka文件存储结构&#xff1a;一个Topic有多个分区。每一个分区都有多个段&#xff0c;每个段都有三个文件。 为什么要分段&#xff1f;1. 删除无用文件方便&#xff0c;提高磁盘利用率。 2. 查找数据便捷。 二、数据清理机制 1.日志的清理策略方案1 根…

学习面向对象

面向对象 概念 现实生活&#xff1a; 类&#xff1a;抽象的概念&#xff0c;把具有相同特征和操作的事物归为一类 先有实体&#xff0c;再有类的概念 代码世界&#xff1a; 类&#xff1a;抽象的概念&#xff0c;把具有相同属性和方法的对象归为一类 编写顺序&#xff1a;先有…

神经网络系列---池化

文章目录 池化最大池化平均池化 池化 最大池化 最大池化&#xff08;Max Pooling&#xff09;是卷积神经网络中常用的一种池化技术。其操作是&#xff1a;在输入特征图的一个局部窗口内选取最大的值作为该窗口的输出。 数学表达式如下&#xff1a; 考虑一个输入特征图 A A…

[C++][linux]Linux上内存共享内存用法

一&#xff0c;什么是共享内存 共享内存&#xff08;Shared Memory&#xff09;&#xff0c;指两个或多个进程共享一个给定的存储区。进程可以将同一段共享内存连接到它们自己的地址空间中&#xff0c;所有进程都可以访问共享内存中的地址&#xff0c;就好像它们是由用C语言函…

【ELK05】es的java-api操作-Java High Level REST Client常用功能

1.客户端概括 1.1支持多种客户端 ES支持多种语言客户都安,包括ruby js python java go .net等,其中java目前最新版本的客户都安支持2种方式。一种是旧版已经过时的transport client ,一种是java high level rest client,前者是通过tcp协议链接访问es,后者就是java代码实…