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

车小胖-原文链接

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,线性增长到夏娃的接收极限

·

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 21.1 引言 TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。T...
    张芳涛阅读 3,058评论 0 8
  • 位于布宜诺斯艾利斯Recoleta区的贵族公墓见证了阿根廷这个国家诸多大家族的兴衰,贝隆夫人亦长眠于此。 在即将离...
    windspeaker88阅读 843评论 0 4
  • 今天翻了翻涂子沛大数据这本书,所有的科技发展潮流要看美国。这本书的第一部分主要讲美国的成功经验,从信息安全法的历史...
    黑土钱阅读 149评论 1 0
  • 在窗边看手机,余光里有东西晃了一下,又听见翅膀扇动的声音,发现一只黄色的蜂。 它扑楞着翅膀,在玻璃窗上一晃一晃地爬...
    山茶冬歌阅读 204评论 0 0
  • 做最好的自己,才能碰见最好的别人。眼是一把尺,看人先看己;心是一杆秤,称人也称己,心中有德,是慈悲;口中有德,是善...
    回眸一笑嗯阅读 263评论 0 1