首页 > 代码库 > 拥塞控制基本概念

拥塞控制基本概念

一、拥塞控制基本概念

  在某段时间内,若对网络中某资源的需求超过了该资源所能提供的部分,网络的性能就要变坏--产生拥塞(congestion)。出现资源拥塞的条件是:

    对资源需求的总和>可用资源

  若网络中产生拥塞,网络的性能就要明显变化,整个网络的吞吐量将随输入负荷的增大而下降。

  拥塞控制 vs 流量控制

  1)拥塞控制索要做的事情只有一个前提,就是使网络能够承受现有的网络负荷;

  2)拥塞控制是一个全局性的过程,涉及所有的主机、所有的路由器以及与降低网络传输性能有关的所有因素;

  3)流量控制往往指在给定的发送端和接收端之间的点对点通信的控制;

  4)流量控制所要做的就是抑制发送数据的速率,以便使接收端来得及接收;

  5)拥塞控制是很难设计的,因为它是一个动态的(而不是静态的)问题;

  6)当前网络正朝着告诉化的方向发展,这很容易出现缓存不够大而造成分组的丢失。但分组的丢失是网络发生拥塞的征兆,而不是原因;

  7)在许多情况下,甚至正式拥塞控制本身成为引起网络性能恶化甚至发生死锁的原因,这点应该特别引起重视。

拥塞控制又分为闭环控制与开环控制

1)开环控制就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞(感觉很难啊)

2)闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施:

  检测网络系统以便检测到拥塞在何时、何处发生;

  将拥塞发生的信息传送到可采取行动的地方;

  调整网络的运行以解决出现的问题。

 

二、拥塞控制的4种算法

  发送端需要维护两个窗口:接收端窗口(由接收端将其放在TCP保温的首部的窗口字段通知发送端);拥塞窗口(cwnd:发送端根据自己估计的网络拥塞程度而设置的窗口值,反映了网络的当前容量)。

        发送端窗口的上限值=Min(rwnd,cwnd)

note:接收方总是有足够大的缓存空间,因为发送窗口的大小由网络的拥塞程度来决定,也就是说可以将发送窗口等同为拥塞窗口。


慢开始算法

步骤:

  • 在主机刚刚开始发送报文段的时候可以将cwnd设置为1;
  • 在每收到一个报文段确认后,将拥塞窗口加1;
    • note:每收到一个队新的报文段的确认后,将拥塞窗口加1,第二次就会收到两个确认,第三次就会收到4个确认,所以每一个轮次的传输,cwnd就会翻倍。
  • 用这样的方法逐步增大发送端cwnd,可以是分总注入到网络的速率更加合理;
  • 当慢开始的cwnd大小增大到规定的慢开始门限ssthresh之后,改用拥塞避免。

 

拥塞避免算法

拥塞窗口改为线性增加,每次增加1。

当cwnd<ssthresh时,使用慢开始算法;

当cwnd>ssthresh时,停止使用慢开始算法,改用拥塞避免算法;

当cwnd=ssthresh时,都可以;

 

无论是在慢开始阶段,还是在拥塞避免阶段,只要发送方判断出拥塞(没有按时收到确认),就把ssthresh设为发送窗口的一半(但不能小于2)(乘法减小),然后把cwnd设置为1,执行慢开始算法。(这样做的目的就是要迅速减少主机发送到网络中的分组数,是的发生拥塞的路由器有足够时间把队列中积压的分组处理完。

 

快重传算法

首先要求接收方没收到一个时序的报文段后就立即发出重复确认,发送方只要连续收到3个重复确认后,就应当立即重传尚未收到的报文段。

快恢复算法

当发送单收到连续三个重复的确认时,就执行“乘法减小”算法,把ssthresh设置为拥塞窗口的一半,但是接下去不是从头执行慢开始算法;

由于发送方现在认为网络很有可能没有发生拥塞,所以现在不执行慢开始算法,即拥塞窗口cwnd现在不设置为1,设置为新的ssthresh大小,从那个地方开始执行拥塞避免算法。

 

拥塞控制基本概念