我很难理解这个概念。
为什么当TCP Reno检测到三重重复的ACK并且在超时时将其窗口缩小到1个段时,为什么TCP拥塞窗口减半?
我明白,里诺这样做,但我不明白为什么 。 任何帮助?
简短的回答
长的答案
与只有两种状态Slow Start和Congestion Avoidance TCP Tahoe , TCP Reno有另一种称为Fast Recovery状态。
在三重复制Ack , TCP Reno转换为Fast Recovery 。
在Fast Recovery状态下,当它收到一个新的Ack时,会转换回Congestion Avoidance当拥塞窗口转换到Fast Recovery状态时,将拥塞窗口重置为拥塞窗口大小的一半。
在超时时间,就像Congestion Avoidance一样,它返回到Slow Start 。
在接收到重复的Ack ,它将拥塞窗口递增1.( 拥塞窗口通信 )
之所以不进入Slow Start状态(意思是把拥塞窗口减less到1)是因为接收到重复的Ack告诉TCP不仅仅是一个数据包已经丢失。 当接收到另一个分段时,接收方只能产生重复的Ack ,该分段已经离开networking并且在接收方的缓冲区中。
所以两端之间还有数据stream动,而TCP Reno并不想突然减lessstream量。
通过将拥塞窗口减半,保持Congestion Avoidance状态, TCP Reno可以提高networking性能。
您可以在此链接中看到关于TCP Reno和TCP Tahoe性能的简单testing。
重复ACK的到来表明有些东西已经离开pipe道,并且是“不太严重的拥塞”的指示,并且有分组被缓冲,并且可能在飞行中,所以我们希望保持stream量可以这么说。 将拥塞窗口减半会减lesspipe道空闲的时间(并且拥塞控制风格不会减less太多)。
超时是一个更严重的迹象,所以更合适的反应是减less更多的窗口。
如果你正在寻找一个乘法下降因子为0.5的理由(相对于例如一个加法递减,或者一个更大的乘法常数如0.9), Van Jacobson在本文的附录D中有一个,原有TCP拥塞控制algorithm的devise者。