1.慢开始和拥塞避免
发送方维持一个叫做拥塞窗口(cwnd)的状态变量。随着网络的拥塞程度来动态变化。发送方让自己的发送窗口等于拥塞窗口。
原则:只要网络没有出现拥塞,则增大拥塞窗口,发送更多的分组,如果出现拥塞就减小这个拥塞窗口,来减少注入网络中的分组。
如何确定出现拥塞?当发送方没有按时收到应当到达的确认报文,就可以猜想可能出现了拥塞。
慢开始算法:首先将拥塞窗口设置为一个最大报文段(MSS)的数值,在接受到最后一个确认后,将拥塞窗口设置为之前的一倍,进行成倍增长,但是为了防止拥塞窗口的增长而引起网络拥塞,还需要设置一个慢开始门限(ssthresh)状态变量:
if(cwnd<ssthresh) do 慢开始算法
if(cwnd>ssthresh) do 拥塞避免算法
if(cwnd==ssthresh) do 慢开始or拥塞避免
拥塞避免算法是让拥塞窗口进行+1而不是加倍。
当发送发判断网络出现拥塞的时候要将慢开始门限设置为出现拥塞时拥塞窗口大小的一半,然后将拥塞窗口设置为1,重新执行慢开始算法。
2.快重传和快恢复
比如在接收到数据M1,M2后接受到了M4中间丢失了M3,所以接收端会给出M2的确认,若不是快重传的话接受到M4的时候,接收端是什么事也不做,但是快重传机制要求接受到M4的时候也要发送M2的确认,只要发送方连续接到3个M2的确认则就可以确定M3丢失,便立即重传M3,而不必等到计时器,这样可以使得网络的吞吐率提高20%。所以可以采用快恢复,就是当发送方接到3个确认后,执行乘法减小,将满开始的门限减半,但是接下来不需要执行慢开始算法,而是直接把sshresh的指直接给cwnd,并开始执行避免拥塞算法。
随机早起检测(RED Random Early Detection)网络层的算法预期发生拥塞的前兆