TCP流量控制与拥塞控制

        发送方在确定发送报文段的速率时,既要根据接受方的接受能力,又要从全局考虑不要使用网络发生拥塞。因此TCP协议要求发送方 维护两个窗口

  1. 接收窗口rwnd,接收方根据目前接收缓存大小所许诺的最新的窗口值,反映了接收方的容量。由接收方根据其放在TCP报文的首部的窗口字段通知发送方。
  2. 拥塞窗口cwnd,发送方根据自己估计的网络拥塞程度而设置的窗口 值,反映了网络的当前容量。只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入网络的分组数。

发送窗口的上限值应当取接收窗口rwnd和拥塞窗口cwnd中较小的一个。

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

TCP拥塞控制:

    TCP通过一个定时器采用了往返时延RTT并快速重传,但是,如果网络上的延时突然增加,那么TCP对这个做出的应对只有重传数据,然后重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴”-----TCP的拥塞控制就是为了应对这样的情况。

       为了在发送端调节所要发送的数据量,定义一个“拥塞窗口”,在发送数据时,将拥塞窗口的大小与接受端的接收窗口大小作比较,取较小者作为发送数据量的上限。

     拥塞控制的四种算法:

1.  慢开始:意思是刚刚加入网络的连接,一点一点提速,不要一上来就把路占满。

连接建好的初始化的拥塞窗口=1,表明可以传一个MSS(最大报文段)的数据。

每当收到一个ACK(确认报文),拥塞窗口+1,呈线性上升

每当过了一个RTT(往返时延),拥塞窗口 * 2 ,呈指数上升

阈值ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法” 

2.  拥塞避免

发送端的拥塞窗口每经过一个RTT往返时延就增加一个MSS最大报文段大小(“加法增大”),每当出现一次网络拥塞时,则慢开始门限=当前拥塞窗口的一半(“乘法减小”)。

拥塞窗口<慢开始门限值  使用慢开始算法

拥塞窗口>=慢开始门限值   使用拥塞避免算法

当网络出现拥塞时,无论在慢开始阶段还是在拥塞避免阶段,只要发送方检测到重传计时器超时,就把慢开始门限=拥塞窗口/2,拥塞窗口=1。

3.  快速重传

发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。

4.  快恢复

当发送端收到连续三个冗余ACK时,就执行“乘法减小”算法,把慢开始门限设置为出现拥塞时发送方拥塞窗口的一半。然后把拥塞窗口大小设置为慢开始门限值,开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢的线性增大。

     

猜你喜欢

转载自blog.csdn.net/weixin_39590058/article/details/87893912
今日推荐