什么是滑动窗口?

在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

若从滑动窗口的观点来统一看待停等、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。停等:发送窗口= 1,接收窗口=1; 后退n协议:发送窗口>1,接收窗口=1;选择重传协议:发送窗口>1,接受窗口>1;

停等协议很好理解,这里主要解释后退n协议和选择重传协议。

其实,这些体现了网络的处理问题的重要思想。

滑动窗口协议有GBN、SR

二、滑动窗口协议的实现:GBN

1.分组头部包含序列号

2.窗口如下,大小为N,最多允许N个分组未确认

3.ACK(n),则表示确认从开始到n(包含n)的序列号全部正确接收

4.会空中在传的分组设置一个Timer计时器,处理超时,如果收到了timeout(n)事件,那么会重传的是n以及n以后的所有分组(尽管后面的可能已经收到了,这就是回退,回退到n开始传,GBN)

5.接收方会有一个期望序列号,如果收到的不是期望的分组,直接丢弃

后退N帧协议的接受窗口为1,可以保证按序接受数据帧。若采用n个比特对帧编号,则其发送窗口的尺寸应满足:1~2^(n-1)。若发送窗口的尺寸大于2^(n-1),则会造成接受方无法分辨新帧和旧帧。如:

    假设n取3,序号空间即0~7 (S:sender R:receiver)

1、S 发送了0,1,2,3,4,5,6 号帧
2、R 接受上述帧并且捎带发送 ACK6,但是丢失了
3、S的0号帧首先超时,S 重发发送0号帧
4、R收到0号帧,但是因为之前它已经接受0~6,发送了ACK6,它会认为0号帧是一个新的帧,而在0号帧之前的一个7号帧丢失(注意这里是一个环的结构)。因为是GBN协议,R会接受0号帧( the old)作为新帧(暂时放在缓存区),并通知S重发7号帧。
5、S 发送7号帧
6、R接受了7和0号帧,并且发送ACK0

这就出现问题

1、R接受错误的0号帧作为新的帧 
2、S在发送完7号帧之后收到了ACK0,而不是ACK7,此时对于S而言,它的0号帧早已在ACK6中确认。

出现这个问题的主要原因是我们不能区别新旧帧,现在我们将序号空间一分为二,首先发送0~3,继续上面的步骤。走到步骤4的时候R不会接受0作为新帧,因为R知道新的帧是4而不是0。这样就避免了上面的问题。

三、滑动窗口协议的实现:SR(选择重传)

GBN缺陷,累积确认机制导致回退到N,重复传了很多。解决这个。

1.对每个分组分别确认,不再只接收期望的,接到不期望的,就先缓存(设置缓存机制),接到期望的才交付上层

2.发送方只需要重传那些没收到ACK的分组了

3.产生了接收方窗口(GBN只有发送方窗口),用来缓存,现在有两窗口了

4.序列号的位数是K的话,那么得满足 接收方窗口大小N+发送方N<= 2的k次方,防止因为接收方ACK丢失导致发送重发k号分组,而此时接收方滑到了新窗口,新窗口有新的k号分组(不是原来的,共用序号产生的),导致出错

若采用n比特对帧编号,为了保证接收方向向前移动窗口后,新窗口序号与旧窗口序号没有重叠部分,需要满足条件:接受窗口+发送窗口<=2^n。假定仍然采用累计确认的方法,并且接受窗口显然不应超过发送窗口,那么接受窗口尺寸不应超过序号范围的一半<=2^(n-1)。

如题:2019年10月04741第15题:

类似的这道题,发送发没有收到帧2,3的确认,但是却收到帧4的确认消息,说明此时还没有超时,在这超时时间内是依然可以收到后序帧的确认,一个原因可能是接收方发送帧3的确认,但丢在路上,另一个原因是“累计确认”即捎带确认,接受方根本没有发送帧3的确认,而是通过4帧的确认告诉我们帧3已经接收成功。

所以,帧0、1、2、3,4均已正确接收到,需要重发的是5、6、7帧,答案选B。

如题:2018年4月

分析:SR,选择重传,这个是应该逐步想到的,否则,这道题肯定是做不对。

接收窗口>1所以A不正确。

剩下几项,需要从滑动窗口原理上分析,否则光靠书本,是无法得到答案的。

1)对于TCP会话的发送方,任何时候在其发送缓存内的数据都可以分为4类,“已经发送并得到对端ACK的”,“已经发送但还未收到对端ACK的”,“未发送但对端允许发送的”,“未发送且对端不允许发送”。“已经发送但还未收到对端ACK的”和“未发送但对端允许发送的”这两部分数据称之为发送窗口(中间两部分)。

