网络原理考点之滑动窗口协议

什么是滑动窗口?

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

若从滑动窗口的观点来统一看待停等、后退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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值