图2 0 - 4用可视化的方法显示了我们在前一节观察到的滑动窗口协议。
在这个图中,我们将字节从 1至11进行标号。接收方通告的窗口称为提出的窗口( o ff e r e d w i n d o w),它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第 3字节在内的数据,且通告窗口大小为 6。回顾第1 7章,我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。
当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:
例子,一端希望向左移动右边沿来收缩窗口,但没能够这样做。图2 0 - 5表示了这三种情况。因为窗口的左边沿受另一端发送的确认序号的控制,因此不可能向左边移动。如果接收到一个指示窗口左边沿向左移动的 A C K,则它被认为是一个重复 A C K, 并被丢弃。
如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。
一个例子
图2 0 - 6显示了在图2 0 - 1所示的数据传输过程中滑动窗口协议的动态性。
以该图为例可以总结如下几点:
下面我们可以看到更多的滑动窗口协议动态变化的例子。