美文网首页
(4)TCP拥塞处理 – Congestion Handling

(4)TCP拥塞处理 – Congestion Handling

作者: hedgehog1112 | 来源:发表于2020-12-08 17:35 被阅读0次

    1、背景:TCP用Sliding Window做流控(Flow Control),要依赖连接发送端接收端不知道网络中间发生什么。ps:伟大协议仅做流控不够,流控只是网络模型4层以上事,TCP要知道整个网络上事

    2、拥塞处理:TCP通过timer 采样RTT 并 计算RTO,如网络延时突然增加,TCP只有重传数据,导致负担更重,更大延迟丢更多包,恶性循环,拥塞发生,把路让出来,不去抢路

        RTT: 发数据包——收对应ACK,花费时间

        RTO: 发数据包——启动重传定时器到期,花费时间

    3、概要:四个算法:1)慢启动;2)拥塞避免;3)拥塞发生;4)快速恢复

    一、慢热启动算法 – Slow Start

    刚加入网络的连接,一点点提速,不要地把路占满

    1、慢启动的算法(cwnd  Congestion Window):

        1)连接建好,初始化cwnd = 1,表明可传一个MSS大小数据(cwnd 初始10个MSS)

        2)每收到一个ACKcwnd++; 线性上升

        3)每过一个RTT,cwnd = cwnd*2; 指数上升

        4)还有ssthresh(slow start threshold)上限,cwnd >= ssthresh进入“拥塞避免算法”

    ps:cwnd跟MSS值来变,如MSS< 1095,cwnd = 4;如MSS>2190,cwnd=2;其它情况3

    如网速很快,ACK返回快,RTT短,慢启动就不慢

    二、拥塞避免算法 – Congestion Avoidance

    一般ssthresh是65535字节,达到这值后,算法(线性上升):

    1)一个ACK时,cwnd = cwnd + 1/cwnd

    2)一个RTT时,cwnd = cwnd + 1

    可避免增长过快,导致网络拥塞慢慢增加调整,到网络最佳值

    三、拥塞时算法

    丢包时两种情况:

    1)等RTO超时,重传数据包(太糟糕,反应强烈)

    sshthresh =  cwnd /2    cwnd 重置为 1    进入慢启动过程

    2)Fast Retransmit算法,收到3个duplicate ACK开启重传,不等到RTO超

        TCP Tahoe实现和RTO超时一样

        TCP Reno实现:1.cwnd = cwnd /2    2.sshthresh = cwnd    3.进入快速恢复算法——Fast Recovery

    RTO超时后,sshthresh变cwnd一半,如cwnd<=sshthresh时丢包,sshthresh减半,cwnd指数增涨爬到这时,就成慢慢线性增涨。TCP怎么通过强烈震荡快速而小心,找到流量平衡点

    四、快速恢复算法  Fast Recovery

    在没有SACK支持下改进Fast Recovery算法

    1)sender收3个Duplicated Acks,进入Fast Retransimit模式,重传重复Acks指示的

    2)如只丢这一个,重传回的Ack,会把整个发的数据ack回来如没有,说明包丢了,叫这个ACK为Partial ACK(部分ack)

    3)Sender发现Partial ACK,sender知道有多个包被丢,继续重传sliding window里未被ack的第一个包。直到收不到Partial Ack,结束Fast Recovery

    “Fast Recovery变更”:激进同时延长Fast Retransmit和Fast Recovery过程

    http://www.52im.net/forum.php?mod=viewthread&tid=515

    相关文章

      网友评论

          本文标题:(4)TCP拥塞处理 – Congestion Handling

          本文链接:https://www.haomeiwen.com/subject/nuvfgktx.html