停止等待协议、回退N帧协议、选择重传协议

停止等待协议、回退N帧协议、选择重传协议的内容、功能特点以及它们之间的区别:

一、停止等待协议

  1. 内容

停止等待协议是最简单但也是最基础的数据链路层协议。该协议规定,发送方每发送一个数据分组后,就停止发送并等待接收方的确认。在收到接收方的确认信号后,发送方再继续发送下一个数据分组。

  1. 功能特点
  • 发送窗口和接收窗口的大小均为1,即每次只能发送和接收一个数据分组。
  • 发送方在发送完数据分组后,必须在其发送缓存中暂时保留这个数据分组的副本,以便在出差错时进行重传。
  • 接收方在接收到数据分组后,需要进行差错校验。如果校验正确,则发送确认信号;如果校验错误,则丢弃该数据分组,并不发送确认信号。
  1. 优缺点
  • 优点:实现简单,容易理解。
  • 缺点:通信信道的利用率不高,信道还远远没有被数据比特填满。

二、回退N帧协议(GBN)

  1. 内容

回退N帧协议是一种基于停等协议的改进版本,可以实现更高效的数据传输。该协议允许发送方连续发送多个数据分组,而不需要在发送每个分组后都等待确认。接收方在接收到数据分组后,按顺序进行确认。如果某个数据分组出错或丢失,则发送方需要从出错或丢失的数据分组开始重新发送后续的所有数据分组。

  1. 功能特点
  • 发送窗口的大小大于1,可以连续发送多个数据分组。
  • 接收窗口的大小为1,接收方只按顺序接收数据分组,不按序则无情丢弃。
  • 使用累积确认的方式,即接收方确认的是按序到达的、序列号最大的数据分组及其之前的所有数据分组。
  1. 优缺点
  • 优点:可以实现高效的数据传输,同时具备了一定的容错性。
  • 缺点:在网络丢包或延迟较大的情况下,可能会导致大量的数据分组需要重传,从而降低了整体的传输效率。

三、选择重传协议(SR)

  1. 内容

选择重传协议是一种更高级的数据链路层协议,它结合了停等协议和回退N帧协议的优点。该协议允许发送方连续发送多个数据分组,并且接收方可以乱序接收数据分组。当某个数据分组出错或丢失时,发送方只需要重传该出错或丢失的数据分组,而不需要重传其他已经正确接收的数据分组。

  1. 功能特点
  • 发送窗口和接收窗口的大小均大于1,可以连续发送和接收多个数据分组。
  • 接收方可以乱序接收数据分组,但需要对每个正确接收的数据分组进行确认。
  • 发送方在收到接收方的确认信号后,会更新发送窗口,并继续发送未确认的数据分组。
  1. 优缺点
  • 优点:可以提高信道的利用率,同时减少因重传而带来的额外开销。
  • 缺点:实现相对复杂,需要维护较大的发送和接收窗口。

四、区别

  1. 发送窗口大小
  • 停止等待协议:发送窗口大小为1。
  • 回退N帧协议:发送窗口大小大于1。
  • 选择重传协议:发送窗口大小大于1,且可以动态调整。
  1. 接收窗口大小
  • 停止等待协议和回退N帧协议:接收窗口大小为1。
  • 选择重传协议:接收窗口大小大于1,可以接收乱序的数据分组。
  1. 重传机制
  • 停止等待协议:出错或丢失时,重传整个数据分组。
  • 回退N帧协议:出错或丢失时,从出错或丢失的数据分组开始重传后续的所有数据分组。
  • 选择重传协议:出错或丢失时,只重传出错或丢失的数据分组。
  1. 信道利用率
  • 停止等待协议:信道利用率最低。
  • 回退N帧协议:信道利用率较高,但可能因大量重传而降低。
  • 选择重传协议:信道利用率最高,且减少了因重传而带来的额外开销。

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

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

相关文章

自动化结账测试:使用 Playwright确保电商支付流程的无缝体验【nodejs]

使用 Playwright 掌握端到端结账测试 在电商领域,结账流程是用户体验中至关重要的一环。确保这一流程的稳定性和可靠性对于维护客户满意度和转化率至关重要。在本文中,我们将探讨如何使用 Playwright 进行端到端的结账测试,确保您的结账系统…

【STM32】单片机ADC原理详解及应用编程

