4. 主流吞吐测试工具实战

吞吐测试这件事,说白了就是“搭台唱戏”。台子搭不好,戏就没法看。我见过太多测试结果对不上,最后发现是环境里某个衰减器没校准,或者网卡驱动版本不对。这一章,咱们就把台子搭结实。

4.1 硬件选型:AP、STA、网卡、衰减器

硬件选型有个基本原则:被测件(DUT)要明确,辅助设备要透明。什么意思?就是AP和STA谁是主角,你得先定好。剩下的网卡、衰减器,它们不能引入额外问题。

4.1.1 接入点(AP)的选择

AP是测试的核心。我个人习惯把AP分成三类:

类型 适用场景 注意事项
商用成品AP 验收测试、竞品对比 固件版本要锁定,避免自动升级
开发板/参考设计 芯片级性能验证 需要外接串口,方便抓取底层日志
软AP(hostapd) 快速原型、驱动调试 吞吐上限受限于主机CPU性能
我的经验:做802.11ax(Wi-Fi 6)测试时,尽量用开发板。商用AP的调度算法太“黑盒”,出了问题你根本不知道是芯片不行还是固件策略在捣乱。

4.1.2 工作站(STA)与网卡

STA这边,我建议用一台高性能PC加上一块独立无线网卡。笔记本自带的网卡往往有功耗限制,跑高吞吐时会自动降频。

网卡选型要注意三点:

  • 芯片组:尽量和AP用同一家芯片,避免兼容性问题
  • 接口:PCIe优于USB,USB 3.0勉强可用,USB 2.0直接放弃
  • 天线接口:必须支持外接天线,方便接衰减器
避坑:我曾经用某款USB网卡做80MHz频宽测试,结果死活跑不到600Mbps。折腾了两天,最后发现是USB线太长导致供电不足。换了一根0.5米的屏蔽线,问题立刻解决。

4.1.3 衰减器与射频链路

衰减器是吞吐测试里最容易被忽视的硬件。很多人觉得“信号好就行”,其实不然。吞吐测试需要在可控的信号强度下进行,否则结果没有可比性。

我常用的衰减器配置:

  • 可调衰减器:0-60dB,步进1dB,用于模拟不同距离
  • 固定衰减器:10dB、20dB各一对,用于链路预算
  • 功分器/合路器:多天线MIMO测试时必备

射频链路的连接顺序要固定:
AP天线口 → 衰减器 → 衰减器 → STA天线口

注意:衰减器两端要用高质量的SMA转接线,线损也要提前测量并计入总衰减值。

4.2 软件工具:iPerf3、Ostinato、Wireshark

硬件到位了,软件就是你的“眼睛”和“手”。这三款工具,我几乎天天用。

4.2.1 iPerf3:吞吐测试的“万金油”

iPerf3是吞吐测试的标配。它简单、稳定、跨平台。我习惯用以下参数组合:

# 服务端(在AP侧或STA侧,取决于测试方向)
iperf3 -s -p 5201

# 客户端(发送TCP流)
iperf3 -c 192.168.1.1 -p 5201 -t 60 -P 4 -i 1

# UDP测试(模拟实时流量)
iperf3 -c 192.168.1.1 -p 5201 -u -b 1000M -t 60 -i 1

参数说明:

  • -t 60:测试时长60秒,太短结果不稳定
  • -P 4:4个并行流,Wi-Fi 6建议用4-8个流
  • -u -b 1000M:UDP模式,目标带宽1000Mbps
关键点:TCP吞吐测试结果受窗口大小影响很大。如果发现吞吐上不去,试试加 -w 2M 把窗口调到2MB。

4.2.2 Ostinato:流量构造的“瑞士军刀”

iPerf3只能发简单的TCP/UDP流。如果你想模拟更真实的网络行为——比如视频流、VoIP、混合流量——那就得上Ostinato。

Ostinato的核心能力:

  • 构造任意协议的数据包(L2-L4)
  • 精确控制发包速率和包大小
  • 支持多端口同步发送

我常用它来做“背景流量”测试:在Wi-Fi链路上叠加80%的UDP背景流,然后看VoIP包的延迟和抖动。这种场景,iPerf3搞不定。

4.2.3 Wireshark:问题定位的“显微镜”

