4、Iperf3实战:TCP吞吐量测试、UDP带宽与抖动测试、双向测试、多线程测试、反向模式测试

好,咱们直接进入正题。Iperf3 这工具,说白了就是网络性能的“照妖镜”。你WiFi调得再好,空口策略再花哨,一跑 Iperf3,真实水平全暴露。我这些年排查无线瓶颈,十次里有八次第一件事就是掏出 Iperf3。

这一章,咱们把 Iperf3 最常用的几个测试场景过一遍。TCP 吞吐量、UDP 带宽与抖动、双向测试、多线程、反向模式——每个我都会结合实战经验讲透。

核心原则: 测试前务必确认两端 Iperf3 版本一致,否则可能出现兼容性问题。我吃过这个亏,3.1 和 3.7 对连,结果死活跑不出数据。

4.1 TCP吞吐量测试

TCP 吞吐量测试是最基础的。它模拟的是你日常上网、看视频、传文件时的真实表现。WiFi 环境下,TCP 的拥塞控制算法对结果影响很大。

服务端启动:

iperf3 -s -p 5201

客户端启动:

iperf3 -c 192.168.1.100 -p 5201 -t 30

这里 -t 30 表示跑 30 秒。我个人习惯至少跑 60 秒,WiFi 信道波动大,短时间测试容易“撞大运”。

输出解读:

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec   112 MBytes   31.3 Mbits/sec                  sender
[  5]   0.00-30.00  sec   112 MBytes   31.3 Mbits/sec                  receiver

看 receiver 行的 Bitrate,这就是实际吞吐量。如果 sender 和 receiver 差距很大,说明丢包重传严重——WiFi 环境常见。

我的经验: 测 WiFi 时,客户端最好用有线连 AP,或者用另一台设备做服务端。别在同一个设备上又跑服务端又跑客户端,那测的是环回口,不是空口。

4.2 UDP带宽与抖动测试

UDP 测试关注的是带宽上限和抖动。这对语音、视频会议这类实时业务特别重要。你想想看,Zoom 卡顿的时候,多半是 UDP 抖动超标了。

服务端:

iperf3 -s -p 5202

客户端:

iperf3 -c 192.168.1.100 -p 5202 -u -b 50M -t 30

-u 启用 UDP 模式,-b 50M 指定目标带宽 50 Mbps。

输出解读:

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   179 MBytes   50.0 Mbits/sec  0.000 ms  0/128000 (0%)  sender
[  5]   0.00-30.00  sec   179 MBytes   50.0 Mbits/sec  2.345 ms  0/128000 (0%)  receiver

重点关注三个指标:

  • Jitter(抖动): 一般要求 < 30ms。超过 50ms 语音就会明显断续。
  • Lost(丢包率): 0% 最好,超过 1% 视频就会卡。
  • 实际带宽: 看 receiver 行的 Bitrate,如果远低于 -b 设定值,说明网络瓶颈了。
注意: UDP 测试时,-b 不要设得比链路带宽还高。我曾经在 100M 链路上设 -b 200M,结果丢包 80%,AP 直接挂死。嗯,那场面挺尴尬的。

4.3 双向测试

WiFi 是半双工的,上下行互相影响。单向测试只能看一半真相。双向测试才能暴露真实问题。

客户端命令:

iperf3 -c 192.168.1.100 -p 5203 -d -t 30

-d 就是双向模式。服务端不用额外参数,正常启动就行。

输出解读:

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec   112 MBytes   31.3 Mbits/sec                  sender
[  5]   0.00-30.00  sec   112 MBytes   31.3 Mbits/sec                  receiver
[  7]   0.00-30.00  sec   89.3 MBytes   25.0 Mbits/sec                  sender
[  7]   0.00-30.00  sec   89.3 MBytes   25.0 Mbits/sec                  receiver

你会看到两组数据。第一组是客户端→服务端,第二组是服务端→客户端。WiFi 环境下,上下行往往不对称。我见过下行 300M、上行只有 50M 的奇葩情况——后来发现是客户端天线有问题。

避坑指南: 双向测试时,两个方向的流量会竞争空口资源。如果总吞吐量远低于单向测试之和,说明 AP 的 QoS 或调度有问题。我曾经用这个办法抓出过一个厂商的固件 bug。

