3、测试工具链(上):iPerf3 详解——安装、基础命令、TCP/UDP测试模式
聊到网络性能测试,iPerf3 绝对是个绕不开的家伙。我入行那会儿,前辈丢给我一句「测带宽?用 iPerf」,然后我就开始了跟这个工具长达十年的打交道。说白了,它就是一把瑞士军刀——简单、锋利,但用不好也容易割到手。
这一节,咱们就把 iPerf3 从头到尾捋一遍。从安装到实战,从 TCP 到 UDP,我会把我在项目中踩过的坑、总结的经验,一股脑倒给你。
3.1 为什么是 iPerf3?
你可能会问:测网络带宽的工具那么多,为什么偏偏选它?
原因有三:
- 轻量:一个二进制文件,不依赖任何第三方库。我在嵌入式设备上都能跑。
- 跨平台:Linux、Windows、macOS、甚至路由器上的 OpenWrt,都有对应的版本。
- 精准:它绕过了操作系统的大部分协议栈优化,直接测量原始的网络吞吐能力。
我记得有一次,客户抱怨说他们的「万兆网络」只能跑到 2Gbps。我上去一看,用的是系统自带的 scp 传文件。嗯,那玩意儿加密开销大,根本测不出真实带宽。换上 iPerf3 一测,9.8Gbps,问题瞬间定位到应用层。
3.2 安装:三分钟搞定
安装这事儿,其实没啥好说的。但我还是想提一句:尽量用包管理器安装,别自己去源码编译。除非你有特殊需求。
Linux(Debian/Ubuntu)
sudo apt-get update
sudo apt-get install iperf3
Linux(CentOS/RHEL)
sudo yum install epel-release
sudo yum install iperf3
macOS
brew install iperf3
Windows
去官网下载预编译的 exe 文件,或者用 choco install iperf3。我个人习惯把 iperf3.exe 丢到 C:\Windows\System32 目录下,这样命令行里直接就能调用了。
iperf3 -v,如果能看到版本号,说明安装成功。我见过有人装了半天,结果发现 PATH 没配好。
3.3 基础命令:服务端与客户端
iPerf3 的工作模式是典型的 C/S 架构。你得先在一台机器上启动服务端,然后在另一台机器上启动客户端去连它。
启动服务端
iperf3 -s
默认监听 5201 端口。如果你想改端口,加个 -p 参数:
iperf3 -s -p 5001
启动客户端
iperf3 -c 192.168.1.100
这里的 192.168.1.100 是服务端的 IP 地址。默认也是 5201 端口,如果服务端改了端口,客户端也要对应改:
iperf3 -c 192.168.1.100 -p 5001
-s -D(后台运行)或者 -s --one-off false。
我曾经在给一个数据中心做测试时,忘了加 -D,结果每次测完都要重新 SSH 上去启动服务端,烦得要死。后来写了个 systemd 服务,开机自启,省心多了。
3.4 TCP 测试模式
TCP 测试是 iPerf3 最常用的模式。默认情况下,你执行 iperf3 -c 就是 TCP 测试。
基本 TCP 测试
iperf3 -c 192.168.1.100
输出结果会告诉你带宽、重传次数、CPU 占用等信息。我一般重点关注两个指标:
- 带宽(Bandwidth):单位是 Mbits/sec 或 Gbits/sec。这就是网络管道的「口径」。
- 重传(Retr):重传次数。如果这个数字很大,说明网络有丢包或者拥塞。
常用参数
| 参数 | 作用 | 示例 |
|---|---|---|
-t |
测试时长(秒) | -t 30(测30秒) |
-P |
并行流数 | -P 4(开4个流) |
-w |
TCP 窗口大小 | -w 256K(窗口设为256KB) |
-R |
反向测试(服务端发,客户端收) | -R |
-i |
报告间隔(秒) | -i 1(每秒输出一次) |
-P 参数不要盲目开大,我见过有人开 32 个流,结果 CPU 先成了瓶颈。
避坑指南:TCP 窗口大小
我曾经在一条高延迟的链路上(跨洋专线,RTT 约 200ms)测带宽,默认窗口下只能跑 200Mbps。后来我把窗口调大到 1MB,带宽直接飙到 800Mbps。为什么会这样?
因为 TCP 的吞吐量上限 ≈ 窗口大小 / RTT。窗口太小,带宽再大也跑不满。
3.5 UDP 测试模式
UDP 测试跟 TCP 不太一样。它不关心可靠性,只关心「能发多快」和「丢了多少」。
启动 UDP 测试
iperf3 -c 192.168.1.100 -u
加个 -u 参数,就切换到 UDP 模式了。
关键参数:带宽限制
UDP 测试必须指定目标带宽,否则 iPerf3 会以尽可能快的速度发包,瞬间打爆你的网络。
iperf3 -c 192.168.1.100 -u -b 100M
这里的 -b 100M 表示以 100Mbps 的速率发包。
UDP 测试的输出解读
UDP 的结果里,我最关心三个值:
- Jitter(抖动):单位是 ms。抖动越小,网络越稳定。VoIP 和视频会议对抖动很敏感。
- Lost/Total Datagrams:丢包数 / 总包数。丢包率 = 丢包数 / 总包数 × 100%。
- Bandwidth:实际接收到的带宽。
-b 0,让 iPerf3 以最大速率发包。但千万注意,这可能会影响生产业务。我一般只在维护窗口期这么干。
避坑指南:UDP 的「假象」
我曾经帮一个客户排查视频卡顿问题。他们用 iPerf3 测 UDP,丢包率只有 0.1%,觉得网络没问题。但我一看 Jitter,高达 50ms。嗯,问题就在这儿——视频流对抖动比丢包更敏感。后来优化了 QoS 队列,Jitter 降到 5ms,卡顿消失了。
3.6 知识体系:iPerf3 核心逻辑
下面这张图,是我自己总结的 iPerf3 测试的核心逻辑。你一看就明白:
3.7 实战建议:测试前的 Checklist
在动手之前,我建议你过一遍这个清单:
- 防火墙放行:服务端的 5201 端口要开放。我见过有人折腾半天,结果是防火墙把流量拦了。
- 关闭网卡 offload:有些网卡会做 TSO/GRO 等硬件卸载,这会影响测试结果。可以用
ethtool -K eth0 tx off rx off临时关闭。 - 确认链路带宽:先搞清楚你测的链路标称是多少。1G 还是 10G?不然你测出 500Mbps,可能已经是极限了。
- 双向测试:网络往往是非对称的。上行和下行分开测,别偷懒。
好了,iPerf3 的基础部分就聊到这儿。TCP 和 UDP 的测试模式,说白了就是两个不同的维度——一个看可靠性,一个看实时性。你在实际项目中,要根据业务场景选对模式。下一节咱们会深入讲 iPerf3 的高级用法,包括双向测试、带宽调优、以及如何用 JSON 输出做自动化。