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

2018-05-28  本文已影响0人  Briarbear

车小胖-原文链接

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号玉米

快读重传结束信号


3. 拥塞避免

·

上一篇 下一篇

猜你喜欢

热点阅读