网络性能测试工具Iperf3

今天是上海浦西全域静态管理的第 34 天。

周一抗原,周二抗原+核酸,周三抗原。

网传 8 号 恢复地铁运营,不过已经被辟谣了,看来一时半会儿还是出不去。不过这几天感觉物流明显好多了,陆陆续续开始收到之前在京东下的单,小苏同学买了个厨师机,娘俩准备做糕点,老苏在琢磨着是不是应该研究怎么做面条了🙂


什么是 Iperf3 ?

Iperf3 是一个网络带宽测试工具,Iperf3 可以报告带宽、延迟抖动和数据包丢失。利用 Iperf3 这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。

Iperf3 可在 WindowsMac OSLinuxFreeBSD 等各种平台使用,是一个简单又实用的小工具。老苏之前用过 Windows 版本,但说实话仅限于最基本的应用,并没有深入过,今天也只是介绍安装而已。

Iperf3 采用了 C/S (客户端/服务器端)架构模式,在使用 Iperf3 测试时,要同时在 Server端与 Client 端都各执行一个程序,让它们互相传送报文进行测试。

安装

在群晖上以 Docker 方式安装 Server端。

在注册表中搜索 iperf3 ,选择第一个 networkstatic/iperf3,双击直接下载

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
5201 5201

也可以再增加一个 UDP 协议

环境

需要在命令中输入 -s,表示以 server 模式运行

命令行安装

作为工具,一般都是 即开即用,用完即走,所以命令行加上了 --rm 参数,当你退出时容器会自动删除。

1
2
3
4
5
6
7
# 启动容器,退出交互后会删除容器
docker run -it \
--rm \
--name=iperf3-server \
-p 5201:5201 \
networkstatic/iperf3 \
-s

如果你希望容器一直存在,可以取消 --rm 参数

1
2
3
4
5
6
# 启动容器,退出交互后容器会停止
docker run -it \
--name=iperf3-server \
-p 5201:5201 \
networkstatic/iperf3 \
-s

如果你不需要交互,可以将 -it 改为 -d ,这下就跟群晖 docker 安装是一样的了

1
2
3
4
5
6
# 启动容器
docker run -d \
--name=iperf3-server \
-p 5201:5201 \
networkstatic/iperf3 \
-s

运行

和以往的不同,Server端并不能在浏览器中输入 http://群晖IP:5201 看到主界面,只能在日志中看到服务正在侦听 5201 端口,还需要我们运行 Client 端才行

客户端

客户端的下载地址:https://iperf.fr/iperf-download.php

在这里你能找到各个平台的版本,老苏下载了 Windows 64 bits 的最新版本

解压后在 CMD 模式下运行

简单测试

测试台式机和群晖之间的带宽,采用的有线网络,群晖和客户端主机都是千兆网卡,中间的路由是电信的 磊科MG1200AC

1
iperf3 -c 群晖IP

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
-c    表示以客户端启动,并在后面填写服务端的 IP 地址;
-p 指定端口号,需要和服务端指定的端口号一致;
-t 可以指定传输测试的持续时间, Iperf 在指定的时间内,重复的发送指定长度的数据包,默认是 10 秒钟.
-u 指定测试 UDP 协议;

-i 设置每次报告之间的时间间隔,单位为秒,如果设置为非零值,就会按照此时间间隔输出测试报告,默认值为零;
-f 指定带宽单位;

-J 来输出 JSON 格式测试结果;
-R 反向传输,缺省 iperf3 使用上传模式: Client 负责发送数据, Server 负责接收;如果需要测试下载速度,则在 Client 侧使用 -R 参数即可;

--logfile 参数可以将输出的测试结果储存至文件中;

参考文档

esnet/iperf: iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool
地址:https://github.com/esnet/iperf

iPerf - Download iPerf3 and original iPerf pre-compiled binaries
地址:https://iperf.fr/iperf-download.php