局域网/内网测速环境 iperf 搭建

iPerf3 搭建局域网内部测速环境


应用场景


当局域网中网络设备换新时,想要对路由设备测试无线性能情况及内网点对点速率衰减率

PS:外网测速这一块,用的最多的是Ookla的Speedtest了,其已经推出了多端覆盖,包括Android、Windows、Mac及CLI版本,完整满足了几乎你能接触的任何生态。

但局域网这一块尚未完善出一些强大易用的工具。本文测速工具之一的iperf3的配置。

传统方式


实际对于有线连接,Windows 系统自带的 SMB 共享就是最简单的测速工具,也是最可靠的,能直接反应实际应用中的传输速度。找两台 pc,一台开共享,另一台直接拷贝个文件过去就能测出来有线传输的速度。带宽几乎能达到上限,这类双端有线测试的多数情况下意义不大(排错时会用到)。

PS:安卓和 iOS 系统,不要和 windows 之间用 SMB 传文件来当做测速!

通常情况下Android平台软件对于SMB的支持很浅,仍在使用古老的SMB1.0版本。兼容性极差,很容易出现莫名其妙的问题,以及速率不稳定、低下。

而Samba在Windows的最新版本15 December 2021 Samba 4.14.11 Available for Download

Samba - opening windows to a wider world

SMB 在非 Windows 平台上有很大的效率问题,不同的 app 里能跑出来的速度都不一样,毫无参考性。这样的测试数据只能说是毫无意义吧。

iperf 是一个有很多年历史的网络测试工具了,目前最新版本是 iperf3。

iPerf 官网

各种系统平台全都支持,包括几大主流的 Linux 发行版。

Linux

一般情况下系统默认源里就会带有 iperf3

只需要简单的使用apt 或者yum

然后 iperf3 就装好了,安装之后,可以任意选择要作为服务器端还是客户端,一般作为服务器端的话,则运行:

1
2
3
4
5
6
Debian Ubuntu (apt support system)
$ apt install iperf3
Centos (yum support system)
$ yum install iperf3
Use iperf3 as a Server
$ iperf3 -s

程序会自动监听默认的 5201 端口,防火墙注意也要放行此端口,这样服务器端就准备好了。

-s 表示运行在服务器模式下,还可以用-p 指定监听其他端口,-D 参数则可以后台运行。

比如想自定义监听 8888 端口,并且后台运行,则命令如下:

1
$ iperf3 -s -p 8888 -D

参数

iperf3 拥有很多参数,如下的表格

iperf -[s] -c host [options]
简写 全写 释义
Server or Client 用于服务端或客户端
-p –port 服务器监听/连接的端口
-f -format [kmgKMG] 输出结果格式化输出Kbits, Mbits, KBytes, MBytes
-i –interval 指定输出结果(带宽报告)间隔秒数
-F –file name 指定xmit/recv文件
-B –bind 绑定到指定接口
-V –verbose 详细输出(bb模式)
-J –json 以json格式输出
–logfile f 将输出发送到日志文件
-d –debug 调试输出
-v –version 显示版本信息并退出
-h –help 显示此消息并退出
Server specific 用于服务端
-s –server 在服务器模式下运行
-D –deamon 将作为守护进程运行
-I –pidfile file 写入PID文件
-1 –one-off 一次性处理一个客户端连接然后退出
Client specific 用于客户端
-c –client 以客户端模式运行并连接到主机(服务器)
-u –udp 使用udp而不是TCP
-b --bandwidth #[KMG][/#] 目标带宽,单位为比特/秒(0表示无限)
(UDP默认1mbit /sec, TCP无限制)
(可选的斜杠和数据包计数的突发模式)
-t –time 发送时间(默认为10秒)
-n –bytes #[KMG] 要传输的字节数
-k –blockcount #[KMG] 要传输的块(包)的数量
-l –len #[KMG] 读取或写入缓冲区的长度
(TCP默认128kb, UDP默认8kb)
–cport 绑定到一个特定的客户端端口(TCP和UDP,默认:临时端口)
-P –parallel 要运行的并行客户端流的数量
-R –reverse 以反向模式运行(服务器发送,客户端接收)
-w –windows #[KMG] 设置通道大小/ 套接字缓冲区大小
-M –set-mss 设置TCP/SCTP的最大段大小(MTU - 40字节)
-N –no-delay 设置TCP/SCTP无延迟,禁用Nagle算法
-4 –version4 只使用IPv4
-6 –version6 只使用IPv6
-S –tos N 设置IP类型
-Z –zerocopy 使用’零拷贝’方法发送数据 (全0)
-O –omit N 省略前N秒
-T –title str 为每个输出行添加此字符串前缀
–get-server-output 从服务器获取结果
–UDP -counters-64bit UDP测试报文中使用64位的计数器
[KMG] 表示支持K/M/G后缀,表示kilo-、mega-或giga-

