问题

假设有N位比特可以用来表示帧的序列号,那么应用回退N帧协议的时候,窗口最大可以选择多少呢?

答案

2^N-1

疑点

相信很多人的疑问都是,为什么窗口的最大值不可以是2^n呢?这里首先来用一个图来说明。

假设比特数为3,那么我们按照我们最原始的构想,设计了如上图所示的窗口。按照窗口发送的规则,窗口二第一个元素发送的条件窗口一中的第0号元素被接受,也就是收到的ACK>=0。
当还没有接收到ACK0的时候,是不会产生歧义的,因为窗口二中的0号元素还没有被发送,ACK0唯一的意义便是窗口1中的0被确认。
但是当接收到ACK0的同时,按照协议约定,发送端会继续发送窗口二中的0号元素。就在这时,歧义发生了——
假如再次收到了ACK0,那么如何判定ACK0的真实意义?
是对窗口一中的0元素的重复确认(窗口一后续元素全部丢失)?
还是对窗口二中刚刚发送的零号元素的确认呢?

解惑

为了避免这个问题的发生,一个非常巧妙的办法诞生了——窗口数目减小1。
这个方法究竟巧妙在了哪里呢?这里给出另外一张图来进行分析。

这个示例就是将窗口缩小1以后的示例。大家会发现一个奇妙的现象,不管接收到多少次ACKN,ACKN所表示的意义都是唯一的。举个例子,比如第一个窗口发送完以后,发送端接收到了ACK0,这时按照协议,窗口的第一个元素丢掉,发送端继续发送7元素,假如这次也很巧,碰到了和上次一样的问题,发送端再次接收到了ACK0,这时候你会发现,发送的所有帧中,**只有第一个窗口发送的帧中含有0元素,第二个窗口中的0元素还未发送,所以第二个ACK0必然代表了对窗口一中的0元素的回应,**也就是说窗口一中0之后的元素全部丢失,不会产生歧义。

总结

相较于第一种窗口大小取法,第二种取法的最大优势在于将已发送未完全确认的包的元素值永远控制在了每个包取唯一值的范围中。举个例子:如果收到ACK4,因为在收到ACK>=5之前第二个窗口的4元素永远不会发送,那么不管收到ACK4,这个ACK4只能是对窗口一中的4元素的确认。或者说,重复收到ACKN并未产生负面的影响(比如产生歧义),而第一种虽然窗口略大一帧,但是重复收到ACKN却会产生歧义。按我的理解而言,第二种窗口分配方案相对于第一种方案消除了收到ACKN事件的二义性。

链路层-滑动窗口协议-回退N帧协议-窗口大小选择问题相关推荐

  1. TCP可靠传输:ARQ协议(停止等待、超时重传、滑动窗口、回退N帧、选择重传)

    ARQ(Automatic Repeat-reQuest,自动重传请求) 一. ARQ简介 二. 停止等待ARQ (1)正常传输 (2)传输出现差错 1. 超时重传 2. 编号 (3)信道利用率 三. ...

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

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

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

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

  4. 可靠传输的实现机制——回退N帧协议GBN(Go Back N)

    可靠传输的实现机制--回退N帧协议GBN(Go Back N) 因为使用停等协议的发送方式,在发送过程中,信道利用率很低,如果出现超时重传,则信道利用率更低 如果可以同时发送很多个数据分组,采用一种流 ...

  5. 王道考研 计算机网络11 数据链路层 封装成帧 透明传输 流量控制 停止-等待协议 后退N帧协议GBN 选择重传协议SR

    第三章知识 数据链路层的基本概念 数据链路层功能概述 封装成帧 透明传输 什么数据都能传输 数据链路层的流量控制 流量控制方法 滑动窗口协议: 每一个小格标识一个帧 发送窗口:发送端正在处理的发送的数 ...

  6. 点到点链路的滑动窗口协议

    目录 传输的可靠性 ARQ算法一:停止-等待 算法 三种情形 分析 ARQ算法二:滑动窗口 算法 发送方 接收方 例如 分析 序号的范围 点到点传输 传输的可靠性   在通信过程中,帧的传输而可能出错 ...

  7. 计算机网络笔记(5) 传输层滑动窗口协议(GBN、SR)

    文章目录 滑动窗口协议(Sliding-window protocol) GBN(Go-Back-N/后退N帧协议) SR协议(Selective Repeat/选择重传协议) 滑动窗口协议(Slid ...

  8. 回退n帧协议c语言代码,[计算机网络]Ch.3 数据链路层

    数据链路层 1.DLL层设计问题 1.1 DLL层·功能 数据链路层使用物理层提供的服务在通信信道上发送和接收比特. (1) 向网络层提供一个定义良好的接口 (2) 处理传输错误 (3) 调节数据流, ...

  9. 3.2计算机网络(停止-等待协议 后退N帧协议 选择重传协议)

    目录 1.停止-等待协议 1.概念 2.停等协议--无差错情况 3.停等协议--有差错情况 1.数据帧丢失或检测到帧出错 2.ACK(确认帧)丢失 3.ACK(确认帧)迟到 4.停等协议性能分析 5. ...

最新文章

  1. Android中Video的三种播放方式的实现
  2. 模型大小 与参数量计算
  3. 操作Checkbox标签
  4. 对于全连接层的理解 全连接层的推导
  5. [bzoj3676]回文串[后缀数组+Manacher]
  6. 人口会一直增长下去吗_一直善良下去,你就会幸福
  7. SeleniumCSS选择器
  8. 程序性能之显示大表格
  9. linux php adodb,【原创】Linux下php使用adodb对sql Server访问配置
  10. Linux文件打包成不同后缀的压缩文件
  11. 《网上订餐系统》开发全程回忆
  12. 分公司可以作为著作权人申请软件著作权登记证书么?
  13. 使用python来完成数据的线性拟合
  14. 【Android】虹软、安卓、Uniapp、SpringBoot 实现人脸识别
  15. snmp+mrtg实现对局域网内的linuxServer的监控(转)
  16. 苹果xr配置_看看下面这些对比,你就知道苹果x和xr哪个好?
  17. oracle系统报表开发工具,掌握七款实用报表开发工具,定制属于自己的报表
  18. Java SE、Java ME、Java EE是什么以及关系
  19. Apollo学习笔记
  20. 单页应用SEO解决方案

热门文章

  1. 驱动开发:内核读取SSDT表基址
  2. highCharts滚动条在火狐浏览器中的坑
  3. 图像处理——饱和度调整算法(python语言)
  4. 灰度、亮度、对比度、饱和度
  5. 关于局域网内,超简单实现电脑与Android设备的文件传输。
  6. 全链路跟踪之线程上下文Thread Local实战(完整源码)
  7. pycharm的控制台主题,Pycharm控制台
  8. 浙大计算机专业偏什么方向,2017考研浙大计算机经验教训帖
  9. 如何绘制简单漂亮的全基因组互作矩阵HiC matrix
  10. 这就是你日日夜夜想要的docker!!!---------Docker资源控制--Cgroup