TCP为了提供可靠的传输,发送端送出一个包之后,等待相应的接收端的确认包而不急着发送下一个包。在这段时间内,数据只在双方之间单向传输,假如中间还出现了延迟相应,那么网络完全就是空闲的了,也就是为了满足接收到前一个包的确认信息,必须推迟下一个包的发送,所以如果仅凭这种请求确认方式就会浪费了大量的带宽
为了更好地利用网络带宽,TCP滑动窗口允许发送端在等待接收端的确认信息之前可以发送多个分组,这个协议在分组序列中放了一个固定长度窗口,然后发送的是窗口内的所有分组
【1 2 3 4 5 6】 7 8 9 10
比如初始状态,窗口大小为6,揽括了1-6这6哥分组,那么发送端可以在接收到确认信息之前发送6个分组,假如1和2都已经接收到了确认信息,那么窗口可以滑动,始终保持窗口的大小为6,也就是变成了这样:
1 2 【3 4 5 6 7 8】 9 10
可见这时候7和8也进入了滑动窗口,也成为了可以发送出去的对象
也就是通过滑动窗口能够使得网络中的分组处于饱和状态,能够获得比简单的确认更高的吞吐率
滑动窗口协议要记录哪些已经被确认,因为已经确认的分组会被移动到窗口之外,可见滑动窗口把所有分组分成了三部分,窗口左边的分组是已经成功传输,而且已经接收到确认信息的,窗口右边的分组是还没有发送出去的,窗口内的分组是已经发送出去,但还是没有收到确认,所以窗口内序列号最小的一个分组就是还没有收到确认当中的第一个分组