慢启动阶段的TCP拥塞窗口大小

慢启动阶段的TCP拥塞窗口大小,tcp,protocols,congestion-control,Tcp,Protocols,Congestion Control,我有一个关于TCP发送方的拥塞窗口在慢启动阶段的增长率的问题。 传统上,对于每一个RTT,cwnd的大小都会呈指数增长。例如,如果初始cwnd值为1,则增加2->4->8->16-> 在我的例子中,由于发送方使用linux内核3.5,所以初始cwnd为10。 我预计cwnd将增加10->20->40->。。。没有延迟确认(我在接收器上关闭了它)。但是,当接收方通过HTTP从发送方下载大容量(超过1MB)的对象时,cwnd增加为10->12->19->29->。。。。我不能理解这个顺序 我将RTT

我有一个关于TCP发送方的拥塞窗口在慢启动阶段的增长率的问题。 传统上,对于每一个RTT,cwnd的大小都会呈指数增长。例如,如果初始cwnd值为1,则增加2->4->8->16->

在我的例子中,由于发送方使用linux内核3.5,所以初始cwnd为10。 我预计cwnd将增加10->20->40->。。。没有延迟确认(我在接收器上关闭了它)。但是,当接收方通过HTTP从发送方下载大容量(超过1MB)的对象时,cwnd增加为10->12->19->29->。。。。我不能理解这个顺序

我将RTT设置为100ms,链路带宽足够高。在一个会话中没有损失。我通过计算接收方在一个RTT内收到的数据包数量来估计发送方的cwnd

有人知道这种行为吗?
谢谢。

内核3.5中的dafault拥塞控制算法不是TCP Reno,而是CUBIC。 立方体有不同的行为。它起源于BIC,我知道立方共享BIC的慢启动阶段。只需在/usr/src/yourkenelname/net/ipv4/tcp_CUBIC.c上查看BIC和CUBIC的代码

此外,延迟ack可能导致这样的序列。你知道,传统的TCP拥塞控制行为是没有DACK和SACK的TCP reno。 要知道,即使是Linux中当前的TCP雷诺也不是雷诺,而是新雷诺(带有SACK的雷诺)


使用sysctl命令检查延迟确认和选择确认选项

内核3.5中的dafault拥塞控制算法不是TCP Reno,而是立方体。 立方体有不同的行为。它起源于BIC,我知道立方共享BIC的慢启动阶段。只需在/usr/src/yourkenelname/net/ipv4/tcp_CUBIC.c上查看BIC和CUBIC的代码

此外,延迟ack可能导致这样的序列。你知道,传统的TCP拥塞控制行为是没有DACK和SACK的TCP reno。 要知道,即使是Linux中当前的TCP雷诺也不是雷诺,而是新雷诺(带有SACK的雷诺)

使用sysctl命令检查延迟确认和选择确认选项