开源仓库信息

https://github.com/esnet/iperf

Docker

Docker 的,还能用 Docker 运行,只需要一句命令,即可自动拉取镜像并运行,傻瓜式完成服务器端搭建:

1
docker run --restart=unless-stopped --name=iperf3 -d -p 5201:5201/tcp -p 5201:5201/udp mlabbe/iperf3

5201为默认的程序运行端口,如果有冲突可以修改为其他端口,同时修改docker的端口映射并且在iperf3中修改默认容器命令指定端口

重新运行容器

1
2
3
$ docker run --restart=unless-stopped --name=iperf3 -d -p 5201:5201/tcp -p 5201:5201/udp mlabbe/iperf3
default :'-s'
changed : '-s -p 8888'

PS:iperf3服务端镜像的选择,这里的 mlabbe/iperf3库 仅支持linux/amd64(64位架构的Linux系统)

你可以在Dockerhub上选择适宜的镜像,也可以参考以下整理的表格

支持的架构 下载量/更新日期
mlabbe/iperf3 linux/amd64 10M/last year
xridge/iperf3 linux/amd64 10M/last year
networkstatic/iperf3 linux/amd64 50M/last year
taoyou/iperf3-alpine linux/386
linux/amd64
linux/arm64
linux/armv7
linux/ppc64le
linux/s390x
500k/2 year ago
sk278/iperf3 linux/amd64
linux/armv7
linux/arm
linux/amd64
10k/6 month ago

客户端

多端下载直接至官网

iPerf - Download iPerf3 and original iPerf pre-compiled binaries

Windows

下载完成后解压文件包

进入根目录,在文件夹空白处按住Shift + 右键 运行powershell

直接使用命令进行测速

  • 默认是客户端发送,服务器端接收。也可以反过来,让服务器端发送,客户端接收,那就是后面跟随-R 参数
  • 默认单线程压力可能会不够,可以加-P 参数指定多线程,注意是大写的 P,一般可以设定 5-10 线程
  • 客户端默认只会显示发送的成绩,接收的成绩在服务器端那边显示,显然看起来不方便,于是还可以跟随--get-server-output参数,让客户端显示服务器端的信息
1
2
3
4
./iperf3 -c openwrt.lan
./iperf3 -c 192.168.1.1
./iperf3 -c openwrt.lan -R
./iperf3 -c 192.168.1.1 --get-server-output

无线速率测试

无线接入设备的测速

移动端支持 iperf 的 app 有很多,这里使用he.net - Network Tools 这一款软件,安卓和 IOS 平台都支持,官网为 http://networktools.he.net/

实际这是一个测试网络的综合型工具,里头各种功能都有,iperf 只不过是其中一项。软件的用法也很简单,菜单列表里直接选择 iperf3。

秒表图表是设定数据汇报时间,也就是每隔 N 秒显示一次速率数据。

第二个芯片图标是设定测试数据包大小,单位可以是 K 或者 M,10G 数据包就可以直接填 10240M。

最后输入服务器端的 主机名、域名、IP 即可进行测试:

​ 服务端WIFI6路由器5G频段 AX3600

​ Android客户端握手速率1200M 测试峰值速率800M- (2021年下旬推出的中端智能手机)

​ Windows无线客户端握手速率1729M 测试峰值900M+ (网卡为AX210)

​ Windows无线客户端握手速率2162M 测试峰值900M- (网卡为AX200)

sc cs

可以看到现在的无线设备已经表现的越来越好了

Technology build Beautiful Lives~

实际能跑到的峰值速度一般是 WiFi 握手速率的 70%. 不同移动设备受其网卡性能影响可能有很大的制约

当测试水平明显过低时,则多数可能是线程压力不足,使用-P参数多添加几个线程即可

附录


官方文档

iPerf - iPerf3 and iPerf2 user documentation

公共iperf服务器

iPerf - Public iPerf3 servers

附件


文件名:iperf
版本: 3.1.3
大小:3M

下载