我正在尝试使用 Mininet Python API 收集一些网络统计信息,但是,我注意到即使我设置了链接带宽并发送了比配置带宽更多的流量,也没有数据包丢失。我认为我的代码中可能有一些错误,所以我继续使用 Mininets 内置拓扑来查看我是否仍然得到相同的行为。我从线性拓扑开始,如下所示:
sudo mn --topo linear,3
然后我在 h1 和 h3 上运行 iperf 以获取带宽并发送比带宽更多的流量。
h1 iperf -s -u -p 2000 -i 1 > server.txt &
h3 iperf -u -c 10.0.0.1 -p 2000 -b 20M -i 1 -t 120 > client.txt &
我厌倦了 -b 的几个值,但仍然没有丢包。 然后我配置了链路带宽和拓扑,如下:
sudo mn --topo linear,3 --link tc, bw=10
然后发送了 20M 流量,但没有再次丢失。经过一些阅读和反复试验,我也配置了延迟。
sudo mn --topo linear,3 --link tc, bw=10, delay=10ms
然后再次产生了 20M 的流量,这一次,令人惊讶的是,但正如预期的那样,有大约 50% 的数据包丢失。
我的假设是交换机有一个足够大的缓冲区来缓冲数据包,直到所有数据都被发送并且没有丢失。但是,当传输受到延迟限制时,数据包会因为无法及时到达而被丢弃。
我已经收集了绘图所需的统计数据,但是我想知道为什么没有延迟参数就没有数据包丢失?