本篇文章主要详细讲述单片机的ADC原理和编程应用,希望我的分享对你有所帮助! 目录 一、STM32ADC概述 1、ADC(Analog-to-Digital Converter,模数转换器) 2、STM32工作原理 二、STM32ADC编程实战 (一&am…

【JAVA基础】什么是泛型? 什么是反射?

什么是泛型? 什么是反射? 什么是泛型?一 , 泛型 (Generics) 概述二 , 泛型的主要功能三 , 泛型的基本概念四 , 泛型的使用场景五 , 泛型的基本步骤六 , 泛型的优缺点七 , 示例代码 什么是反射?一 , 反射 (Reflection) 概述二 , 反射的主要功能1 . 获取类的信息2 . 创建对象…

oracle 行转列(PIVOT 多个行数据按照指定的列进行汇总) 列转行(UNPIVOT)

-- PIVOT是Oracle 11g版本引入的一个功能, 用来做行转列 -- as count1 as count2必须加上, 这样列名就没有引号了使用场景:PIVOT常用于数据透视、数据汇总和数据展示等场景,例如将多个行数据按照指定的列进行汇总,生成一条汇总数据&#xf…

如何对网络设备进行监控:以监控易平台为例

随着信息技术的飞速发展,运维行业正面临着前所未有的挑战。设备的多样性、复杂性以及业务需求的不断变化,都对运维团队提出了更高的要求。在这样的背景下,监控易平台应运而生,为运维团队提供了一种高效、全面的设备监控解决方案。…

java包的使用

在Java中,包(package)用于组织类和接口。它们提供了一种将相关的类和接口组织在一起的方式,使得代码更具可读性和可维护性。 要使用一个Java包,需要以下几个步骤: 在Java源代码文件的开头使用package关键字…

C++STL之stack

1.stack的使用 函数说明 接口说明 stack() 构造空的栈 empty() 检测 stack 是否为空 size() 返回 stack 中元素的个数 top() 返回栈顶元素的引用 push() 将元素 val 压入 stack 中 pop() 将 stack 中尾部的元素弹出 2.stack的模拟实现 #include<vector> namespace abc { …

Web3.0技术入门

Web3.0技术入门是一个涉及多个方面和领域的复杂过程&#xff0c;以下是一些关键的步骤和要点&#xff0c;帮助您初步了解并掌握Web3.0技术。 一、了解Web3.0的基本概念 Web3.0也被称为下一代互联网&#xff0c;它是对当前互联网&#xff08;Web2.0&#xff09;的演进和升级。…

LeetCode 热题 100之普通数组

1.最大子数组和 思路分析&#xff1a;这个问题可以通过动态规划来解决&#xff0c;我们可以使用Kadane’s Algorithm&#xff08;卡登算法&#xff09;来找到具有最大和的连续子数组。 Kadane’s Algorithm 的核心思想是利用一个变量存储当前的累加和 currentSum&#xff0c;并…

MATLAB生物细胞瞬态滞后随机建模定量分析

&#x1f3af;要点 基于随机动态行为受化学主方程控制&#xff0c;定量分析单细胞瞬态效应。确定性常微分方程描述双稳态和滞后现象。通过随机性偏微分方程描述出暂时性滞后会逐渐达到平稳状态&#xff0c;并利用熵方法或截断方法计算平衡收敛速度的估计值。随机定量分析模型使…

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植&#xff0c;肯定少不了在另一台pc或者服务器上进行环境的搭建&#xff0c;那么首先是要知道在已有的工程的代码中用到了哪些包&#xff0c;此时&#xff0c;如果是用人工去一个一个的代码文件中去查看调用了哪些包&#xff0c;这个工作甚是繁琐。…

Flutter 鸿蒙next中的路由使用详解【基础使用】

✅近期推荐&#xff1a;求职神器 https://bbs.csdn.net/topics/619384540 &#x1f525;欢迎大家订阅系列专栏&#xff1a;flutter_鸿蒙next &#x1f4ac;淼学派语录&#xff1a;只有不断的否认自己和肯定自己&#xff0c;才能走出弯曲不平的泥泞路&#xff0c;因为平坦的大路…

C++《vector的模拟实现》

在之前《vector》章节当中我们学习了STL当中的vector基本的使用方法&#xff0c;了解了vector当中各个函数该如何使用&#xff0c;在学习当中我们发现了vector许多函数的使用是和我们之前学习过的string类的&#xff0c;但同时也发现vector当中一些函数以及接口是和string不同的…

Page Cache(页缓存

Page Cache&#xff08;页缓存&#xff09;是操作系统中一种重要的缓存机制&#xff0c;主要用于提高系统对磁盘访问的性能。以下是对Page Cache的详细解释&#xff1a; 一、定义与功能 Page Cache&#xff0c;即页缓存&#xff0c;是操作系统内核管理的一部分内存区域。它将…

H5实现PDF文件预览,使用pdf.js-dist进行加载

H5实现PDF文件预览&#xff0c;使用pdf.js-dist进行加载 一、应用场景 在H5平台上预览PDF文件是在原本已经开发完成的系统中新提出的需求&#xff0c;原来的系统业务部门是在PC端进行PDF的预览与展示&#xff0c;但是现在设备进行了切换&#xff0c;改成了安卓一体机进行文件…

基于neo4j的课程资源生成性知识图谱

你是不是还在为毕业设计苦恼&#xff1f;又或者想在课堂中进行知识的高效管理&#xff1f;今天给大家分享一个你一定会感兴趣的技术项目——基于Neo4j的课程资源生成性知识图谱&#xff01;&#x1f4a1; 这套系统通过知识图谱的形式&#xff0c;将课程资源、知识点和学习路径…

前端页面样式没效果?没应用上?

当我们在开发项目时会有很多个页面、相同的标签&#xff0c;也有可能有相同的class值。样式设置的多了&#xff0c;分不清哪个是当前应用的。我们可以使用网页的开发者工具。 在我们开发的网页中按下f12或&#xff1a; 在打开的工具中我们可以使用元素选择器&#xff0c;单击我…

渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下

day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过 一、时间注入 SQL注入时间注入&#xff08;也称为延时注入&#xff09;是SQL注入攻击的一种特殊形式&#xff0c;它属于盲注&#xff08;Blind SQL Injection&#xff09;的一种。在盲注中&#xff0c;攻击…

【C++】Map()函数

在 C 中&#xff0c;map 是一个关联容器&#xff0c;它存储键值对&#xff0c;每个键都是唯一的&#xff0c;键和值之间存在一对一的映射关系。map 是基于红黑树实现的&#xff0c;因此它提供了对元素的有序存储和高效的查找能力。 1. 基本用法 map 的基本语法如下&#xff1…

基于丑萌气质狗--C#的sqlserver学习

#region 常用取值 查询List<string> isName new List<string> { "第一", "第二", "第三", "第四" }; List<string> result isName.Where(m > m "第三").ToList();MyDBContext myDBnew MyDBContext(…