网络测速工具 iperf
在我们日常的网络相关实践中,有个常见的需求便是,测试网速。
如果只是为了测试自己所在位置的网速,那么,我们可以直接打开网页,直接开始测试即可,比如著名的 SpeedTest 。
然而,如果你的需求是测试两台机器之间的网速,那么,我们就需要用其它的更专业的工具来测试了。
也就是今天要介绍的 iperf。
简介
目前它的大版本是 3,对应的命令行名称是 iperf3
。
它的自我介绍是『A TCP, UDP, and SCTP network bandwidth measurement tool』,简单直接,其实就是测试网络带宽的。
安装
由于是个比较古老的工具,目前已经可以在大多数操作系统中直接安装了。
1 | brew install iperf3 # MacOS |
或者,也可以使用 Docker:
1 | docker search iperf3 |
然后从中挑选一个即可,我挑了个版本比较新的:
1 | docker pull mlabbe/iperf3 |
需要注意的是,这种情况下,测出的速率可能无法真实反映网速,毕竟经过了 Docker 的虚拟层。
使用
由于这种测速是测两台机器之间的网速,我们需要部署两个点,一台用来当做服务器,另一台用来当做客户端。
对于服务端需要注意,需要确保本地的 5201 端口没有被其它进程占用:
1 | netstat -nltp | grep 5201 |
如果端口被占用,可以另外指定端口。
然后,就可以开始测试了:
- 服务端:
iperf3 -s
(或者iperf3 -p <port> -s
); - 客户端:
iperf3 -c <server-address>
(或者iperf3 -p <port> -c <server-address>
);
然后,你可以同时在两个端的输出中,看到类似于下面的输出:
Connecting to host 192.168.1.102, 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 协议。
相信你也应该看出来了,它也非常适合于虚拟网络的测试,因为这样可以测试虚拟之后带来的网络损耗等问题。
首发于 Github issues: https://github.com/xizhibei/blog/issues/129 ,欢迎 Star 以及 Watch
本文采用 署名-非商业性使用-相同方式共享(BY-NC-SA)进行许可作者:习之北 (@xizhibei)
原链接:https://blog.xizhibei.me/zh-cn/2020/01/13/speed-test-tool-iperf/