滑动窗口
在上一篇博客里确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段. 这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候.
举个例子
张三早上要去买早餐,他要吃一笼包子,两个烤面筋,还有一杯奶茶
那么他怎么买呢??
1)他先买包子,等包子弄好了,再去买面筋,面筋弄好了,再去买奶茶
这就相当于一发一收
2)他点完包子,立马转身去点面筋,然后再去点奶茶
这样我们三份数据的时间就合并在一起了,那么最终等多久,就看那个东西做好最慢,时间被重叠在一起,效率就相对提高了
确认应答机制保证了TCP的可靠性,那么在保证可靠性的基础上,还希望效率尽可能的提高~~
这时我们就引入滑动窗口
什么意思呢?
我们发送数据没必要等到收到ACK在发送,直接就发下一条数据,但是也不能无休止的发送(如果无休止的发送数据,那么可靠性就无法保证),所以我们就批量发一组数据,等待这一组的ACK,再去批量发下一组,我们发送这一组数据到底发送多少,这组数据的数据量,就叫"窗口大小"。
窗口里就代表我们要发送的四组数据,同时等待这四组数据的ACK
图中返回的ACK是(下一个是2001)就说明2001之前的数据已经到达了, 也就是说第一个窗口(1001~2001)到达了,于是就可以发送(5001 ~ 6001)
窗口范围内的数据就是已经发出去的数据,同时也是要等待ACK的数据,随着对方ACK的到达,要等待数据也随之就发生变化,同时也会发送新的数据