TCP拥塞控制机制

                                                          TCP拥塞控制机制

何为拥塞:
计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间内,若对网络中的资源的需求超过了可用的资源。若网络中的许多资源同时供应不足,网络的性能就会变坏,整个网络的吞吐量随之负荷的增大而降低,这种情况就叫做拥塞。

拥塞控制
就是为了防止过多的数据注入网络中,这样可以使用网络中的路由器或链路不致过载。拥塞控制时一个全局性的过程,拥塞控制所要做的都有一个前提:网络能够承受现有的网络符合。

流量控制
值点对点通信的控制,流量控制所要做的事就是抑制发送端发送数据的速率,以便接受端来得及接收。

拥塞控制的代价
需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要再结点之间交换信息和各种命令,以便选择控制的策略和实施控制,这样就会产生额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好的共享。

拥塞控制的机制
慢开始、拥塞避免、快重传、和快恢复。

1.慢开始和拥塞避免
发送方维持一个拥塞窗口的状态变量。
发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就会再增大一些,以便把更多的分组发送出去。但是只要网络出现了拥塞,拥塞窗口就会减小一点,以减少注入网络中的分组数。
慢开始的算法是:一开始不要发送大量的数据,先探测以下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。
慢开始算法:当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为1。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至原来的2倍。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。
每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。
另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:


image.png

拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕。

2.快重传和快恢复
如果发送方设置的超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,TCP马上把拥塞窗口 cwnd 减小到1,并执行慢开始算法,同时把慢开始门限值ssthresh减半。这是不使用快重传的情况。
快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。
由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。
与快重传配合使用的还有快恢复算法
<1>. 当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。
<2>. 由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用。

你可能感兴趣的:(TCP拥塞控制机制)