码迷,mamicode.com
首页 > 其他好文 > 详细

tcp 拥塞控制

时间:2020-05-26 20:06:38      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:接收   rtt   拥塞避免   定时   修改   建立连接时   cal   慢启动   维护   

 

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

 

速率控制: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 拥塞控制

标签:接收   rtt   拥塞避免   定时   修改   建立连接时   cal   慢启动   维护   

原文地址:https://www.cnblogs.com/ts65214/p/12968263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!