4、吞吐量测试方法:iperf3工具使用、TCP/UDP吞吐量对比、多线程测试、测试环境搭建

吞吐量测试,说白了就是看看你的WiFi链路到底能跑多快。很多工程师调完WiFi参数后,凭感觉说“好像快了”,这不行。你得用数据说话。我个人习惯用iperf3,这工具轻量、跨平台,而且结果稳定,业界公认。

这一章,我会带你从环境搭建开始,到TCP/UDP对比,再到多线程压测,把吞吐量测试这件事彻底讲透。

4.1 测试环境搭建:别让环境坑了你

先说说环境。我见过太多人,拿着笔记本在办公室随便找个位置就开始测,结果数据忽高忽低,根本没法用。你想想看,WiFi信号受干扰、同频AP、甚至微波炉都能影响结果。所以,环境搭建是第一道坎。

⚠️ 重要提醒: 测试环境必须可控。不要在公共WiFi环境下测,也不要在人多的办公区测。最好选在屏蔽室或空旷无干扰的实验室。

具体来说,你需要准备:

  • 两台设备:一台做服务端(Server),一台做客户端(Client)。可以是两台Linux电脑,或者一台电脑+一台开发板。
  • 有线连接:服务端最好用有线接入路由器,避免服务端本身成为瓶颈。客户端通过WiFi连接被测AP。
  • 固定位置:客户端和AP之间距离固定,通常2-3米,无遮挡。我建议用支架固定,别用手拿着。
  • 关闭干扰源:关闭蓝牙、关闭其他无线设备、关闭同频段的AP。

嗯,这里要注意:如果你测的是2.4GHz频段,记得把微波炉关掉。我曾经在客户现场排查吞吐量低的问题,折腾了半天,最后发现是隔壁茶水间的微波炉在加热午餐……

4.2 iperf3 安装与基本用法

iperf3 安装很简单。Linux上一条命令搞定:

# Ubuntu/Debian
sudo apt-get install iperf3

# CentOS/RHEL
sudo yum install iperf3

# macOS
brew install iperf3

Windows用户可以去官网下载预编译的exe文件,或者用WSL。

基本用法分两步:

  1. 启动服务端:在服务端执行 iperf3 -s,默认监听5201端口。
  2. 启动客户端:在客户端执行 iperf3 -c 服务端IP,开始测试。

举个例子,服务端IP是192.168.1.100,客户端执行:

iperf3 -c 192.168.1.100

默认情况下,iperf3会进行10秒的TCP测试,每秒输出一次结果,最后汇总。输出大概长这样:

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   112 MBytes  94.0 Mbits/sec
[  5]  10.00-20.00  sec   110 MBytes  92.3 Mbits/sec
[  5]  20.00-30.00  sec   115 MBytes  96.5 Mbits/sec
[  5]  30.00-40.00  sec   108 MBytes  90.6 Mbits/sec
[  5]  40.00-50.00  sec   113 MBytes  94.8 Mbits/sec
[  5]  50.00-60.00  sec   111 MBytes  93.1 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-60.00  sec   669 MBytes  93.6 Mbits/sec  sender
[  5]   0.00-60.00  sec   669 MBytes  93.6 Mbits/sec  receiver

看最后一行,93.6 Mbits/sec 就是平均吞吐量。注意,这里单位是Mbps,不是MB/s。1 Byte = 8 bits,所以93.6 Mbps ≈ 11.7 MB/s。

💡 小技巧: 加 -t 参数可以指定测试时长,比如 -t 30 测30秒。加 -i 1 可以每秒输出一次结果,方便观察波动。

4.3 TCP vs UDP 吞吐量对比

TCP和UDP的吞吐量表现完全不同。为什么?因为TCP有拥塞控制、重传机制,而UDP只管发,不管收没收到。

我直接说结论:TCP吞吐量通常低于UDP,但更接近真实应用场景。因为你的网页、视频、文件传输,底层都是TCP。UDP吞吐量更多用来测试WiFi链路的极限能力。

