Networking TCP流如何';发生拥塞时的速率变化
谢谢你点击我的问题 我正在做一个小实验来了解TCP流在拥塞时的行为 在这个实验中,我发现当拥塞发生时,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
我使用
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