由于TCP协议向应用层提供不定长的字节流发送方法,使得TCP协议先天性的就有意愿占满网络中的整个带宽,但是网络中许多TCP连接同时去试图占满整个带宽的时候就有可能发生恶心拥塞事件,而TCP的拥塞控制算法则是非常有必要的,能够有效的降低网络当中的拥塞,提升所有TCP的发送速度。

在网络拓扑中可以看到左边的client向右边的server进行链路通信的时候,这条链路的带宽是1000M每秒,理想条件下没有达到1000M的时候是缓慢上升,到了1000M是保持在这样一个水平,但是实际上是达不到的。
比如从R1过来的流量是700M每秒,从R2过来的流量是600M每秒,实际上R3能够传出的流量是1000M每秒,所以一定有300M每秒的数据被R3丢弃了。
当R3发生丢掉过载的数据包的时候,R3的队列也会非常的长,使得每一个报文在网络当中呆的时间也会更加长,RTT时延也会过长,当轻度拥塞的时候吞吐量已经下降了,当重度拥塞的时候网络是非常糟糕的。
而拥塞控制实际上是包含了4个部分, 慢启动,拥塞避免,快速重传,快速恢复。
慢启动当中定义了一个概念叫做拥塞窗口,

慢启动在解决什么问题呢,也就是我不清楚当前的网络状态是不是已经非常繁忙了,所以我先悠着点,少发一点,当我确定网络中没有丢包的时候,那么我再去快速的增加我的拥塞窗口,这就是慢启动的意义所在。
