【问题标题】:tcp reno, newreno and slow starttcp reno、newreno 和慢启动
【发布时间】:2011-04-17 15:47:25
【问题描述】:
当在慢启动时发生丢包时,reno/newreno 算法是否注意到可能的 dupacks,还是纯粹的慢启动 -> rto?
因此,如果发送两个数据包(在慢启动开始时),而第一个数据包丢失,那么慢启动除了 rto 之外还有什么作用吗?
这令人困惑,因为 rfc 声明“实际上它们(慢启动和避免拥塞)是一起实现的”。而且linux源码读起来有点厚,只有一个实现。
【问题讨论】:
标签:
networking
tcp
network-protocols
【解决方案1】:
慢速丢包时
开始,reno/newreno
算法注意到可能的双包,或
是纯粹的慢启动 -> rto?
我会说“是”,重复的 ACK 将被检测到并采取行动。见RFC 2001, Section 2.3。
因此,如果发送两个数据包(在开始
慢启动),第一个去
丢失,慢启动有什么作用吗
除了 rto 之外还有其他吗?
这个特殊的例子会导致一个“简单的 RTO”。在只能发送两个数据包的慢启动开始期间,最多会有 一个 重复 ACK(由第二个数据包到达触发)。如果两个数据包(将)一起确认,甚至可能没有。但是一个重复的 ACK 不会触发快速重传。所以TCP会等待重传定时器超时。
这很令人困惑,因为 rfc 声明
'在实践中他们(慢启动&
拥塞避免)被实施
一起'。而且linux源码有点
厚读,只有一个
实施。
我同意 linux 源代码是一本厚书。但它是确定的,如果你真的需要知道可能是唯一的选择:) 除非你找到读过(或写过)它的人;我没有。