我是新手网络工程师。
我用 iperf3 做了一个小实验。但我遇到了一个小问题。
(1) 我的问题。
我认为尽管有拥塞控制,TCP 流仍不能正常运行。
由于拥塞(流量 > 链路带宽),流量会降低其速率。
然而,它的 cwnd 正在不断增加。
怎么会发生?
(2) 实验环境
Ubuntu 14.04
Mininet 2.3.0d5
: [拓扑] HOST1 -SWITCH1 - HOST2
Linux TC
在kernel version 4.4.0-148-generic
:使用适当的 MTU 大小将所有链路带宽设置为 100Mbps
(3) 实验内容
我生成了一个从 H2 到 H1 速率为 130Mbps 的流。
由于链路带宽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,但它降低了它的速率。怎么会发生?没有重传。
你能给我一点提示来理解这个奇怪的东西吗?
感谢您的阅读!
我找到了答案。
这不是奇怪的行为。我只是缺乏了解。
在发生拥塞之前,传输的数据包在交换机缓冲区中排队。
随着缓冲区中数据包数量的增加,RTT值也在增加。
因此,尽管 cwnd 值在增加,但流量看起来是恒定的。
但是,当 cwnd 值较大并且数据包传输到足以在缓冲区中排队时,缓冲区中将发生溢出。
然后我们可以看到重传、丢包和tcp拥塞状态转换。