Networking TCP流如何';发生拥塞时的速率变化

Networking TCP流如何';发生拥塞时的速率变化,networking,tcp,iperf,congestion-control,Networking,Tcp,Iperf,Congestion Control,谢谢你点击我的问题 我正在做一个小实验来了解TCP流在拥塞时的行为 在这个实验中,我发现当拥塞发生时,tcp流的速率比我想象的要大得多 我认为由于它的拥塞控制,它的速度最多应该减半 但在我的实验中没有 你能给我一点提示吗?下面是我的实验 谢谢再次点击 我使用Mininet制作了一个小型网络,由两台主机和一个交换机组成 H1-S1-H2,所有链路带宽均为80Mbps 然后,我使用下面的iperf3生成了从H2到H1的流量 #H1 iperf3 -s -p 1212 -f m -i 1 #H2

谢谢你点击我的问题

我正在做一个小实验来了解TCP流在拥塞时的行为

在这个实验中,我发现当拥塞发生时,tcp流的速率比我想象的要大得多

我认为由于它的拥塞控制,它的速度最多应该减半

但在我的实验中没有

你能给我一点提示吗?下面是我的实验

谢谢再次点击



我使用
Mininet
制作了一个小型网络,由两台主机和一个交换机组成

H1-S1-H2,所有链路带宽均为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(服务器siide)上看到报告

此时,我使用
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       
如您所见,其速率约为40 Mbps

我认为当拥塞发生时,TCP状态应该变成
慢启动
,然后它的速率应该变得更小。但事实并非如此

我检查了
iperf3
源代码,但它只是使TCP流量达到应用层的流量。因此,它对TCP算法的行为没有影响

为什么会这样?我不知道


你能给我一点提示吗?谢谢你

首先,我必须在实验前正确设置参数

1)在设置链路带宽时,我们可以将突发大小(,或mtu大小)设置为
TC
设置。

它似乎对
iperf
TCP流的波动有影响

当突发大小较小时,其速率波动或较低,超出我的预期

2)此外,我们还可以在交换机上设置MTU大小(巨型帧大小)。

因为我使用OVS(
OpenVSwitch
),所以我将参数设置为

3)并且,我们可以使用
ethtool
你可以看到


正确设置上述参数后,需要观察TCP速率

尽管存在拥塞,TCP速率仍不更小的原因似乎是RTT值很小

如中所示,TCP在每个RTT传输其数据包

在我的实验中,RTT的值要小得多,因为两个主机之间只有一条边


因此,在第二个尺度上,看起来宿主并没有降低它的速率,但实际上确实如此。

首先,我必须在实验之前正确设置参数

1)在设置链路带宽时,我们可以将突发大小(,或mtu大小)设置为
TC
设置。

它似乎对
iperf
TCP流的波动有影响

当突发大小较小时,其速率波动或较低,超出我的预期

2)此外,我们还可以在交换机上设置MTU大小(巨型帧大小)。

因为我使用OVS(
OpenVSwitch
),所以我将参数设置为

3)并且,我们可以使用
ethtool
你可以看到


正确设置上述参数后,需要观察TCP速率

尽管存在拥塞,TCP速率仍不更小的原因似乎是RTT值很小

如中所示,TCP在每个RTT传输其数据包

在我的实验中,RTT的值要小得多,因为两个主机之间只有一条边


因此,在第二个尺度上,主机看起来并没有降低it速率,但事实上确实如此。

以更好的分辨率查看发生了什么的最有效方法(网络的1秒时间很长)我建议使用Wireshark或类似工具捕获流量。@C.Gonzalez非常感谢!我现在监控交通!以更好的分辨率(1秒是网络的最长时间)查看正在发生的事情的最有效方法,我建议使用Wireshark或类似工具捕获流量。@C.Gonzalez非常感谢!我现在监控交通!
[ 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