Network | TCP congestion control
拥塞控制算法:1. 加性增、乘性减;2. 慢启动;3. 对超时事件作出反应;
整体过程如下:
慢启动->到达阈值->加性增(窗口+1个MSS), 这个阶段叫拥塞避免(CA)->3个冗余ack丢包(事件)->阈值和窗口都缩小为一半(乘性减), 然后加性增(CA)->快速重传,并等待确认,这个阶段叫快速恢复,如果没有确认,就当作超时事件处理了;
->超时(事件)->快速重传->tcp会重新回为原始状态,进入慢启动;
在发生丢包和超时时,tcp都会执行快速重传;
当TCP接收方收到一个具有大于下一个所期望的、按序的序号的报文段时,它检测到了数据流中的一个间隔,即有报文段丢失。它将发送一个冗余的ACK,进行重复确认;如果TCP发送方接收到相同数据的3个冗余ACK,它就认为跟在这个已被确认过3次的报文段之后的报文段已经丢失。
例子(盗图):
假定最大窗口是32个段,阈值时16个段(最大窗口的一半),在慢速启动阶段,窗口大小从1开始按指数规律增加知道它达到阈值。
当达到阈值后,拥塞避免(加性增加)过程允许窗口大小线性增长知道计时器到达或达到最大窗口的大小。
在途中,当窗口为20时,计时器到达。此时。进入乘性减少过程,将阈值设置为当前窗口的大小的一半,当计时器达到时,当前窗口大小为10,因此现在的阈值为10。
TCP再次进入慢速启动,并设置窗口的大小为1,当达到新阈值(10)时,TCP进入加性增加阶段。
当窗口大小为12时,3个ACK事件发生,再次进入乘性减少过程,阈值设置为6,这时TCP进入加性增加阶段,该阶段一直维持到另一个计时器到时或者另外3个ACK事件发生为止。