优化算法
优化算法
慢热启动算法(Slow Start)
首先,我们来看一下 TCP 的慢热启动。慢启动的意思是,刚刚加入网络的连接,一点一点地提速,不要一上来就像那些特权车一样霸道地把路占满。新同学上高速还是要慢一点,不要把已经在高速上的秩序给搞乱了。慢启动的算法如下(cwnd 全称 Congestion Window):
1)连接建好的开始先初始化 cwnd = 1,表明可以传一个 MSS 大小的数据。
2)每当收到一个 ACK,cwnd++; 呈线性上升
3)每当过了一个 RTT,cwnd = cwnd*2
; 呈指数让升
4)还有一个 ssthresh(slow start threshold),是一个上限,当 cwnd >= ssthresh 时,就会进入“拥塞避免算法”(后面会说这个算法)
拥塞避免算法(Congestion Avoidance)
前面说过,还有一个 ssthresh(slow start threshold),是一个上限,当 cwnd >= ssthresh 时,就会进入“拥塞避免算法”。一般来说 ssthresh 的值是 65535,单位是字节,当 cwnd 达到这个值时后,算法如下:
1)收到一个 ACK 时,cwnd = cwnd + 1/cwnd 2)当每过一个 RTT 时,cwnd = cwnd + 1
这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。很明显,是一个线性上升的算法。