吞吐测试出问题时,Wireshark就是你的第一道防线。我不建议全程开着Wireshark抓包——那会影响性能。正确的做法是:

  1. 先用iPerf3跑一轮,确认吞吐是否达标
  2. 如果不达标,在STA侧开启Wireshark抓包
  3. 过滤条件设为 wlan.fc.type_subtype == 0x08(Beacon帧)或 tcp.analysis.retransmission
  4. 观察重传率、窗口大小、TCP ACK延迟
小技巧:抓包时把文件写到内存盘(RAM Disk)里,避免磁盘I/O成为瓶颈。我在Linux下常用 mount -t tmpfs -o size=2G tmpfs /tmp/capture。

4.3 网络拓扑设计:三种典型架构

拓扑设计决定了测试结果的“可解释性”。我总结了三种最常用的拓扑,覆盖了90%的吞吐测试场景。

4.3.1 直连拓扑(点对点)

这是最干净的拓扑。AP和STA之间只有衰减器,没有交换机、路由器等中间设备。

[PC1 - iPerf Server] --- [AP] --- [衰减器] --- [STA] --- [PC2 - iPerf Client]

适用场景:芯片级性能验证、驱动调优。

优点:路径最短,干扰最小,结果最可信。

缺点:无法模拟真实网络中的多跳延迟。

4.3.2 桥接拓扑(有线回传)

AP通过千兆以太网连接到一台交换机,STA通过Wi-Fi连接AP。iPerf服务端跑在交换机另一端的PC上。

[iPerf Server] --- [Switch] --- [AP] --- [衰减器] --- [STA] --- [iPerf Client]

适用场景:AP吞吐能力测试、多用户场景。

注意:交换机的端口速率必须大于AP的无线速率,否则有线侧会成为瓶颈。

4.3.3 环回拓扑(自环测试)

这种拓扑比较特殊。AP和STA在同一台设备上(比如一台PC装了两张网卡),通过环回接口或虚拟接口进行测试。

[同一台PC]
  ├── 网卡1(作为AP)
  └── 网卡2(作为STA)
       └── 通过衰减器连接

适用场景:驱动开发阶段的快速验证。

缺点:无法测试真实的射频性能,只适合软件层面的吞吐验证。

4.4 测试环境拓扑总览

下面这张图,把本章的核心内容串在了一起。你可以把它当作搭建环境时的“检查清单”。

WiFi吞吐测试环境拓扑总览 WiFi吞吐测试环境拓扑总览 硬件准备 • AP(商用/开发板/软AP) • STA(高性能PC + 独立网卡) • 衰减器(可调/固定) • 射频线缆 + SMA转接头 • 功分器(MIMO测试用) 软件工具 • iPerf3(吞吐基准测试) • Ostinato(复杂流量构造) • Wireshark(问题定位) • 驱动/固件管理工具 • 串口终端(开发板调试) 网络拓扑 • 直连拓扑(点对点) • 桥接拓扑(有线回传) • 环回拓扑(自环测试) • 多用户拓扑(扩展) • 混合拓扑(组合场景) 标准测试流程 ① 硬件连接 → ② 衰减器校准 → ③ 软件配置 → ④ 基线测试 → ⑤ 变量测试 → ⑥ 数据记录 (每次只改变一个变量:频宽、MCS、流数、衰减值) ⚠️ 常见注意事项 • 所有设备共地,避免地环路干扰 • 测试前关闭AP的节能模式和背景扫描

4.5 环境搭建的“避坑”清单

最后,我把自己踩过的坑整理成了一份清单。你搭建环境时,逐条核对就好。

  • 衰减器方向:可调衰减器有输入输出端,接反了会引入额外驻波
  • 线缆损耗:每根SMA线都要用网络分析仪测一下,别信标签上的标称值
  • 网卡驱动:Linux下用 ethtool -i wlan0 确认驱动版本,某些旧驱动有吞吐bug
  • CPU亲和性:iPerf3跑多流时,把不同流绑定到不同CPU核心,避免中断冲突
  • 温度控制:高吞吐测试会让芯片发热,加个小风扇吹着,否则会触发过热降频
我曾经犯过的错:有一次做80MHz频宽测试,结果始终比理论值低30%。查了两天,最后发现是AP的固件里默认开启了“MU-MIMO”,而我的STA不支持。关掉MU-MIMO后,吞吐立刻恢复正常。所以,测试前一定要检查AP的所有无线特性开关。

环境搭建这部分,看起来琐碎,但每一步都直接影响测试结果的可靠性。你想想看,如果衰减器没校准,测出来的数据能信吗?硬件和软件都到位了,下一件事就是动手跑测试了。不过在那之前,先把环境搭稳——这是所有工作的基础。