简介
目前它的大版本是 3,对应的命令行名称是 iperf3。它的自我介绍是『A TCP, UDP, and SCTP network bandwidth measurement tool』,简单直接,其实就是测试网络带宽的。
安装
由于是个比较古老的工具,目前已经可以在大多数操作系统中直接安装了。
brew install iperf3 # MacOS
sudo apt install iperf3 # Ubuntu
sudo yum install iperf3 # CentOS
或者,也可以使用 Docker:
docker search iperf3
然后从中挑选一个即可,我挑了个版本比较新的:
docker pull mlabbe/iperf3
需要注意的是,这种情况下,测出的速率可能无法真实反映网速,毕竟经过了 Docker 的虚拟层。
使用
由于这种测速是测两台机器之间的网速,我们需要部署两个点,一台用来当做服务器,另一台用来当做客户端。
对于服务端需要注意,需要确保本地的 5201 端口没有被其它进程占用:
netstat -nltp | grep 5201
如果端口被占用,可以另外指定端口。
然后,就可以开始测试了:
服务端: iperf3 -s
(或者 iperf3 -p <port> -s
);
客户端(服务器到本地的 上行 速度): iperf3 -c <server-address>
(或者 iperf3 -p <port> -c <server-address>
);
客户端(服务器到本地的 下行 速度): iperf3 -c <server-address> -R
(或者 iperf3 -p <port> -c <server-address> -R
);
然后,你可以同时在两个端的输出中,看到类似于下面的输出:
Connecting to host 192.168.1.108, port 5201
[ 7] local 192.168.1.101 port 51365 connected to 192.168.1.102 port 5201
[ ID] Interval Transfer Bitrate
[ 7] 0.00-1.00 sec 49.7 MBytes 416 Mbits/sec
[ 7] 1.00-2.00 sec 49.7 MBytes 417 Mbits/sec
[ 7] 2.00-3.00 sec 49.1 MBytes 412 Mbits/sec
[ 7] 3.00-4.00 sec 49.7 MBytes 417 Mbits/sec
[ 7] 4.00-5.00 sec 43.3 MBytes 363 Mbits/sec
[ 7] 5.00-6.00 sec 45.7 MBytes 383 Mbits/sec
[ 7] 6.00-7.00 sec 43.8 MBytes 368 Mbits/sec
[ 7] 7.00-8.00 sec 40.8 MBytes 341 Mbits/sec
[ 7] 8.00-9.00 sec 41.8 MBytes 351 Mbits/sec
[ 7] 9.00-10.00 sec 42.4 MBytes 356 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 7] 0.00-10.00 sec 456 MBytes 382 Mbits/sec sender
[ 7] 0.00-10.01 sec 456 MBytes 382 Mbits/sec receiver
iperf Done.
从输出来看,我们可以看到,iperf3 以最高速度(默认 TCP 连接)测试了我本地两个点之间的带宽,测试了 10 秒,平均速度为 382 Mbits/sec,也就是 47.75 Mbytes/sec,我测试的时候是 WiFi 网络,这个速值基本反映了我本地网络的带宽。
更多的应用场景
测试本地公网速率
你可以用别人提供的 iperf3 服务器来测试,比如 Public iPerf3 servers,其实这就相当于开头提到的 SpeedTest 了。
** 测试 Kubernetes 各个节点之间的网速
这个需求挺常见的,尤其是有可能遇到 Kubernetes 内网络问题的时候,毕竟你部署的地方,不知道会不会有节点之间网速问题。所以你可以直接看这个项目 Pharb/kubernetes-iperf3。
它的原理,可以简单描述下:
将 iperf3 server 部署在 master 节点上;
将 iperf3 client 部署在所有节点上,包括 master,并保持空转(即睡眠状态);
最后用 kubectl 获取所有的 client,依次执行测试命令;
其它
测试 VPN、P2P 网络等,另外,它还可以测试 UDP、SCTP 协议。
相信你也应该看出来了,它也非常适合于虚拟网络的测试,因为这样可以测试虚拟之后带来的网络损耗等问题。
评论 (0)