3. iPerf3 基础实战:安装与配置、TCP/UDP 测试命令、单线程与多线程测试、结果解读

好,咱们正式开始动手。这一章我带你从零搭建 iPerf3 环境,把最常用的测试命令跑一遍。你想想看,如果连工具都不会用,后面谈优化就是空中楼阁。

我个人习惯把 iPerf3 当作网络界的「瑞士军刀」。它轻量、跨平台、结果直观。不管你是测家庭宽带,还是调数据中心链路,这套命令都通用。

核心原则:测试前先确认两端版本一致。iPerf3 不向前兼容,2.x 和 3.x 无法互通。我踩过这个坑,当时排查了半小时才发现是版本问题。

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
小技巧:如果服务端有防火墙,记得放行 5201 端口。我在客户现场遇到过好几次,命令敲下去一直卡住,最后发现是防火墙没开。

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%。后来发现是交换机缓存太小,扛不住突发流量。

注意:UDP 测试不要在生产链路直接灌满带宽。我曾经见过有人把 -b 设成 1000M,结果把专线打爆了,业务中断 10 分钟。建议从 50% 带宽开始,逐步加压。

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%,或者重传数持续增长,说明链路有问题。我一般会检查:

  1. 网卡是否开启流控
  2. 交换机端口是否有错包
  3. 链路是否被其他流量挤占
判断标准:TCP 重传率 < 0.1% 为优秀,0.1%-1% 为可接受,超过 1% 需要排查。UDP 丢包率 < 0.1% 为优秀,0.1%-1% 为一般,超过 1% 会影响实时应用。

3.6 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作操作地图。

iPerf3 基础实战知识体系 iPerf3 基础实战知识体系 iPerf3 核心流程 安装与配置 TCP 测试 UDP 测试 多平台安装命令 版本一致性检查 单线程 vs 多线程 重传率与窗口分析 目标带宽设置 抖动与丢包率 结果解读与问题定位 核心指标:吞吐量、重传率、抖动、丢包率 先单线程基线 → 再多线程压测 → 最后定位瓶颈

这张图把安装、TCP、UDP、单多线程、结果解读串成一条线。你照着这个流程走,基本不会漏掉关键步骤。

3.7 避坑指南

最后分享几个我踩过的坑:

  • 防火墙拦截:服务端启动后,客户端连不上。先 telnet IP 5201 测试端口通不通
  • 版本不匹配:两端 iPerf3 版本必须一致。我建议都用最新稳定版
  • CPU 瓶颈:如果单线程跑不满带宽,先看 CPU 是否打满。用 top 或 htop 确认
  • 网卡 offload:某些网卡开启 TSO/GRO 后,测试结果会虚高。建议关闭后再测一次对比