我尝试使用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(througput)&lt;带宽因此CWND < RTT *带宽= 0.5 * 10 ^( - 3)* 100 * 10 ^ 6 = 50000b~6KB = 4个数据包
但是当我使用tcp_probe工具监视CWND时,令人惊讶地显示CWND总是大于200KB(~120个数据包),比我预期的要大得多。
即使缓冲区也是400个数据包,但它不能像那样大的CWND。
请为我解释,我真的坚持这个问题。 谢谢!
答案 0 :(得分:3)
我认为你不能像你那样计算CWND和RTT,因为你有效地认为数据包停留在交换机中以及H1和H2的网络堆栈中的时间为零。
拥塞窗口(CWND)是可以在没有丢包的情况下传输的数据量,例如,只要一切都得到确认并减少数据包丢失,它就会增加。
根据您的数据,CWND降级到大约600,因此数据包丢失从大约400个数据包开始,这是交换机的缓冲区大小。所以在这个时刻H1和H2之间没有4个数据包在传输,但是大约400个,RTT可能远大于0.5ms。