第2章:测试工具入门:iPerf3 安装与基本用法
好,咱们直接进入正题。上一章聊了带宽测试到底测什么,这一章我们得动手了。工欲善其事,必先利其器——iPerf3 就是那个「器」。
说实话,我入行那会儿还在用老版的 iPerf,那时候连个 JSON 输出都没有,全靠肉眼盯屏幕。后来 iPerf3 出来,我第一时间就换了。为什么?因为它更轻、更快、输出更友好。说白了,它就是为网络性能测试而生的瑞士军刀。
2.1 iPerf3 是什么?
iPerf3 是一个主动测量 TCP、UDP 和 SCTP 带宽性能的工具。它采用客户端-服务器模型工作。你在一端跑服务器模式,另一端跑客户端模式,中间就产生流量了。
嗯,这里有个关键点:iPerf3 不是 iPerf2 的升级版,它们是两个独立项目。我见过不少新手把 iPerf2 的参数往 iPerf3 里套,结果报错一脸懵。记住,iPerf3 的参数设计更简洁,也更严格。
2.2 安装 iPerf3
安装这事儿,不同系统差别挺大。我分别说说。
Linux(以 Ubuntu/CentOS 为例)
# Ubuntu / Debian
sudo apt-get install iperf3
# CentOS / RHEL 7+
sudo yum install iperf3
# CentOS / RHEL 8+ 用 dnf
sudo dnf install iperf3
我个人习惯用源码编译安装,因为能拿到最新版。但说实话,大多数场景下包管理器就够了。有一次我在一个老旧的 CentOS 6 上装 iPerf3,yum 源里没有,只能编译。那叫一个折腾——缺依赖、缺编译器。后来我学乖了,先 yum install epel-release 再装,省心很多。
macOS
brew install iperf3
macOS 用户用 Homebrew 最方便。如果你还没装 Homebrew,先去装一个,这是 macOS 上必备的包管理器。
Windows
Windows 下稍微麻烦点。你需要去 iPerf3 的官方 GitHub 仓库下载预编译的 exe 文件。下载后解压,把 iperf3.exe 放到一个你记得住的目录,比如 C:\tools\。然后把这个目录加到系统 PATH 环境变量里。
2.3 验证安装
装完之后,打开终端,敲下面这行命令:
iperf3 --version
如果看到类似 iperf3 version 3.9 的输出,说明装好了。如果提示「命令未找到」,那就检查一下 PATH 或者重新安装。
我记得有一次帮同事排查,他明明装了却报找不到命令。后来发现他把 exe 文件放桌面了,但没加到 PATH 里。嗯,这种小坑其实挺常见的。
2.4 基本用法:服务器模式
先启动服务器。在你要作为接收端的那台机器上运行:
iperf3 -s
就这么简单。-s 就是 server 模式。默认监听 5201 端口。如果你想改端口,用 -p 参数:
iperf3 -s -p 5001
服务器启动后,它会一直等客户端连上来。你可以在服务器端看到连接日志和最终的测试结果。
2.5 基本用法:客户端模式
在另一台机器上,运行客户端:
iperf3 -c 服务器IP地址
比如服务器 IP 是 192.168.1.100,那就:
iperf3 -c 192.168.1.100
默认情况下,它会进行 10 秒钟的 TCP 测试。结束后,两端都会显示结果。客户端显示的是发送端的统计,服务器显示的是接收端的统计。
你想想看,如果两端数据差异很大,那说明中间链路有问题——要么是丢包,要么是缓冲区不够。
2.6 常用参数速查
下面这张表是我自己整理的,平时干活经常翻。你直接拿去用。
| 参数 | 说明 | 示例 |
|---|---|---|
-s |
服务器模式 | iperf3 -s |
-c |
客户端模式,后接服务器 IP | iperf3 -c 192.168.1.100 |
-p |
指定端口,默认 5201 | iperf3 -s -p 5001 |
-u |
使用 UDP 协议 | iperf3 -c 192.168.1.100 -u |
-b |
UDP 模式下指定带宽(单位 bps) | iperf3 -c 192.168.1.100 -u -b 100M |
-t |
测试时长,单位秒 | iperf3 -c 192.168.1.100 -t 30 |
-P |
并行连接数 | iperf3 -c 192.168.1.100 -P 4 |
-R |
反向模式(服务器发,客户端收) | iperf3 -c 192.168.1.100 -R |
-J |
输出 JSON 格式结果 | iperf3 -c 192.168.1.100 -J |
2.7 实战:跑一次完整的 TCP 带宽测试
咱们来一次完整的。假设服务器 IP 是 10.0.0.1,客户端是 10.0.0.2。
步骤 1:服务器端启动
iperf3 -s
你会看到:
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
步骤 2:客户端发起测试
iperf3 -c 10.0.0.1 -t 20 -P 2
这个命令的意思是:向 10.0.0.1 发起测试,持续 20 秒,用 2 个并行连接。
步骤 3:看结果
客户端输出大概长这样:
Connecting to host 10.0.0.1, port 5201
[ 5] local 10.0.0.2 port 54321 connected to 10.0.0.1 port 5201
[ 7] local 10.0.0.2 port 54322 connected to 10.0.0.1 port 5201
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-20.00 sec 112 MBytes 47.0 Mbits/sec 12
[ 7] 0.00-20.00 sec 108 MBytes 45.3 Mbits/sec 10
[SUM] 0.00-20.00 sec 220 MBytes 92.3 Mbits/sec 22
-----------------------------------------------------------
CPU Utilization: local/sender 12.5% (0.7%u/11.8%s), remote/receiver 8.2%
这里我重点解释几个字段:
- Transfer:传输的总数据量
- Bitrate:平均带宽,单位是 Mbits/sec
- Retr:重传次数。这个很关键!如果重传次数很多,说明网络有丢包或者拥塞
- SUM:所有并行连接的总和
你看上面这个例子,重传有 22 次,说明网络质量一般。如果重传为 0,那才是理想状态。
2.8 知识体系总览
下面这张图,是我自己画的。它把 iPerf3 的核心逻辑串起来了。你一看就明白。
2.9 几个实用小技巧
- 反向测试:用
-R参数,让服务器发数据、客户端收。这样可以测试另一方向的带宽。我经常用这个来验证链路是否对称。 - JSON 输出:加
-J参数,结果以 JSON 格式输出。方便写脚本自动化处理。我在做自动化测试平台时,全靠这个参数来解析结果。 - 双向测试:加
--bidir参数,客户端和服务器同时发数据。这样一次测试就能拿到两个方向的带宽。 - 日志保存:用
--logfile参数把结果保存到文件。比如iperf3 -c 10.0.0.1 --logfile result.txt。
好了,这一章的内容就到这儿。iPerf3 的基本用法其实不复杂,但真正用好它,需要你理解每个参数背后的意义。下一章我们会深入 UDP 测试和更高级的用法,到时候再聊。
想要更多资料,联系可可