滑动窗口

一、滑动窗口流量控制基本原理
发送窗口:
在任意时刻,发送发都维持一组连续的允许发送的帧的序号,称为发送窗口。
接收窗口:
发送窗口用来对发送方进行流量控制,而发送窗口的大小 W 代表在还没有收到对方确认信息的情况下发送方最多还可以发送多少个数据帧。
在接收端设置接收窗口是为了控制可以接受哪些数据帧而不可以接收哪些帧。在接收方只有当收到的数据帧的序号落入接收窗口内才允许将该数据帧收下。若接收到的数据帧落在了接收窗口之外,则一律将其丢弃。
 
在发送端,每收到一个确认帧,发送窗口就向前滑动一个帧的位置,当发送窗口内没有可以发送的帧(即窗口内全部是已发送,但未接收到确认的帧),发送方就会停止发送,直到收到接收方发送的确认帧使窗口移动,窗口内有可以发送的帧,之后才开始继续发送。
 
二、滑动窗口的分类
滑动窗口分为三类:停止等待后退N帧选择重传。他们之间主要的区别就是:发送窗口和接收窗口大小的区别。
 
  • 停止等待协议:
发送窗口大小 = 1, 接收窗口大小= 1
 
  • 后退N帧协议
发送窗口大小 > 1,接收窗口大小 = 1
 
  • 选择重传协议
发送窗口大小 > 1, 接收窗口大小 > 1
三、停止等待协议
规则:源站发送单个帧后就必须等待确认,在目的站的回答到达源站之前,源站不能发送其他的数据帧
在停止等待协议中,除了数据丢失的问题,还有可能存在以下两种差错:
 
  1. 到达目的站的数据帧可能遭到破坏。
解决办法:源站在发送一个帧后,就为这个帧装一个计时器,在一个帧发送之后,源站等待确认,如果在计时器时间到达时未收到确认,则再次发送相同的帧。
 
  1. 数据帧正确,但是确认帧没有收到
此时接收方已经收到了正确的数据帧,但是发送方收不到确认帧,因此发送方会重传已经被接收的数据帧,接收方收到同样的数据帧就会丢弃该帧,并重传一个该帧对应的确认帧。
 
【总结】
【1】接收方收到相同的数据:发送方超时重传
【2】发送方收到相同的确认帧:发送方发送了重复的数据
【3】接收窗口大小 = 1, 发送窗口大小 = 1
四、后退N帧
发送方不需要在收到上一帧的ACK后才能开始发送下一帧,而是可以连续发送帧。当接收方检测出失序的信息帧之后,要求发送方重发最后一个正确信息帧之后的所有未被确认的帧;或者当发送方发送了N个帧之后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判定为出错或者丢失,此时发送方就不得不重传该出错帧及之后的N个帧。注意:接收方只允许按照顺序接受帧。
 
为了减少开销,后退N帧协议还规定接收端不一定每收到一个正确的数据帧就必须立即发回一个确认帧,而是可以在连续收到好几个正确的数据帧后,才对最后一个数据帧发送确认信息,或者可以在当自己有数据要发送的时候才将对以前正确收到的帧加以捎带确认。
 
 
五、选择重传
只重传出现差错的数据帧或者是计时器超时的数据帧。每一个发送缓冲区对应一个计时器,当计时器超时的时候,缓冲区的帧就会重传。另外,该协议使用了比上述其他协议更有效的差错处理策略,即一旦接收方怀疑帧出错,就会发送一个否定帧NAK给发送方,要求发送方对NAK中制定的帧进行重传。
转自https://blog.csdn.net/xiaojie_570/article/details/87904328
原文地址:https://www.cnblogs.com/cangqinglang/p/13139340.html