1.概念
滑动窗口协议,也称为回退N步协议(Go-Back-N,GBN)中,允许发送方发送多个分组(当有多个分组可用时)而不需等待确认,但它受限于在流水线中为未确认的分组数不能超过某个最大允许数N。滑动窗口协议是TCP使用的一种流量控制方法,此协议能够加速数据的传输。
只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。
收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
当发送窗口和接收窗口的大小都等于1时,就是停止等待协议。
当发送窗口大于1,接收窗口等于1时,就是回退N步协议。
当发送窗口和接收窗口的大小均大于1时,就是选择重发协议。
协议中规定,对于窗口内未经确认的分组需要重传。这种分组的数量最多可以等于发送窗口的大小,即滑动窗口的大小n减去1(因为发送窗口不可能大于(n-1),起码接收窗口要大于等于1)。
2.工作原理
TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动。
TCP协议软件依靠滑动窗口机制解决传输效率和流量控制问题。它可以在收到确认信息之前发送多个数据分组。这种机制使得网络通信处于忙碌状态,提高了整个网络的吞吐率,它还解决了端到端的通信流量控制问题,允许接收端在拥有容纳足够数据的缓冲之前对传输进行限制。在实际运行中,TCP滑动窗口的大小是可以随时调整的。收发端TCP协议软件在进行分组确认通信时,还交换滑动窗口控制信息,使得双方滑动窗口大小可以根据需要动态变化,达到在提高数据传输效率的同时,防止拥塞的发生。
称窗口左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送和确认时。当窗口右边沿向右移动时将允许发送更多的数据,称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
当右边沿向左移动时,称为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。 如果左边沿到达右边沿,则称其为一个零窗口。
滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):
分析:①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;③发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;④接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;⑤发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;⑦接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;⑧发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。
若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退n协议:发窗口>1,接收窗口>1;选择重传协议:发送窗口>1,接收窗口>1。
每个发送方位维护两个窗口:一个是接收方准许的窗口,第二个是拥塞窗口。最终允许发送的字节数以接受窗口和用死啊窗口的最小值为准。因此有效窗口是发送方认为没有问题的窗口和接收方认为没有问题的窗口中最小的那个。
事实上拥塞控制中还定义有第三个参数:阈值,初始值为64KB。
慢启动过程:
(1)当一个链接建立起来以后,发送方的拥塞窗口初始化为该链接上当前使用的最大数据段值。然后发送一个最大数据段,如果该数据段在定时器过期之前确认,那么拥塞窗口变成2。以后拥塞窗口按指数级别增长。
(2)当拥塞窗口增长到阈值的时候,指数增长停滞,从这个点开始,每次成功的传输,都会使拥塞窗口线程增长,(即每次只增长一个最大数据段)。
(3)当超时发生时,阈值被设置为当前拥塞窗口的一半 ,而拥塞窗口被充值为一个最大数据段,之后使用相同的慢启动算法来决定网络的处理能力。
4.名词解释
(1)停止等待协议
(2)回退N步协议
(3)选择重传
GBN协议(Go-Back-N,GBN)允许发送方用多个分组“填充流水线”,因此避免了停止等待协议中所提到的信道利用率的问题。然而,GBN协议也存在性能上的问题。尤其是当窗口的长度和带宽时延积都很大,在流水线中会有很多分组时更是如此。一个单个分组的差错就引起GBN重传大量分组,而其中的许多分组根本没有必要重传。随着信道差错率的增加,流水线可能会被这些没有必要重传的分组填满。
选择重传(SR)协议通过让发送方近重传那些换衣在接受方出错(即分组丢失或受损)的分组,从而避免了不必要的重传。这种个别的、按需的重传要求接受方逐个地确认正确接受的分组。再次用窗口长度N来限制流水线中为完成、未被确认的分组数。然而,与GBN不同的是,发送方已经接收到了对窗口中某些分组的ACK。
本文出处:http://blog.csdn.net/yujun00/archive/2006/03/23/636495.aspx
http://www.cnblogs.com/lambda107/archive/2011/09/04/2162584.html