局域网/内网测速环境 iperf 搭建
![](https://s2.loli.net/2022/06/10/v7XdfkoYGR1KUCz.jpg?_r_=8050ed89-7b62-dbc0-ab4b-434ca8f66464)
局域网/内网测速环境 iperf 搭建
Zelas2XerathiPerf3 搭建局域网内部测速环境
应用场景
当局域网中网络设备换新时,想要对路由设备测试无线性能情况及内网点对点速率衰减率
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。
各种系统平台全都支持,包括几大主流的 Linux 发行版。
Linux
一般情况下系统默认源里就会带有 iperf3
只需要简单的使用apt 或者yum
然后 iperf3 就装好了,安装之后,可以任意选择要作为服务器端还是客户端,一般作为服务器端的话,则运行:
1 | Debian Ubuntu (apt support system) |
程序会自动监听默认的 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 | docker run --restart=unless-stopped --name=iperf3 -d -p 5201:5201/tcp -p 5201:5201/udp mlabbe/iperf3 |
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 | ./iperf3 -c openwrt.lan |
无线速率测试
无线接入设备的测速
移动端支持 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)
可以看到现在的无线设备已经表现的越来越好了
Technology build Beautiful Lives~
实际能跑到的峰值速度一般是 WiFi 握手速率的 70%. 不同移动设备受其网卡性能影响可能有很大的制约
当测试水平明显过低时,则多数可能是线程压力不足,使用-P参数多添加几个线程即可
附录
官方文档
iPerf - iPerf3 and iPerf2 user documentation
公共iperf服务器
附件
下载文件名:iperf
版本: 3.1.3
大小:3M