2010-12-13 96 views
1

我正在玩各种使用Netkit的TCP算法。TCP拥塞窗口大小:奇怪的行为

有两台机器,C1C2,通过用强制的200ms延迟路由器连接。程序c1正在发送100字节的数据包到c2每个1ms(TCP_NODELAY打开)。 Reno被用作两台机器的拥塞控制。

根据tcpdump,只有前两个数据包立即发送(200字节),然后c1停止发送并等待ACK。接收器的窗口大约是2MSS(MSS = 1460),所以我猜想它是CWND,可以防止发送更多的数据包到c1

根据Reno规范,初始CWND是1MSS。我是否缺少那些东西?甚至发送1字节的数据包给出相同的图片,发送了2个数据包,然后发送者等待ACK。可能是最初的CWND大小是由初始段大小决定的,而不是MSS?

ip route show cache显示类似

cache mtu 1500 rtt 361ms rttvar 360ms cwnd 5 advmss 1460 hoplimit 64

我不知道这意味着CWND = 5MSS?

回答

1

RFC 2581

IW,拥塞窗口的初始值,必须是 小于或等于2 * SMSS字节 且不得超过2段。

我们注意到,非标准, 实验TCP扩展允许 一个TCP可使用较大的初始 窗口(IW),如等式1定义 [AFP98]:

IW = min (4*SMSS, max (2*SMSS, 4380 bytes))   (1) 

随着这个扩展,TCP发送者 可以使用3或4段初始的
窗口,前提是合并大小为 的段不超过4380 字节。我们不允许将此更改作为 本文档定义的标准的一部分。然而,我们包括 讨论(1)在这一文件作为 那些与 变化的实验,而不是遵循了TCP 拥塞控制 现行标准的指导方针的剩余部分 。

SENDER最大段大小(SMSS): 的SMSS是发送方可以发送 最大段的大小。该值可以基于网络的最大传输单元, 路径 MTU发现[MD90]算法,RMSS(参见下一项)或其他因素,可以是 。大小不包括TCP/IP标头和 选项。

您可能想要检查您的实施如何计算SMSS。

+0

那么,初始窗口大小是由发送的第一个段的大小决定的? – twee 2010-12-13 17:53:02

0

据我所知,在这种情况下,Linux会在“分段”中测量cwnd - 因此,只要您将两个段发送到航班,您的cwnd就会关闭以获取新数据。

0

初始窗口是2.它不是1的原因与延迟的ack有关。接收方通常在发送ack之前等待两个数据包。如果初始窗口为1,则在默认时间通常远大于所需的时间之后发送确认。这增加了不必要的延迟和闹钟。