测试UDP吞吐量,客户端加 -u 参数:

iperf3 -c 192.168.1.100 -u -b 100M

-b 100M 表示以100Mbps的速率发送UDP数据包。如果不加 -b,iperf3默认只发1Mbps,测不出极限。

来看一个实际对比:

测试项 TCP吞吐量 UDP吞吐量 丢包率
近距离(2米,无遮挡) 93.6 Mbps 112.4 Mbps 0.02%
远距离(10米,隔一堵墙) 45.2 Mbps 78.1 Mbps 3.5%
强干扰环境 12.8 Mbps 35.6 Mbps 12.3%

看到了吗?UDP在远距离和干扰环境下,吞吐量依然比TCP高不少,但代价是丢包率飙升。TCP虽然慢,但数据完整。这就是为什么视频通话偶尔会卡,但不会花屏——它用的是UDP,丢包了就丢帧。

🔑 核心结论: 做WiFi性能调优时,TCP吞吐量是验收指标,UDP吞吐量是极限参考。两者都要测,但以TCP为准。

4.4 多线程测试:压出真实性能

单线程测试只能反映一条TCP流的表现。但实际应用中,你的手机可能同时跑着、抖音、浏览器……多个连接并发。这时候,单线程的吞吐量就不够看了。

iperf3支持多线程测试,用 -P 参数指定并行线程数:

iperf3 -c 192.168.1.100 -P 4 -t 30

这条命令会同时开4个TCP线程,持续30秒。输出结果会分别显示每个线程的吞吐量,最后汇总:

[SUM]   0.00-30.00  sec  1.02 GBytes  292 Mbits/sec

多线程测试能帮你发现两个问题:

  • WiFi芯片的多流处理能力:有些低端芯片,单线程能跑80Mbps,但4线程一压,总吞吐量反而下降,说明芯片处理不过来。
  • AP的并发瓶颈:AP的CPU或无线模块可能成为瓶颈。多线程测试能暴露这个问题。

我建议的测试策略:

  1. 先测单线程,记录基准值。
  2. 再测2线程、4线程、8线程,观察总吞吐量变化。
  3. 如果总吞吐量不再随线程数增加而提升,说明已经到瓶颈了。
⚠️ 注意: 线程数不是越多越好。太多线程会导致上下文切换开销,反而降低性能。一般建议4-8线程就够。

4.5 测试流程与避坑指南

最后,我总结一套标准测试流程,你照着做,数据就有说服力:

  1. 环境准备:固定设备位置,关闭干扰源,确保服务端有线连接。
  2. 服务端启动:iperf3 -s,保持终端打开。
  3. 客户端测试:先测TCP单线程,再测UDP,最后测多线程。
  4. 记录数据:每次测试至少跑30秒,记录平均吞吐量和丢包率(UDP)。
  5. 重复三次:取平均值,避免偶然误差。

避坑指南:

  • 我曾经遇到过一个问题:测试结果忽高忽低,后来发现是服务端的防火墙限制了iperf3的端口。记得放行5201端口。
  • 我曾经在客户现场,客户端和服务端时间不同步,导致测试结果异常。iperf3依赖系统时间,建议先同步NTP。
  • 还有一次,我测UDP时忘了加 -b 参数,结果只有1Mbps,还以为是WiFi坏了……
💡 终极建议: 把测试脚本化。写一个shell脚本,自动执行多轮测试,输出CSV格式的结果。这样你就能批量对比不同参数下的性能差异。

4.6 本章知识体系

下面这张图,帮你理清本章的核心逻辑:

吞吐量测试知识体系 吞吐量测试知识体系 iperf3 吞吐量测试 环境搭建 TCP vs UDP 多线程测试 测试流程与避坑 固定位置 关闭干扰 TCP验收 UDP极限 并发压测 瓶颈定位 💡 核心思路:先搭环境 → 测TCP基准 → 测UDP极限 → 多线程压测 → 定位瓶颈 每次调优后,重复测试,用数据验证效果