网络原理考点之滑动窗口协议
什么是滑动窗口?
在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。
若从滑动窗口的观点来统一看待停等、后退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
网络原理考点之滑动窗口协议相关推荐
- 网络原理考点之internet路由选择协议
实际Internet应用的就是层次化路由选择. 如题:2018年4月 分析:关键在于理解DV还有LS,DV是只需要知道相邻结点的最短路径,而链路状态LS需要遍历每个结点整理出整个网络系统消费,从而求出 ...
- WireShark 探索网络请求过程(五层网络模型、三次握手、滑动窗口协议)
当我们在浏览器输入URL点击确认后,浏览器展示出网页信息.可你曾想过这其中的过程是怎样的?理论性较强的朋友可能知道后续DNS会解析地址,然后TCP/IP三次握手建立起连接,紧接着客户端与服务器开始传 ...
- WireShark抓包 图解探索网络请求过程(五层网络模型、三次握手、滑动窗口协议)
当我们在浏览器输入URL点击确认后,浏览器展示出网页信息.可你曾想过这其中的过程是怎样的?理论性较强的朋友可能知道后续DNS会解析地址,然后TCP/IP三次握手建立起连接,紧接着客户端与服务器开始传输 ...
- 网络原理考点之BSC协议
如题:2017年4月 分析:啥是BSC协议呢? 同步协议主要在局域网(LAN).城域网(MAN)以及广域网 (WAN)中应用.控制同步传输的协议可以分成两个类型:面向字 符的协议和面向比特的协议. 面 ...
- TCP 滑动窗口协议
什么是滑动窗口协议? 一图胜千言,看下面的图.简单解释下,发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口.发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大 ...
- TCP连续ARQ协议和滑动窗口协议
TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输. 一.ARQ协议 ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模 ...
- 三句话介绍清楚滑动窗口协议/GBN/SR
滑动窗口协议.GBN.SR之间不得不说的故事 首先我们来介绍什么是滑动窗口协议 滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制, ...
- TCP 滑动窗口协议 详解
滑动窗口机制 (1).窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口. ...
- TCP滑动窗口协议与流量控制
谈到TCP的滑动窗口协议与流量控制,便会想起当年面试时的场景.那时刚刚毕业,匆匆学了一点TCP的皮毛,仅仅是知道了TCP是面向连接的协议,以对每个报文都进行确认+超时重传的机制来保证端到端的可靠传输: ...
- 计算机网络 TCP 滑动窗口协议 详解
滑动窗口机制解析: 1.窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口.发送窗 ...
最新文章
- 计算摄影 | 计算机如何学会自动裁剪图片(自动构图)?
- 程序员的“凡尔赛文学”大赏!
- InnoDB Monitors
- [NOIP 2010普及组 No.3] 导弹拦截
- HBase之BloomFilter
- 操作系统磁盘空闲管理之位示图法
- CSS3酷炫样式集合
- Java牛角尖【003】:类初始化时的执行顺序
- 循环链表:魔术师发牌问题
- iOS 下如果存在UIScrollerView 使用UIScreenEdgePanGestureRecognizer实现侧滑效果失效的问题...
- UDK控制台命令概览
- iOS中在NavigationController的toolbar中添加Segment控件
- Flutter RotatedBox旋转容器
- 【笔记】软件质量保证(Software Quality Assurance)复习笔记
- 12帧跑步动画分解图_跑步动画原理讲解
- 竞态条件的赋值_Go 译文之竞态检测器 race
- 猴子偷桃c语言编程软件,C语言实现的猴子偷桃之类算法
- 一包辣条如何逆袭,从屌丝品牌成为有逼格的产品?
- 算法练习, 红白花放置方法数
- python写自动答题脚本_编写Python脚本拉取优学院答案
热门文章
- ts格式转换器android,ts格式转换器下载|ts格式转换器 v6.2-520下载站
- 词语相似度分析(《知网》、同义词词林、word2vec)
- 解决模拟器Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration!问题
- 威金杀虫剂作者农夫和威金病毒制造者的聊天记录
- java-GUI实现汽车租赁管理系统
- html点击自动复制文本代码,点击网页按钮复制指定代码JS源码
- OpenWrt搭建KMS服务(Vlmcsd)
- MUI框架学习——了解MUI
- php中while什么意思,php while 循环是什么意思 - php完全自学手册 - php中文网手册
- html弹窗可以复制,简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器