当收到接收方新的ACK对于发送窗口中后续字节的确认是,窗口滑动,滑动原理如下图。

当收到ACK=36时窗口滑动。

2)对于TCP的接收方,在某一时刻在它的接收缓存内存在3种。“已接收”,“未接收准备接收”,“未接收并未准备接收”(由于ACK直接由TCP协议栈回复,默认无应用延迟,不存在“已接收未回复ACK”)。其中“未接收准备接收”称之为接收窗口。

发送窗口与接收窗口关系:

TCP是双工的协议,会话的双方都可以同时接收、发送数据。TCP会话的双方都各自维护一个“发送窗口”和一个“接收窗口”。其中各自的“接收窗口”大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的“发送窗口”则要求取决于对端通告的“接收窗口”,要求相同。

TCP的滑动窗口是动态的,我们可以想象成小学常见的一个数学题,一个水池,体积V,每小时进水量V1,出水量V2。当水池满了就不允许再注入了,如果有个液压系统控制水池大小,那么就可以控制水的注入速率和量。这样的水池就类似TCP的窗口。应用根据自身的处理能力变化,通过本端TCP接收窗口大小控制来对对对端的发送窗口流量限制。

应用程序在需要(如内存不足)时,通过API通知TCP协议栈缩小TCP的接收窗口。然后TCP协议栈在下个段发送时包含新的窗口大小通知给对端,对端按通知的窗口来改变发送窗口,以此达到减缓发送速率的目的。

所以答案,选D

网络原理考点之滑动窗口协议相关推荐

  1. 网络原理考点之internet路由选择协议

    实际Internet应用的就是层次化路由选择. 如题:2018年4月 分析:关键在于理解DV还有LS,DV是只需要知道相邻结点的最短路径,而链路状态LS需要遍历每个结点整理出整个网络系统消费,从而求出 ...

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

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

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

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

  4. 网络原理考点之BSC协议

    如题:2017年4月 分析:啥是BSC协议呢? 同步协议主要在局域网(LAN).城域网(MAN)以及广域网 (WAN)中应用.控制同步传输的协议可以分成两个类型:面向字 符的协议和面向比特的协议. 面 ...

  5. TCP 滑动窗口协议

    什么是滑动窗口协议?      一图胜千言,看下面的图.简单解释下,发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口.发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大 ...

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

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

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

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

  8. TCP 滑动窗口协议 详解

    滑动窗口机制 (1).窗口机制     滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口. ...

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

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

  10. 计算机网络 TCP 滑动窗口协议 详解

    滑动窗口机制解析: 1.窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口.发送窗 ...

最新文章

  1. 计算摄影 | 计算机如何学会自动裁剪图片(自动构图)?
  2. 程序员的“凡尔赛文学”大赏!
  3. InnoDB Monitors
  4. [NOIP 2010普及组 No.3] 导弹拦截
  5. HBase之BloomFilter
  6. 操作系统磁盘空闲管理之位示图法
  7. CSS3酷炫样式集合
  8. Java牛角尖【003】:类初始化时的执行顺序
  9. 循环链表:魔术师发牌问题
  10. iOS 下如果存在UIScrollerView 使用UIScreenEdgePanGestureRecognizer实现侧滑效果失效的问题...
  11. UDK控制台命令概览
  12. iOS中在NavigationController的toolbar中添加Segment控件
  13. Flutter RotatedBox旋转容器
  14. 【笔记】软件质量保证(Software Quality Assurance)复习笔记
  15. 12帧跑步动画分解图_跑步动画原理讲解
  16. 竞态条件的赋值_Go 译文之竞态检测器 race
  17. 猴子偷桃c语言编程软件,C语言实现的猴子偷桃之类算法
  18. 一包辣条如何逆袭,从屌丝品牌成为有逼格的产品?
  19. 算法练习, 红白花放置方法数
  20. python写自动答题脚本_编写Python脚本拉取优学院答案

热门文章

  1. ts格式转换器android,ts格式转换器下载|ts格式转换器 v6.2-520下载站
  2. 词语相似度分析(《知网》、同义词词林、word2vec)
  3. 解决模拟器Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration!问题
  4. 威金杀虫剂作者农夫和威金病毒制造者的聊天记录
  5. java-GUI实现汽车租赁管理系统
  6. html点击自动复制文本代码,点击网页按钮复制指定代码JS源码
  7. OpenWrt搭建KMS服务(Vlmcsd)
  8. MUI框架学习——了解MUI
  9. php中while什么意思,php while 循环是什么意思 - php完全自学手册 - php中文网手册
  10. html弹窗可以复制,简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器