美文网首页
TCP拥塞控制-扔玉米的故事

TCP拥塞控制-扔玉米的故事

作者: Briarbear | 来源:发表于2018-05-28 19:46 被阅读0次

    车小胖-原文链接

    1. 慢启动(slow Start)

    亚当隔着山头扔玉米棒子给夏娃,亚当不知道夏娃能接多快,于是一次扔1个,编号为1.

    夏娃喊2,意思是老娘1号棒子收到了,准备迎接2号玉米棒子。

    亚当一次扔2个,编号为2,3

    夏娃喊4,准备迎接更多的玉米棒子。

    亚当一次扔4个,编号为4、5、6、7

    夏娃喊8,意识是让玉米棒子来得更猛烈些吧!

    亚当一次扔8个,编号为8、9、……15

    夏娃嘴里一直重复喊号12,次数为3次,这里传达了以下信息:

    8-11号玉米棒子已经安全到达

    12号玉米棒子肯定丢了

    13、14、15号玉米棒子也应该安全到达,否则夏娃只会喊一次12,是13、14、15号玉米触发了夏娃重复的叫喊

    亚当意识到自己扔太快了,需要降速,降到多少合适呢?降一半,一次扔4个没有问题

    if(dupacks >=3){
        ssthresh = max(2,cwmd/2);
    }
    //这里cwnd = 8,所以ssthresh=4
    

    注释:ssthresh(Slow Start Threshold:慢启动阈值),慢启动的峰值线,一旦超过该峰值线,则进入拥塞避免。

    但外面至少还有3个发出的玉米棒子还没有确认(Outstanding Packet),如果将

    cwnd = ssthresh = 4
    

    则意味着亚当最多一次可以扔4个玉米,但3个发出却还没确认的玉米棒子占了3个名额,所以亚当最多一次只能扔一次玉米棒子,发送速率急剧下降,这不合理


    2. 快速重传

    既然收到夏娃三次重复的确认,说明丢的玉米棒子(12)后的3个已经成功接收,不在空中飞(Fight),这三个虽然还没有明确的确认,但已经隐含地确认,所以这3个玉米棒子不应该占据在空中飞玉米的数量,在空中飞的玉米应该是4个,再加上到达夏娃的3个,所以亚当的cwnd(Congestion Windows:发送方的 Window 大小 )应该为7个

    cwnd = ssthresh + 3 * SMSS = 4+3 = 7
    

    亚当的快速重传

    1. 重传12号玉米
    2. 扔16、17、18、19号玉米

    快读重传结束信号

    • 一旦亚当接到16号玉米或者之后的确认,快速重传/快速修复完成

    3. 拥塞避免

    • 亚当意识到一次扔4个安全,于是选择cwnd = ssthresh = 4为基准线,如果一次扔4个没问题,那就一次扔5、6、7,线性增长到夏娃的接收极限

    ·

    相关文章

      网友评论

          本文标题:TCP拥塞控制-扔玉米的故事

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