滑动窗口
在TCP的确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK之后再发送下一个数据段,这样做的缺点就是性能较差,在等待确认应答包环节浪费环节。由于一发一收的方式性能较低,那么可以一次发送多条数据,就可以大大提高性能(将多个端的等待时间重叠到一起)。
如下图(窗口大小为4,数据的传输过程):
- 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,上图的窗口大小就是4000个字节(4个段);
- 发送前四个端的时候,不需要等待任何ACK,直接发送;
- 收到第一个ACK之后,滑动窗口向后移动,继续发送第五个段的数据,以此类推;
- 操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答,只有确认应答的数据,才能从缓冲区删掉;
- 窗口越大,则网络的吞吐率就越高;
窗口大小在实际应用中,可以分为两部分。第一部分表示数据包已经发送,但未得到确认应答包;第二部分表示允许发送,但未发送的数据包。在进行数据包发送时,当发送了最大数量的数据包(窗口大小数据包),有时不会同时收到这些数