标签:
本文主要阐述TCP拥塞控制中ssthresh的来历以及为什么拥塞避免探测到丢包的时候,ssthresh会被设置为当前窗口的一半。为了达到最高的网络利用率,我们希望A和B之间的缓存(包括节点队列以及网络本身)中完全充盈着TCP的数据段,并且是持续维持。
我们还可以看到,前N个段是为了填满A,B之间的网络,后N个段是在“A,B之间已经满载的情况下”TCP的ACK clock驱动的pacing。紧随着这2*N个数据段的是一个新的周期,又是一个RTT内2*N个数据段,这就是理想情况下的情景,数据段充盈着网络,不间断地源源不断从发送端发出,ACK亦不间断地从接收端返回。
dangerous区域:
if (sysctl_tcp_abc > 1 && tp->bytes_acked >= 2*tp->mss_cache) cnt <<= 1;
如果你看不懂这个图,请自行google。我们可以肯定,在公平线的下方,红色的减窗线的斜率是恒小于公平线(斜45度角)的斜率的,两个链接的每一次降窗,其降窗线的斜率都会越来越接近公平线的斜率,即收敛到公平,最终,它将在绿色粗线上震荡,永葆公平(虽然利用率不是那么高!)。
我们还可以看到,TCP1和TCP2是等比例降窗的,在此例中比例是0.5,它们非得是0.5吗?非也!只要保持等比例,图中的注解1就永远成立,最终的收敛也会永远成立,不同的仅仅是最终收敛额绿色粗线的长度和范围!虽然说按照最初的Reno TCP,保持0.5的降窗比例是多么得合理(见上述推论),然而考虑到现实的复杂情况,比例不再是0.5也是合理的。我们可以看到,竞争者中降窗比率最小的将会最终抢占几乎所有的带宽,它会将所有的其它连接的带宽逐渐往左上角挤兑,最终归零。这么说来,如果想让自己的TCP具有侵略性,减少降窗比率是不是就可以了呢?没这么这简单!要知道,我上面的两幅图有一个共同的前提,那就是竞争者的RTT是相等的!但是现实中,会这样吗??非常难!如果RTT相等,比如它们的源头和目标都在同一个地点,那么它们十有八九是合作关系,而不是竞争!爆炸!
那么,RTT将会是一个十分重要的角色!确实是这样,实际的TCP在运行中,RTT的波动非常大,这就几乎将我上面的论述全部推翻了,显然很令人心碎!然而,上述的分析作为一个理论模型还是有意义的,它起码让你理解了TCP的本质行为。至于说实际情况,RTT的波动是一个有意义的信号,它让端系统看到了中间路由器交换机的排队行为,因此会出现RTT所谓的“噪点”,很多人想除掉它们,平滑掉它们,但是这同时也意味着你屏蔽了重要的信号。TCP核心概念-慢启动,ssthresh,拥塞避免,公平性的真实含义
标签:
原文地址:http://blog.csdn.net/dog250/article/details/51439747