目录

  • ARQ协议与滑动窗口协议
    • 一.ARQ协议
      • 1.停等ARQ协议
        • (1)工作原理
        • (2)效率分析
      • 2.退回N帧ARQ协议
        • (1)滑动窗口协议
        • (2)工作原理
        • (3)GBN缺陷
      • 3.选择ARQ协议
        • (1)工作原理
        • (2)发送窗口和接收窗口的尺寸限制

ARQ协议与滑动窗口协议

一.ARQ协议

(Automatic Repeat-reQuest,ARQ)自动重传请求.
是一种传输层和数据链路层都在使用的网络协议。传统自动重传请求分成为三种,即停等式(stop-and-wait)ARQ,回退n帧(go-back-n)ARQ,以及选择性重传(selective repeat)ARQ。后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议。三者的区别在于对于出错的数据报文的处理机制不同。三种ARQ协议中,复杂性递增,效率也递增。除了传统的ARQ,还有混合ARQ(Hybrid-ARQ)。

1.停等ARQ协议

(1)工作原理

停等ARQ协议是最原始简单的ARQ协议,该协议分组的编号(序列号)只有0和1两种,停等ARQ的工作方式可以如下描述:

  • 发送方发送一个序列号为0或1的分组,然后进入等待确认分组ack的状态
  • 发送方发送分组的同时为该分组设置一个计时器,假如在设置的时间内未收到该分组的确认号ack,则重发该分组。
  • 接收方接收到发送方刚才发送的分组之后,向发送方返回一个为0或1的确认号ack。
  • 假如接收方刚才已经接收到了编号为0的分组,而下一个接收到的还是编号为0的重复分组,则丢弃掉该分组,同时也要返回ack。
  • 发送方收到接收方返回的ack之后检查该ack是否是发送方正在等待的ack,如果是,则转换状态发送下一个编号的分组,如果不是则继续等待期望收到的ack。

停等ARQ协议更详细具体的工作过程和状态可以参照下图:

(2)效率分析

停等ARQ协议虽然实现简单,但是效率很差,下面进行分析:

停等ARQ协议的发送效率为(L/R)/ [(L/R)+RTT] 从上面分析可以看出,L/R的时间通常很小,只是分组通过链路的时间,而RTT的时间通常比这L/R的时间大得多,这就意味着停等ARQ协议运行的大部分时间内,发送发都处在等待分组确认返回的状态,浪费了资源效率低下。为了改进效率低下的问题,我们可以让发送方连续发送多个分组:
如图所示,连续发送三个分组的情况使得效率显著提升,所以我们引出连续发送多个分组的连续ARQ协议

2.退回N帧ARQ协议

(1)滑动窗口协议

连续ARQ协议通常是借助滑动窗口协议运行的:

滑动窗口协议就是设置一个固定大小的窗口,在一定时间内只处理窗口中的数据。当窗口中最左边的数据被处理完成之后,窗口会向右进行滑动,转而连续地处理后面的数据。

(2)工作原理

  • 发送方在窗口允许的分组范围内连续发送分组
  • 接收方接收到分组后如果是期望的分组(按序到达的分组),则保存该分组并更新下一个期望收到的分组编号,如果不是期望的分组(乱序到达的分组),则丢弃该分组。两种情况都要返回相应的ack。
  • 假如发送方发送到了第j个分组,而其中第i个分组丢失或者超时了,那么发送方将会重新发送第i到第j这n个分组。即从丢失超时分组开始,重发已经发送的所有分组。
  • 发送方在接收到接收方返回的ack号之后,将窗口中对应的等待的ack的分组变为已确认的分组,每当窗口最左边的分组被确认时,窗口就要向右滑动一个分组。
  • GBN-ARQ协议采用了累计确认的机制,也就是说接收方返回的ack号是目前已经接收的最后一个分组的编号,这意味着该ack号前的n个分组都已经被接收了。

(3)GBN缺陷

GoBackN协议的缺陷在于每次分组丢失时,都有可能重传多个分组而使得效率下降。假如窗口的大小是N,已经将N个分组全部发送而此时第一个发送的分组丢失了,这是最坏的情况,因为这将会导致所有分组被重新发送而浪费了时间和资源。

3.选择ARQ协议

(1)工作原理

选择ARQ协议也是连续ARQ协议,与GBN-ARQ协议不同的是,选择ARQ协议采用分组单独确认的机制,并且为每个乱序到达的分组设置缓存,而不是单纯地丢弃它们。当接收方接收到的分组序列号可以和缓存中的分组序列号连起来时,直接取出这些缓存中的分组即可而避免了让发送方重发。发送方在分组超时和丢失时也不必重发所有发送过的分组,而只是重新发送哪些未收到ack确认号的分组。

发送方和接收方窗口

接收窗口与发送窗口相类似,只有当最左边期望接收的分组接收到之后,窗口才会向右移动。而在此分组之后的分组如果乱序接收到之后会先缓存起来。如果乱序的分组和最前面期望的分组接收到并连起来之后,则将它们一并变为已接受到的分组然后右移。

(2)发送窗口和接收窗口的尺寸限制


假设用k个字节对分组进行编号,则发送窗口的尺寸Ns和接收窗口的尺寸Nr之间必须满足:Ns+Nr<=2^k这样的关系式ARQ协议才能正常运行。

为什么是满足这样的关系式?
下面介绍一些情形并分析:
假设接收窗口和发送窗口的大小都是3,而分组编号为0~3,则在下面的两种情况下会出现问题:即分组编号不够用,接收方无法辨别并处理最后接收到的分组0是否是重复分组

