为了保证可靠传输,TCP牺牲了部分性能(有些性能的损失是没必要的,比如ack丢失导致的重传)
所以TCP又采用了几种机制来避免无谓的性能损失,以及提高性能的方法:
1.滑动窗口机制
TCP的确认应答策略,对每个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能较差,尤其是在数据往返时间较长的时候。。。。。
既然一发一收的方式性能较低,那么一次性多发送几条数据,性能就会大大的提高了(也就是将多个段的等待时间重叠在一起)
如图:
- 窗口大小是指:无需任何等待确认应答而可以继续发送数据的最大值;
上图中的窗口大小就是4000个字节(四个段) - 发送前四个段的时候,不需要等待任何ACK,直接发送
- 收到第一个ACK后,滑动窗口向后移动,继续发送第五个段的数据,以此类推;
- 操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉
- 窗口越大,网络的吞吐量就越高
- 在这种情况下,ACK丢失并不要紧,可以通过后续的ACK进行确认;
加入上图中的1~1000的数据波已经抵达,但是AC