tcp 拥塞控制

Posted ts65214

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcp 拥塞控制相关的知识,希望对你有一定的参考价值。

 

大量的源想以过高的速度发送数据,导致路由器缓存溢出,继而丢包。

 

速率控制:TCP维护拥塞窗口cwnd变量,发送端未被确认的数据量不能超过cwnd

    cwnd代表发送端认为能发送的数据量,流量控制窗口代表接收端能接收的数据量,

    实际能发送的数据量是二者的较小值

 

拥塞检测:隐式检测:超时或者收到三个冗余ack(加上最初的确认一共4个相同的ack)

   显式通知:选择确认(SACK)

   显式通知:IP层可以用显示拥塞通知告知TCP发生了拥塞

选择确认:发送方使用第一个选项,表明允许SACK

   接收方使用第二个选项,表明收到的块的起始序号,一次最多4个块

   

显示拥塞通知(ECN):建立连接时,发送方和接收方都设置了ECECWR标志位,表示他们都能使用这些标志位。每个携带TCP的数据包在IP头打上标记,表明它可以携带ECN信号。支持ECN的路由器会在将要拥塞时在数据包上设置拥塞信号,而不是丢弃数据包。接收端IP层看到ECN信号,会通知TCPTCP接收端使用ECE标志位通知发送端,发送端通过拥塞窗口减少(CWR)标志位告诉接收端它已经收到拥塞信号了。

 

自适应重传算法:监视每条连接的性能,随时修改超时时间

 

估计往返时间(RTT):隔段时间测量一下报文段的RTT,然后求加权平均值estimatedRTT

不测量重传的报文段的ack,因为无法确定ack确认的是哪一个报文段

设置超时时间,即设置重传计时器:

   estimatedRTT加上一定的余量,RTT波动大,则余量就设置大一点。

   计时器退避:每次超时后将超时时间翻倍(有上限,累计总时间通常4~10分钟)

   因为超时可能是由于网络拥塞,而过多的重发会加剧拥塞

   收到ack后重启定时器

 

 

TCP拥塞控制算法    

慢启动:cwnd初始为1MSS,每收到一个ackcwnd就增加一个MSS,每经过一个RTT

发送速率就翻倍。发送速率在慢启动阶段是指数增长的。

超时后将cwnd设置为1MSS并重新开始慢启动过程,

并将慢启动阈值ssthresh设置为拥塞窗口值的一半,即cwnd/2

此后cwnd等于ssthresh时,进入拥塞避免模式。

当检测到3个冗余ackTCP执行快速重传并进入快速恢复状态

拥塞避免:cwnd大约为上次拥塞时的一半,

    窗口内所有报文段都收到ack后增加一个MSS

  超时或收到3个冗余ack时,ssthresh设置为cwnd/2

  超时时将cwnd置为1MSS

  收到3个冗余ack时将cwnd置为cwnd/2,并进入快速恢复状态

快速重传:又称快速恢复,快速恢复是推荐的,不是必须的。

  连续收到三个冗余ack,则在超时前可以立即重传该报文段

  每收到一个冗余ackcwnd增加一个MSS

  收到对丢失报文段的ack后,TCP进入拥塞避免状态

  超时时将cwnd置为1MSSssthresh设置为cwnd/2,进入慢启动状态

 

TCP的拥塞控制算法是加法递增乘法递减(AIMD)的,是公平的

初始值早期设置为1MSS,后来改为4MSS

 

以上是关于tcp 拥塞控制的主要内容,如果未能解决你的问题,请参考以下文章

TCP拥塞控制

TCP拥塞控制及BBR原理分析

TCP拥塞控制算法之NewReno和SACK

网络拥塞控制 TCP拥塞控制算法

浅谈TCP拥塞控制算法

TCP拥塞