TCP拥塞控制

TCP拥塞控制
算法解释如上图:

建立TCP开始时,即慢启动状态,会不断发包来寻找该网络状态下的最佳拥塞值,起初是发1个包,收到ack后,发包数量呈指数增长,发4个包、8个包、16个包…,等发包数量到16的2倍,即32时发现出现了重复的ack,那么说明最佳拥塞值在16到32之间;那么就从16开始每次两个包的增加来寻找16-32之间的最佳拥塞值,在发包数量到24时,出现重复ack,那么说明此时的最佳拥塞值为24;如果在最佳拥塞为24时出现网络拥塞,按照TCP Tahoe版本的算法,会从慢启动重新开始,先指数增长再线性增长来寻找现在拥塞网络下的最佳拥塞值,但是这种老版的算法会使的网络发包数量突然降到1个,相当于网络会从新开始,对于正在使用网络的用户或者软件会很不友好;TCP Reno版本算法会在原有的最佳拥塞值的基础上砍一半,然后线性增长发包,即发包数量从12开始,一步步试探,最终找到合适的最佳拥塞值;如果在原有最佳拥塞值的基础上砍一半仍然发包出现重复的ack,那么就继续砍一半,再进行发包试探来寻找新的最佳拥塞值;但并不是最佳拥塞控制值在发生变化后就维持不变,在一定时间后,TCP会尝试在现在的最佳拥塞值的基础上线性增长发包数量,来尝试新的最佳拥塞值,如果增加过程中没有存在重复的ack,那么就继续增长,如果到达一定的数量后,出现重复的ack,那么最佳拥塞值,就为新的值;这就是TCP的拥塞控制