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必须能够在某一端产生这种情况时进行处理。 如果左边沿到达右边沿,则称其为一个零窗口。

3. 慢启动算法

  每个发送方位维护两个窗口:一个是接收方准许的窗口,第二个是拥塞窗口。最终允许发送的字节数以接受窗口和用死啊窗口的最小值为准。因此有效窗口是发送方认为没有问题的窗口和接收方认为没有问题的窗口中最小的那个。

  事实上拥塞控制中还定义有第三个参数:阈值,初始值为64KB。

  慢启动过程:

  (1)当一个链接建立起来以后,发送方的拥塞窗口初始化为该链接上当前使用的最大数据段值。然后发送一个最大数据段,如果该数据段在定时器过期之前确认,那么拥塞窗口变成2。以后拥塞窗口按指数级别增长。

  (2)当拥塞窗口增长到阈值的时候,指数增长停滞,从这个点开始,每次成功的传输,都会使拥塞窗口线程增长,(即每次只增长一个最大数据段)。

  (3)当超时发生时,阈值被设置为当前拥塞窗口的一半 ,而拥塞窗口被充值为一个最大数据段,之后使用相同的慢启动算法来决定网络的处理能力。

4.名词解释

(1)停止等待协议

(2)回退N步协议

(3)选择重传

GBN协议(Go-Back-N,GBN)允许发送方用多个分组“填充流水线”,因此避免了停止等待协议中所提到的信道利用率的问题。然而,GBN协议也存在性能上的问题。尤其是当窗口的长度和带宽时延积都很大,在流水线中会有很多分组时更是如此。一个单个分 组的差错就引起GBN重传大量分组,而其中的许多分组根本没有必要重传。随着信道差错率的增加,流水线可能会被这些没有必要重传的分组填满。

  选择重传(SR)协议通过让发送方近重传那些换衣在接受方出错(即分组丢失或受损)的分组,从而避免了不必要的重传。这种个别的、按需的重传要求接受方逐个地确认正确接受的分组。再次用窗口长度N来限制流水线中为完成、未被确认的分组数。然而,与GBN不同的是,发送方已经接收到了对窗口中某些分组的ACK。