-1

我尝试使用 Mininet 模拟由 2 个主机和 1 个交换机组成的网络。一台主机作为发送方,使用 iperf 工具不断地向另一台主机(接收方)发送数据包。

H1----------------------------------------开关-------- ------H2

--------100Mbps|0.125ms------------100Mbps|0.125ms------

主机和交换机之间的链路带宽为100Mbps,延迟为0.125ms。

每个发送的数据包大小为 1.5KB,Switch 有 400 个数据包的缓冲区。

每条链路的延迟为 0.125ms,因此 H1、H2 之间的 RTT 为 4*0.125=0.5ms

CWND(拥塞窗口)是发送方在一个 RTT 中发送的数据包数,因此吞吐量计算为:吞吐量 = CWND/RTT。

因为 MAX(吞吐量) < 带宽所以 CWND < RTT*bandwidth=0.5*10^(-3)*100*10^6=50000b~6KB = 4packets

但是当我使用 tcp_probe 工具监控 CWND 时,它令人惊讶地显示 CWND 总是大于 200KB(~120packets),比我预期的要大得多。

TCP CWND 绘图

即使缓冲区是 400 个数据包,但它不能有这么大的 CWND。

请为我解释一下,我真的被这个问题困住了。谢谢!

4

1 回答 1

3

我不认为您可以按照您的方式计算 CWND 和 RTT,因为您实际上认为数据包停留在交换机和 H1 和 H2 的网络堆栈中的时间为零。

拥塞窗口 (CWND) 是可以在不丢失数据包的情况下传输的数据量,例如,只要所有内容都得到 ACK,它就会增加,并且在数据包丢失时减少。

根据您的数据,CWND 在大约 600 处被降级,因此丢包从大约 400 个数据包开始,这是交换机的缓冲区大小。所以此时在 H1 和 H2 之间传输的数据包不是 4 个,而是大约 400 个,RTT 可能远大于 0.5ms。

于 2014-04-06T17:49:15.660 回答