刚才我们讨论了确认应答策略,对每一个发送的数据段,都要给一个 ACK 确认应答.收到 ACK 后再发送下一个数据段.这样做有一个比较大的缺点,就是性能较差.尤其是数据往返的时间较长的时候. 因此,我们设计了滑动窗口,一次发送特定数目的数据,可以大大提高效率.下面的案例窗口的大小为4,即一次可以发送四条SYN请求,当主机A接收到主机B发送的ACK应答的时候,滑动窗口向下进行移动,此时可以发送下一条的数据(4001–5000).
- 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。上图的窗口大小就是4000个字节(四个段)。
- 发送前四个段的时候,不需要等待任何ACK,直接发送;
- 收到第一个ACK后,滑动窗口向后移动,继续发送第五个段的数据;依次类推;
- 操作系统内核为了维护这个滑动窗口,需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉;
- 窗口越大,则网络的吞吐率就越高;
- 假设窗口无限大,这个时候就效率就相当于UDP了.