TCP拥塞窗口大小:奇怪的行为

TCP拥塞窗口大小:奇怪的行为,tcp,congestion-control,Tcp,Congestion Control,我正在使用Netkit玩各种TCP算法 有两台机器,c1和c2,由路由器以强制200毫秒延迟连接。c1上的程序每1ms向c2发送100字节的数据包(TCP_节点延迟打开)。Reno在两台机器上都用作拥塞控制 根据tcpdump,只立即发送前2个数据包(200字节),然后c1停止发送并等待确认。接收器的窗口大约是2MSS(MSS=1460),所以我猜是CWND阻止了c1发送更多的数据包 根据雷诺规范,初始CWND为1MSS。我是不是遗漏了什么?。。即使发送1字节的数据包也会给出相同的图片,发送2个

我正在使用Netkit玩各种TCP算法

有两台机器,c1c2,由路由器以强制200毫秒延迟连接。c1上的程序每1ms向c2发送100字节的数据包(TCP_节点延迟打开)。Reno在两台机器上都用作拥塞控制

根据tcpdump,只立即发送前2个数据包(200字节),然后c1停止发送并等待确认。接收器的窗口大约是2MSS(MSS=1460),所以我猜是CWND阻止了c1发送更多的数据包

根据雷诺规范,初始CWND为1MSS。我是不是遗漏了什么?。。即使发送1字节的数据包也会给出相同的图片,发送2个数据包,然后发送方等待ACK。是否初始CWND大小由初始段大小决定,而不是由MSS决定

ip路由显示缓存
显示如下内容

缓存mtu 1500 rtt 361ms rttvar 360ms cwnd 5 ADVMS 1460 HOPFLIMIT 64

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

来自

IW是cwnd的初始值,必须为 小于或等于2*SMSS字节 并且不能超过2段

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

  IW = min (4*SMSS, max (2*SMSS, 4380 bytes))           (1)
有了这个扩展,TCP发送器 可以使用3或4段首字母
窗口,提供了 段数不超过4380 字节。我们不允许这种变化 由定义的标准的一部分 这份文件。然而,我们包括 其余部分对(1)的讨论 作为本文件的指南 那些正在试验 改变,而不是顺应潮流 TCP的现行标准 拥塞控制

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

您可能需要检查您的实现是如何计算SMS的。

IW是cwnd的初始值,必须为 小于或等于2*SMSS字节 并且不能超过2段

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

  IW = min (4*SMSS, max (2*SMSS, 4380 bytes))           (1)
有了这个扩展,TCP发送器 可以使用3或4段首字母
窗口,提供了 段数不超过4380 字节。我们不允许这种变化 由定义的标准的一部分 这份文件。然而,我们包括 其余部分对(1)的讨论 作为本文件的指南 那些正在试验 改变,而不是顺应潮流 TCP的现行标准 拥塞控制

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


您可能需要检查您的实现是如何计算SMS的。

据我所知,Linux在本例中是在“段”中测量cwnd的——因此,一旦您将两个段发送到航班,您的cwnd就会关闭以获取新数据。

据我所知,Linux在“段”中测量cwnd在这种情况下-一旦您向航班发送了两个航段,您的cwnd将关闭以获取新数据。

初始窗口为2。它不是1的原因与延迟的ACK有关。接收器通常在发送ack之前等待两个数据包。如果初始窗口为1,则ack将在默认时间后发送,通常比需要的时间大得多。这会增加不必要的延迟并干扰确认时钟。

初始窗口为2。它不是1的原因与延迟的ACK有关。接收器通常在发送ack之前等待两个数据包。如果初始窗口为1,则ack将在默认时间后发送,通常比需要的时间大得多。这会增加不必要的延迟并干扰ack时钟。

因此,初始窗口大小由发送的第一段的大小决定?因此,初始窗口大小由发送的第一段的大小决定?