TCP拥塞控制
前言
TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是拥塞控制。
其中,TCP协议通过滑动窗口来进行流量控制,它是控制发送发送方的发送速度从而使接收方来得及接收并处理。而拥塞控制是作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。
拥塞算法需要掌握其状态机和四种算法。拥塞控制状态机的状态有五种,分别是open、disorder、CWR、Recovery和loss状态。四种算法为慢启动,拥塞避免,拥塞发生时算法和快速恢复。
一、拥塞控制五种状态机(Congestion Control State Machine)
和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个ACK时,Linux TCP通过状态机(state)来决定其接下来的行为,时应该降低拥塞的窗口cwnd大小,或者保持cwnd不变,还是继续增加cwnd。如果处理不当,可能导致丢包或者超时。
1. open状态
open状态是拥塞控制状态机的默认状态。这种状态下,当ACK到达时,发送方根据拥塞窗口cwnd(Congestion Window)是小于还是大于慢启动阈值ssthresh(slow start