4.4 多线程测试

单线程测试只能压一个 CPU 核心。现代设备都是多核的,多线程才能榨干性能。特别是 WiFi 6 的 OFDMA,多线程更能模拟真实场景。

客户端命令:

iperf3 -c 192.168.1.100 -p 5204 -P 4 -t 30

-P 4 表示 4 个并行线程。

输出解读:

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec   28.0 MBytes   7.83 Mbits/sec                  sender
[  7]   0.00-30.00  sec   28.0 MBytes   7.83 Mbits/sec                  sender
[  9]   0.00-30.00  sec   28.0 MBytes   7.83 Mbits/sec                  sender
[ 11]   0.00-30.00  sec   28.0 MBytes   7.83 Mbits/sec                  sender
[SUM]   0.00-30.00  sec   112 MBytes   31.3 Mbits/sec                  sender

看 [SUM] 行的总吞吐量。如果单线程 30M,4 线程还是 30M,说明瓶颈在空口或 CPU 单核性能。如果 4 线程能跑到 100M+,说明设备多核能力不错。

实战建议: 我一般先跑单线程,再跑 4 线程,最后跑 8 线程。对比这三组数据,就能判断瓶颈在 CPU 还是网络。WiFi 环境下,通常 4 线程就够用了,太多线程反而会因为上下文切换导致性能下降。

4.5 反向模式测试

反向模式,说白了就是让服务端发数据,客户端收。默认是客户端发、服务端收。反向模式能测试服务端的上行能力。

客户端命令:

iperf3 -c 192.168.1.100 -p 5205 -R -t 30

-R 就是反向模式。

输出解读:

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec   112 MBytes   31.3 Mbits/sec                  sender
[  5]   0.00-30.00  sec   112 MBytes   31.3 Mbits/sec                  receiver

注意看,这里的 sender 是服务端,receiver 是客户端。反向模式常用于测试 AP 到终端的下行性能。我遇到过 AP 下行 500M、上行只有 200M 的情况——后来发现是 AP 的 TX 队列配置有问题。

注意: 反向模式在 WiFi 环境下特别有用。因为大多数终端(手机、平板)的发射功率比 AP 小得多,反向模式能更真实地反映“AP 发→终端收”的性能。我测手机 WiFi 时,必用反向模式。

4.6 知识体系总览

下面这张图,把 Iperf3 的测试类型、关键参数和适用场景串起来了。你对照着看,思路会更清晰。

Iperf3 测试类型与参数体系 Iperf3 测试引擎 TCP 吞吐量 UDP 带宽/抖动 双向测试 多线程测试 反向模式 关键参数 -t 时长 -p 端口 关键参数 -u -b 带宽 Jitter/丢包 关键参数 -d 双向 上下行对比 关键参数 -P 线程数 SUM 总吞吐 关键参数 -R 反向 服务端→客户端 适用场景对照 文件传输 网页浏览 视频下载 语音通话 视频会议 直播推流 上下行对称 P2P 传输 云盘同步 多用户场景 高并发测试 压力测试 AP→终端 手机/平板 弱终端场景

4.7 测试结果对比表

最后,我把这五种测试模式的关键指标整理成了一张表。你以后做测试报告,直接套用这个格式就行。

测试模式 核心参数 关注指标 WiFi 典型值 常见问题
TCP 吞吐量 -t -p Bitrate (receiver) 30-300 Mbps 重传率高、吞吐量波动大
UDP 带宽/抖动 -u -b Jitter、Lost% Jitter < 30ms, Lost < 1% 抖动超标、丢包严重
双向测试 -d 上下行 Bitrate 对比 上下行差异 < 20% 上下行严重不对称
多线程测试 -P SUM 总吞吐量 单线程的 2-4 倍 多线程无提升(CPU 瓶颈)
反向模式 -R 服务端→客户端 Bitrate 与正向差异 < 30% 反向远低于正向(AP 下行问题)
我的习惯: 每次测试前,先跑一次 iperf3 -c 目标IP -p 端口 --version 确认版本。然后按 TCP→UDP→双向→多线程→反向的顺序跑一遍,全程记录。这样一份完整的 WiFi 性能画像就出来了。