下面这道例题也进一步证明了Ns与Nr之间的大小关系,可以作为参考:


ARQ协议与滑动窗口协议相关推荐

  1. TCP连续ARQ协议和滑动窗口协议

    TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输. 一.ARQ协议 ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模 ...

  2. 3.4.1 计算机网络之流量控制(停止-等待协议、滑动窗口、后退N帧协议GBN、选择重传协议SR)、滑动窗口、可靠传输机制

    文章目录 0.思维导图 1.什么是流量控制? 2.什么是可靠传输机制? 3.什么是滑动窗口机制? 4.可靠传输.流量控制.滑动窗口之间的关系 5.停止-等待协议 (1)为什么要有停止-等待协议? (2 ...

  3. 计算机网络之传输层:6、TCP流量控制、滑动窗口协议

    传输层:6.TCP流量控制 实现流量控制的方法: TCP流量控制: 实现流量控制的方法: 停止等待协议和滑动窗口协议 TCP流量控制:

  4. 实用知识点梳理:BGP协议、调制解调技术、路由特点、VOIP、FTP、Cookie、滑动窗口协议与自动重传请求

    BGP协议 边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议. BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议.BGP构建在 ...

  5. 三句话介绍清楚滑动窗口协议/GBN/SR

    滑动窗口协议.GBN.SR之间不得不说的故事 首先我们来介绍什么是滑动窗口协议 滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制, ...

  6. TCP滑动窗口协议与流量控制

    谈到TCP的滑动窗口协议与流量控制,便会想起当年面试时的场景.那时刚刚毕业,匆匆学了一点TCP的皮毛,仅仅是知道了TCP是面向连接的协议,以对每个报文都进行确认+超时重传的机制来保证端到端的可靠传输: ...

  7. 网络通信-滑动窗口协议-SWP

    本篇主要讲解:网络通信-滑动窗口协议-SWP 参考链接1 参考链接2 参考链接3 目录 文章目录 网络通信-滑动窗口协议-SWP TCP可靠传输 窗口介绍 窗口和缓存的关系 功能作用 窗口大小 工作原 ...

  8. WireShark 探索网络请求过程(五层网络模型、三次握手、滑动窗口协议)

    ​当我们在浏览器输入URL点击确认后,浏览器展示出网页信息.可你曾想过这其中的过程是怎样的?理论性较强的朋友可能知道后续DNS会解析地址,然后TCP/IP三次握手建立起连接,紧接着客户端与服务器开始传 ...

  9. 【计算机网络】数据链路层 : 流量控制 ( “流量控制“ 机制 | 停止-等待协议 | 滑动窗口协议 | 后退 N 帧协议 GBN | 选择重传协议 SR | 滑动窗口 与 流量控制、可靠传输 )

    文章目录 一. 数据链路层 流量控制 二. 数据链路层 与 传输层 流量控制 机制 三. 数据链路层 流量控制 四. 数据链路层 流量控制 方法分类 五.停止等待协议 六.滑动窗口协议 七.滑动窗口协 ...

  10. 117.滑动窗口协议

    滑动窗口协议是TCP流量控制的一种方法,提高吞吐量避免阻塞. 把待发送报文或者分组分成四种状态 1.已发送,已接收 2.已发送,未接收 3.可以发送,但还没发送 4.不可以发送 2跟3划分成一个窗口, ...

最新文章

  1. 某程序员求助:求职大厂时合并简历,如今面试已过,还能坦白吗?
  2. C#.NET学习笔记---C#中的条件编译
  3. cmd锁定计算机病毒,反病毒常用CMD命令大全
  4. java 怎么向串口发送指令_idea ssm项目java程序使用十六进制rxtx包向串口发送指令的方法...
  5. SAP中服务性订单的替代解决方案
  6. ubuntu16 redis5.0以后版本集群部署示例
  7. SQL Server 2008 高可用性视频(四)-- 故障转移群集
  8. [css] CSS中的calc()有什么作用?
  9. 记一次吐血的ping: unknown host
  10. BBlean最初级的入门幽默教程
  11. 将unsigned char字符串以16进制的字符串显示
  12. http响应返回的状态码
  13. 六、Spring MVC之返回数据
  14. java下载不了怎么_如何下载和安装Java
  15. 融云 SDK 5.0.0 功能迭代
  16. React-native设置全局函数globle【适用于有组件嵌套时】
  17. 慧荣SM2263XT量产开卡成功,附SM2263XT量产工具、开卡软件(一个512G固态硬盘不认盘修复教程)
  18. Windows 8轻松用系列
  19. 费解的开关 (蓝桥杯倒计时12天)
  20. Geoffrey Hinton

热门文章

  1. 高效液相色谱分析的基本原理
  2. u盘扩容盘用什么软件测试,如何检测所购买的U盘是否为扩容盘?
  3. 卷积神经网络应用领域和基本结构
  4. 深入linux网络编程(四):使用asio搭建商用服务器
  5. 虚拟仿真实验平台服务器需求,虚拟仿真实验中心平台建设方案.pptx
  6. Android shape自定义形状,设置渐变色
  7. Android,APP图标尺寸
  8. revit二次开发概念_Revit二次开发那些事儿
  9. 你们要的Echart系列,今天它来了,教你一招快速上手echarts的属性设置,手把手教程系列
  10. xUtils更新到3.0后的基本使用规则