目的
拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。
方法
1. 慢开始与拥塞避免
发送端主机在确认发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。因此,每一个tcp连接需要有以下两个状态变量:a、接收端窗口。b、拥塞窗口。接收端窗口:是接收端根据其目前的接收缓存大小所许诺的最新窗口值,是来自接收端的流量控制。接收端将此窗口值放在TCP报文的首部中的窗口字段,传给发送端。拥塞窗口:是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。发送端的发送窗口的上限值取自接收端窗口和拥塞窗口两者中较小的一个。
慢开始:慢开始的思路是开始先探测网络的拥塞程度,由小到大逐渐增加拥塞窗口的大小。示意图如下:
发送端收到ack后将窗口增加一倍(1,2,4,8......),为了避免cwnd过大,引起网络拥塞,设置个ssthresh值,ssthresh值作用如下: 1. 当cwnd<ssthresh时,使用慢开始算法。2. 当cwnd>ssthresh时,改用拥塞避免算法。3. 当cwnd==ssthresh时使用任意一种都行。
拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