发生拥塞时 TCP 流的速率如何变化
How TCP flow's rate change when congestion occur
感谢您点击我的问题。
我正在做一个小实验来了解 TCP 流在拥塞时的行为。
在这个实验中,我发现当发生拥塞时,tcp 流量比我想象的要大得多。
由于拥塞控制,我认为它的速率最多应该减半。
但在我的实验中没有。
你能给我一点提示吗?下面是我的实验。
感谢再次点击
我用Mininet
做了一个小型网络,由两台主机和一台交换机组成。
H1 - S1 - H2 ,所有 link BW 80Mbps
然后,我使用 iperf3
生成了从 H2 到 H1 的流量,如下所示
#H1
iperf3 -s -p 1212 -f m -i 1
#H2
iperf3 -c 10.0.0.1 -p 1212 -t 10000 -f m -b 70M
表示H2以70Mbit/s的速度向H1发送TCP数据包
(iperf3 在应用层控制其 TCP 速率。)
然后我们可以在H1(服务器侧)看到报告
-----------------------------------------------------------
Server listening on 1212
-----------------------------------------------------------
Accepted connection from 10.0.0.2, port 51786
[ 17] local 10.0.0.1 port 1212 connected to 10.0.0.2 port 51788
[ ID] Interval Transfer Bandwidth
[ 17] 0.00-1.00 sec 7.49 MBytes 62.8 Mbits/sec
[ 17] 1.00-2.00 sec 8.14 MBytes 68.3 Mbits/sec
[ 17] 2.00-3.00 sec 8.54 MBytes 71.7 Mbits/sec
[ 17] 3.00-4.00 sec 8.60 MBytes 72.2 Mbits/sec
[ 17] 4.00-5.00 sec 7.98 MBytes 66.9 Mbits/sec
[ 17] 5.00-6.00 sec 8.80 MBytes 73.9 Mbits/sec
[ 17] 6.00-7.00 sec 8.21 MBytes 68.9 Mbits/sec
[ 17] 7.00-8.00 sec 7.77 MBytes 65.1 Mbits/sec
[ 17] 8.00-9.00 sec 8.30 MBytes 69.7 Mbits/sec
[ 17] 9.00-10.00 sec 8.45 MBytes 70.9 Mbits/sec
[ 17] 10.00-11.00 sec 8.32 MBytes 69.7 Mbits/sec
此时,我使用 linux tc
限制了 S1 端口(s1-eth1,从 H2 到 H1 的出口)
sudo tc qdisc del dev s1-eth1 root
sudo tc qdisc add dev s1-eth1 root tbf rate 40mbit latency 10ms burst 1mbit
那么结果如下
[ 17] 0.00-1.00 sec 7.76 MBytes 65.0 Mbits/sec
[ 17] 1.00-2.00 sec 8.09 MBytes 67.9 Mbits/sec
[ 17] 2.00-3.00 sec 8.53 MBytes 71.5 Mbits/sec
[ 17] 3.00-4.00 sec 8.47 MBytes 71.0 Mbits/sec
[ 17] 4.00-5.00 sec 8.08 MBytes 67.8 Mbits/sec
[ 17] 5.00-6.00 sec 8.09 MBytes 67.9 Mbits/sec
[ 17] 6.00-7.00 sec 8.74 MBytes 73.3 Mbits/sec
[ 17] 7.00-8.00 sec 7.81 MBytes 65.6 Mbits/sec
[ 17] 8.00-9.00 sec 8.35 MBytes 70.0 Mbits/sec
[ 17] 9.00-10.00 sec 4.56 MBytes 38.3 Mbits/sec
[ 17] 10.00-11.00 sec 4.56 MBytes 38.2 Mbits/sec
[ 17] 11.00-12.00 sec 4.56 MBytes 38.2 Mbits/sec
[ 17] 12.00-13.00 sec 4.56 MBytes 38.2 Mbits/sec
[ 17] 13.00-14.00 sec 4.56 MBytes 38.2 Mbits/sec
如您所见,它的速率约为 40Mbps。
我认为当发生拥塞时,TCP状态应该变成slow start
然后它的速率应该变得更小。但它没有。
我检查了 iperf3
源代码,但它只是使 TCP 流量达到来自应用层的数量。因此它对 TCP 算法的行为没有影响。
为什么会这样?我不知道...
你能给我一点提示吗?我很感激你!
首先,我要在实验前把参数设置好。
1) 当设置link带宽时,我们可以在TC
设置中设置burst size(,or mtu size)。
它看起来对 iperf
TCP 流量的波动有影响。
当 burst size 较小时,其速率波动或较低,超出我的预期。
2) 另外,我们可以在交换机上设置MTU大小(Jumbo frame size)。
因为我用的是OVS(OpenVSwitch
),所以我设置参数为the site。
3) 而且,我们可以使用ethtool
.设置接口卡的MTU大小
可以看到this site.
正确设置以上参数后,需要观察TCP速率。
尽管拥塞TCP速率不小的原因似乎是小RTT值。
与 the slide 一样,TCP 在每个 RTT 传输其数据包。
在我的实验中,RTT 的值要小得多,因为两个主机之间只有一条边。
因此,在秒表中,看起来主机没有降低它的速度,但实际上它确实如此。
感谢您点击我的问题。
我正在做一个小实验来了解 TCP 流在拥塞时的行为。
在这个实验中,我发现当发生拥塞时,tcp 流量比我想象的要大得多。
由于拥塞控制,我认为它的速率最多应该减半。
但在我的实验中没有。
你能给我一点提示吗?下面是我的实验。
感谢再次点击
我用Mininet
做了一个小型网络,由两台主机和一台交换机组成。
H1 - S1 - H2 ,所有 link BW 80Mbps
然后,我使用 iperf3
生成了从 H2 到 H1 的流量,如下所示
#H1
iperf3 -s -p 1212 -f m -i 1
#H2
iperf3 -c 10.0.0.1 -p 1212 -t 10000 -f m -b 70M
表示H2以70Mbit/s的速度向H1发送TCP数据包
(iperf3 在应用层控制其 TCP 速率。)
然后我们可以在H1(服务器侧)看到报告
-----------------------------------------------------------
Server listening on 1212
-----------------------------------------------------------
Accepted connection from 10.0.0.2, port 51786
[ 17] local 10.0.0.1 port 1212 connected to 10.0.0.2 port 51788
[ ID] Interval Transfer Bandwidth
[ 17] 0.00-1.00 sec 7.49 MBytes 62.8 Mbits/sec
[ 17] 1.00-2.00 sec 8.14 MBytes 68.3 Mbits/sec
[ 17] 2.00-3.00 sec 8.54 MBytes 71.7 Mbits/sec
[ 17] 3.00-4.00 sec 8.60 MBytes 72.2 Mbits/sec
[ 17] 4.00-5.00 sec 7.98 MBytes 66.9 Mbits/sec
[ 17] 5.00-6.00 sec 8.80 MBytes 73.9 Mbits/sec
[ 17] 6.00-7.00 sec 8.21 MBytes 68.9 Mbits/sec
[ 17] 7.00-8.00 sec 7.77 MBytes 65.1 Mbits/sec
[ 17] 8.00-9.00 sec 8.30 MBytes 69.7 Mbits/sec
[ 17] 9.00-10.00 sec 8.45 MBytes 70.9 Mbits/sec
[ 17] 10.00-11.00 sec 8.32 MBytes 69.7 Mbits/sec
此时,我使用 linux tc
sudo tc qdisc del dev s1-eth1 root
sudo tc qdisc add dev s1-eth1 root tbf rate 40mbit latency 10ms burst 1mbit
那么结果如下
[ 17] 0.00-1.00 sec 7.76 MBytes 65.0 Mbits/sec
[ 17] 1.00-2.00 sec 8.09 MBytes 67.9 Mbits/sec
[ 17] 2.00-3.00 sec 8.53 MBytes 71.5 Mbits/sec
[ 17] 3.00-4.00 sec 8.47 MBytes 71.0 Mbits/sec
[ 17] 4.00-5.00 sec 8.08 MBytes 67.8 Mbits/sec
[ 17] 5.00-6.00 sec 8.09 MBytes 67.9 Mbits/sec
[ 17] 6.00-7.00 sec 8.74 MBytes 73.3 Mbits/sec
[ 17] 7.00-8.00 sec 7.81 MBytes 65.6 Mbits/sec
[ 17] 8.00-9.00 sec 8.35 MBytes 70.0 Mbits/sec
[ 17] 9.00-10.00 sec 4.56 MBytes 38.3 Mbits/sec
[ 17] 10.00-11.00 sec 4.56 MBytes 38.2 Mbits/sec
[ 17] 11.00-12.00 sec 4.56 MBytes 38.2 Mbits/sec
[ 17] 12.00-13.00 sec 4.56 MBytes 38.2 Mbits/sec
[ 17] 13.00-14.00 sec 4.56 MBytes 38.2 Mbits/sec
如您所见,它的速率约为 40Mbps。
我认为当发生拥塞时,TCP状态应该变成slow start
然后它的速率应该变得更小。但它没有。
我检查了 iperf3
源代码,但它只是使 TCP 流量达到来自应用层的数量。因此它对 TCP 算法的行为没有影响。
为什么会这样?我不知道...
你能给我一点提示吗?我很感激你!
首先,我要在实验前把参数设置好。
1) 当设置link带宽时,我们可以在TC
设置中设置burst size(,or mtu size)。
它看起来对 iperf
TCP 流量的波动有影响。
当 burst size 较小时,其速率波动或较低,超出我的预期。
2) 另外,我们可以在交换机上设置MTU大小(Jumbo frame size)。
因为我用的是OVS(OpenVSwitch
),所以我设置参数为the site。
3) 而且,我们可以使用ethtool
.设置接口卡的MTU大小
可以看到this site.
正确设置以上参数后,需要观察TCP速率。
尽管拥塞TCP速率不小的原因似乎是小RTT值。
与 the slide 一样,TCP 在每个 RTT 传输其数据包。
在我的实验中,RTT 的值要小得多,因为两个主机之间只有一条边。
因此,在秒表中,看起来主机没有降低它的速度,但实际上它确实如此。