所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有主机、所有路由器以及与降低网络传输性能有关的所有因素。
相反,流量控制往往是指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。
TCP进行拥塞控制算法有四种,即慢开始、拥塞避免、快重传、快恢复。
发送方维持一个叫做拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态的变化。发送方让自己的发送窗口等于拥塞窗口。
当主机开始发送数据时,把拥塞窗口置为1,每经过一个传输轮次(报文的一次往返),拥塞窗口的大小就加倍。为了防止拥塞窗口增长过大引起网络拥塞,还需要设置一个慢开始门限状态变量,当拥塞窗口达到门限值时就开始执行拥塞避免算法,即每经过一个传输轮次,拥塞窗口就加1,而不是像慢开始阶段加倍增长。当网络出现超时时,发送方判断为网络拥塞,于是就将门限值重置为当前的拥塞窗口值的一半,同时重置拥塞窗口大小为1。进入慢开始阶段。
如果发生个别报文段丢失的情况,就要采用快重传算法让发送方尽早知道发生了个别报文段的丢失,快重传要求接收方不要等待自己发送数据时才进行捎带确认,而是立即发送确认。即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方只要一连收到三个重复确认,就知道接收方确实没有收到某个报文段,因而立即进行重传。
发送方知道现在只是丢失了个别的报文段,于是不启动慢开始,而是执行快恢复算法。这时发送方调整门限值,重置为当前拥塞窗口的一半,同时重置拥塞窗口的大小为门限值,并开始执行拥塞避免算法。
原文:https://www.cnblogs.com/jingpeng77/p/13583837.html