上一篇主要通过RFC-2581协议讲述了拥塞控制的四个控制算法,这一篇呢,主要是对整个TCP传输做一个梳理,从正常情况到异常情况依次进行分析。(RFC-2581 协议描述:https://mp.csdn.net/mdeditor/90523999#)
0.基本参数
IW :初始拥塞窗口,根据2581,IW <= 2*SMSS
LW:重传定时器检测到丢包后的当前拥塞窗口
Cwnd:拥塞窗口
Rwnd:接收窗口
dup_ack:重复ACK
ssthresh: 慢启动与拥塞避免的阈值,ssthresh的初值在建立TCP连接时,被赋予一个特定的值,常常是65535 BYTE
1.慢启动
慢启动就是在不了解网络状况的条件下通过起始缓慢发送数据来探测网络容量的过程。
初始Cwnd = IW;
慢启动过程中,由于Cwnd < Rwnd,发送数据量为Cwnd,因此飞行数据量FlightSize = Cwnd
慢启动过程主要出现的情况如下:
case 1:接收正常ACK:
(1)修改Cwnd:Cwnd = Cwnd + SMSS,慢启动中一般为指数式增加,所以Cwnd = 1 * MSS * 2^r,r轮数,每间隔一个RTT为一轮;
(2