3. iPerf3 基础实战:安装与配置、TCP/UDP 测试命令、单线程与多线程测试、结果解读
好,咱们正式开始动手。这一章我带你从零搭建 iPerf3 环境,把最常用的测试命令跑一遍。你想想看,如果连工具都不会用,后面谈优化就是空中楼阁。
我个人习惯把 iPerf3 当作网络界的「瑞士军刀」。它轻量、跨平台、结果直观。不管你是测家庭宽带,还是调数据中心链路,这套命令都通用。
3.1 安装与配置
安装没什么难度,但不同系统有细微差别。我列个表,你对着操作就行。
| 操作系统 | 安装方式 | 命令 |
|---|---|---|
| Ubuntu/Debian | apt | sudo apt install iperf3 |
| CentOS/RHEL 7 | yum | sudo yum install iperf3 |
| CentOS/RHEL 8+ | dnf | sudo dnf install iperf3 |
| macOS | Homebrew | brew install iperf3 |
| Windows | 预编译包 | 下载 exe 后加入 PATH |
装完后验证一下:
iperf3 --version
看到版本号就说明成了。嗯,这里要注意:Windows 用户记得用 PowerShell 或 CMD 以管理员身份运行,否则可能被防火墙拦截。
3.2 TCP 测试命令
TCP 测试是最常用的场景。它模拟真实应用的数据传输,能反映吞吐量、重传率和延迟。
先启动服务端:
iperf3 -s
默认监听 5201 端口。你可以用 -p 指定其他端口,比如 -p 5202。
客户端发起测试:
iperf3 -c 192.168.1.100
这里 -c 后面跟服务端 IP。默认测试 10 秒,每秒输出一次结果。
我常用的几个参数:
-t:测试时长,比如-t 30测 30 秒-P:并行流数,后面细讲-i:输出间隔,默认 1 秒-w:TCP 窗口大小,调优时用
举个例子,测 60 秒,每 2 秒输出一次:
iperf3 -c 192.168.1.100 -t 60 -i 2
3.3 UDP 测试命令
UDP 测试和 TCP 思路不同。TCP 关注吞吐量,UDP 关注丢包率和抖动。说白了,UDP 测试就是往链路里「灌数据」,看它接不接得住。
服务端启动方式一样:
iperf3 -s
客户端加 -u 参数:
iperf3 -c 192.168.1.100 -u -b 100M
-b 指定目标带宽,这里设 100 Mbps。如果不设,默认只有 1 Mbps,测不出真实能力。
UDP 测试结果里,我最关注三个指标:
- Jitter(抖动):延迟变化,单位 ms。越低越好
- Lost/Total Datagrams:丢包数/总包数
- Packet Loss Rate:丢包率,超过 1% 就要警惕
我曾经帮一个视频会议团队排查卡顿问题。他们用 TCP 测一切正常,但实际会议就是卡。换成 UDP 测试后,发现丢包率高达 5%。后来发现是交换机缓存太小,扛不住突发流量。
3.4 单线程与多线程测试
单线程测试是默认行为。它模拟一个应用进程的传输能力。很多场景下,单线程就能暴露问题。
但现实中的服务器通常有多个 CPU 核心,单线程无法压满链路。这时候就需要多线程。
多线程用 -P 参数:
iperf3 -c 192.168.1.100 -P 4
这条命令启动 4 个并行流。注意,它不是多线程,而是多进程。每个流独立占用一个 CPU 核心。
我整理了一个对比表:
| 特性 | 单线程 | 多线程 |
|---|---|---|
| CPU 占用 | 低 | 高 |
| 吞吐量上限 | 受单核性能限制 | 可压满多核 |
| 适用场景 | 模拟单应用 | 模拟高并发 |
| 结果解读 | 直接看 SUM 行 | 看每个流 + 汇总 |
实际项目中,我一般先跑单线程,看基线。如果单线程跑不满,再用多线程压测。举个例子,一条 10G 链路,单线程可能只能跑 2-3 Gbps,但 4 个线程就能跑到 8-9 Gbps。这说明瓶颈在 CPU 单核性能,而不是网络。
3.5 结果解读
跑完测试,你会看到一堆输出。别慌,我带你逐行拆解。
先看一个 TCP 测试结果示例:
Connecting to host 192.168.1.100, port 5201
[ 4] local 192.168.1.101 port 54321 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 4] 0.00-1.00 sec 11.3 MBytes 94.8 Mbits/sec 0 164 KBytes
[ 4] 1.00-2.00 sec 11.2 MBytes 94.0 Mbits/sec 0 164 KBytes
[ 4] 2.00-3.00 sec 11.4 MBytes 95.6 Mbits/sec 0 164 KBytes
[ 4] 3.00-4.00 sec 11.3 MBytes 94.8 Mbits/sec 0 164 KBytes
[ 4] 4.00-5.00 sec 11.3 MBytes 94.8 Mbits/sec 0 164 KBytes
[ 4] 5.00-6.00 sec 11.2 MBytes 94.0 Mbits/sec 0 164 KBytes
[ 4] 6.00-7.00 sec 11.3 MBytes 94.8 Mbits/sec 0 164 KBytes
[ 4] 7.00-8.00 sec 11.3 MBytes 94.8 Mbits/sec 0 164 KBytes
[ 4] 8.00-9.00 sec 11.3 MBytes 94.8 Mbits/sec 0 164 KBytes
[ 4] 9.00-10.00 sec 11.3 MBytes 94.8 Mbits/sec 0 164 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 4] 0.00-10.00 sec 113 MBytes 94.7 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 113 MBytes 94.7 Mbits/sec receiver
关键字段解读:
- Interval:时间区间,单位秒
- Transfer:传输的数据量
- Bitrate:瞬时带宽,单位 Mbits/sec 或 Gbits/sec
- Retr:重传次数。0 表示无重传,完美
- Cwnd:TCP 拥塞窗口大小,反映链路状态
再看 UDP 结果:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 4] 0.00-10.00 sec 119 MBytes 100 Mbits/sec 0.123 ms 0/85714 (0%)
这里 Jitter 0.123 ms,非常低。Lost/Total 0/85714,丢包率 0%,完美。
如果看到丢包率超过 1%,或者重传数持续增长,说明链路有问题。我一般会检查:
- 网卡是否开启流控
- 交换机端口是否有错包
- 链路是否被其他流量挤占
3.6 知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作操作地图。
这张图把安装、TCP、UDP、单多线程、结果解读串成一条线。你照着这个流程走,基本不会漏掉关键步骤。
3.7 避坑指南
最后分享几个我踩过的坑:
- 防火墙拦截:服务端启动后,客户端连不上。先
telnet IP 5201测试端口通不通 - 版本不匹配:两端 iPerf3 版本必须一致。我建议都用最新稳定版
- CPU 瓶颈:如果单线程跑不满带宽,先看 CPU 是否打满。用
top或htop确认 - 网卡 offload:某些网卡开启 TSO/GRO 后,测试结果会虚高。建议关闭后再测一次对比