我是一名新手网络工程师。
我使用 iperf3 做了一个小实验。但是遇到了一个小问题。
(1)我的问题。
我认为,尽管 TCP 有拥塞控制,但其流仍无法正常运行。
由于拥塞,流量降低其速率(流量>链路带宽)。
然而它的 cwnd 却不断增加。
怎么会这样呢?
(2)实验环境
Ubuntu 14.04
Mininet 2.3.0d5
:[拓扑] 主机 1-交换机 1-主机 2
Linux TC
在kernel version 4.4.0-148-generic
:设置所有链路带宽为 100Mbps,并采用适当的 MTU 大小
(3)实验内容
我生成了一个速率为 130Mbps 的流量,从 H2 到 H1。
由于链路带宽100Mbps,
由于拥塞算法,它必须将速率从 130Mbps 降低到 100Mbps
我观察到了这种减少和拥塞算法。
a. server : iperf3 -s -p 1212 -f m -A 7 -i 1
b. client : iperf3 -c 10.0.0.1 -p 1212 -t 10 -f m -b 130M -A 7 -l 63k -w 10M -i 1
Connecting to host 10.0.0.1, port 1212
[ 4] local 10.0.0.2 port 42010 connected to 10.0.0.1 port 1212
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 14.0 MBytes 118 Mbits/sec 0 570 KBytes
[ 4] 1.00-2.00 sec 15.5 MBytes 130 Mbits/sec 0 1.13 MBytes
[ 4] 2.00-3.00 sec 15.5 MBytes 130 Mbits/sec 0 1.69 MBytes
[ 4] 3.00-4.00 sec 12.7 MBytes 106 Mbits/sec 0 2.27 MBytes
[ 4] 4.00-5.00 sec 11.3 MBytes 95.0 Mbits/sec 0 2.84 MBytes
[ 4] 5.00-6.00 sec 11.4 MBytes 95.5 Mbits/sec 0 3.41 MBytes
[ 4] 6.00-7.00 sec 11.4 MBytes 95.4 Mbits/sec 0 3.98 MBytes
[ 4] 7.00-8.00 sec 11.3 MBytes 95.0 Mbits/sec 0 4.55 MBytes
[ 4] 8.00-9.00 sec 11.4 MBytes 95.3 Mbits/sec 0 5.12 MBytes
(4)我的问题详细如下。
由于其带宽(100Mbps),我认为该流量将遇到拥塞并减少其cwnd。
但事实并非如此。流的cwnd不断增加。
此外,虽然它没有降低 cwnd,但它降低了速率。怎么会发生这种情况?没有重新传输。
您能给我一点提示来帮助我理解这个奇怪的事情吗?
感谢您的阅读!
答案1
我找到了答案。
这不是奇怪的行为。我只是缺乏理解。
在拥塞发生之前,传输的数据包正在交换机缓冲区中排队。
随着缓冲区中的数据包数量不断增加,RTT 值也不断增加。
因此,虽然 cwnd 值在增加,但流的速率看起来是恒定的。
然而,当 cwnd 值较大并且传输的数据包足以在缓冲区中排队时,缓冲区将发生溢出。
然后我们可以看到重传,丢包和tcp拥塞状态的转换。