iPerf 测试教程
本文介绍如何使用 iPerf 测试 网络带宽/吞吐量,并演示两个 ESP32 设备之间以及 ESP32 与电脑之间的网络性能验证方法。
关于 iPerf
iPerf 是一款用于 评估网络性能 的工具,可测试 TCP 与 UDP 的带宽表现,衡量最大吞吐量,并支持多种测试参数。通过 UDP 模式,还可获取带宽、延迟抖动及丢包率等关键指标,用于判断链路质量。常用于测试两台设备之间的数据传输能力,例如网络带宽和无线或有线链路的稳定性。
以下是几个重要的测试结果指标:
带宽(Bandwidth) 指网络链接的更大传输速率,单位为 bit/s 或 byte/s。在 iPerf 测试结果中,带宽用 Bandwidth 表示。带宽越高,网络性能越好。
传输速率(Throughput) 指数据在网络中的实际传输速率,单位为 bit/s 或 byte/s。在 iPerf 测试结果中,传输速率用 Transfer 和 Bandwidth 表示。传输速率越高,网络性能越好。
延迟(Delay) 指数据从发送端发送到接收端所需要的时间,单位为毫秒(ms)。在 iPerf 测试结果中,延迟用 rtt 表示。延迟越低,数据传输速度越快。
ESP32 设备间测试
在 ESP32 设备间测试中,使用两个 ESP32 设备,一个作为 服务器,负责接收数据并统计带宽、吞吐量、延迟和丢包;另一个作为 客户端,向服务器发送数据流以测量网络链路性能。通过 TCP 或 UDP 流量传输,可评估两台设备间的网络传输能力。
准备阶段
使用 iPerf 示例 程序进行测试,并通过 控制台(console) 观察运行状态、调试信息及测试结果。
由于默认情况下控制台通过 UART 通信,建议将 ESP32 设备通过 UART 接口 连接至电脑,以确保能够进行调试和查看输出信息。
进入 iPerf 示例所在目录后,输入以下指令 设置“目标”芯片 并运行项目配置工具
menuconfig:idf.py set-target esp32s3 // 应将 esp32s3 替换为实际使用的芯片型号 idf.py menuconfig
进入
menuconfig页面后,在Component config>ESP System Settings>Channel for console output中确认或修改所选接口。
确认接口设置后,输入以下指令编译并烧录 iPerf 示例程序至 ESP32 设备,以便进行后续网络性能测试。
idf.py build flash monitor
备注
由于 ESP32 设备间测试使用了两个 ESP32 设备,因此需要分别对两台设备进行上述操作。
测试阶段
备注
可输入 help 查看指令使用说明。
在测试时,需要将一台 ESP32 设备配置为 AP 模式,并指定其 SSID 和密码,作为 iPerf 服务器 使用:
wifi_mode ap // 如果使用的是 ESP-IDF v5.4 以下的版本,此行命令可省略
ap_set <dut_ap_ssid> <dut_ap_password>
<dut_ap_ssid>:自定义的 Wi-Fi 名称<dut_ap_password>:自定义的 Wi-Fi 密码
另一台设备保持 Station(STA)模式 (默认即为 STA 模式,无需额外设置),作为 客户端 连接服务器设备创建的 Wi-Fi 网络:
sta_connect <ap_ssid> <ap_password>
<ap_ssid>:要连接的 Wi-Fi 名称,应与前面设置的 AP SSID 保持一致<ap_password>:要连接的 Wi-Fi 密码,应与前面设置的 AP 密码保持一致
在 AP 设备上运行 iPerf,作为服务器使用:
iperf -s -i 3
/* 若希望开启 UDP 模式,则输入以下指令 */
iperf -u -s -i 3
-s表示开启 Server 模式,默认是 TCP 模式-u表示开启 UDP 模式-i 3表示每 3 秒打印一次速率
在 STA 设备上运行 iPerf,作为客户端使用:
iperf -c <ap_ip> -i 3 -t 60
/* 若服务器为 UDP 模式,则输入以下指令 */
iperf -u -c <ap_ip> -i 3 -t 60
-c表示开启 Client 模式<ap_ip>表示服务器设备的 IP 地址,用于客户端连接-t 60表示总共测试 60 秒时间
备注
测试时间可不指定,默认为 30 秒;若指定,则服务器和客户端需保持一致。
测试结果
备注
该测试结果仅供参考,具体官方测试数据见 附录。
ESP32 设备间测试时,作为客户端和服务器的 ESP32 设备都会打印 Bandwidth。下图中左边为服务器数据,右边为客户端数据。
服务器端打印的 Bandwidth 显示的是 接收流量(RX),即服务器收到客户端发送的数据速率,用于反映从客户端到服务器的实际吞吐量。网络丢包或延迟会影响服务器端显示的速率。
客户端打印的 Bandwidth 显示的是 发送流量(TX),即客户端向服务器发送数据的速率,用于反映客户端实际发出的速率。若网络或服务器处理存在瓶颈,客户端显示的速率可能高于服务器端实际接收速率。
ESP32 与电脑测试
在 ESP32 与电脑测试中,使用 ESP32 设备和电脑进行网络性能测量。ESP32 作为客户端发送数据,电脑则使用对应的 iPerf 工具进行配合,通过 TCP 或 UDP 流量评估链路带宽、吞吐量、延迟和丢包情况。
准备阶段
使用 iPerf 示例 程序进行测试,并通过 控制台(console) 观察运行状态、调试信息及测试结果。
由于默认情况下控制台通过 UART 通信,建议将 ESP32 设备通过 UART 接口 连接至电脑,以确保能够进行调试和查看输出信息。
进入 iPerf 示例所在目录后,输入以下指令 设置“目标”芯片 并运行项目配置工具
menuconfig:idf.py set-target esp32s3 // 应将 esp32s3 替换为实际使用的芯片型号 idf.py menuconfig
进入
menuconfig页面后,在Component config>ESP System Settings>Channel for console output中确认或修改所选接口。
确认接口设置后,输入以下指令编译并烧录 iPerf 示例程序至 ESP32 设备,以便进行后续网络性能测试。
idf.py build flash monitor
电脑端
安装 iPerf2 进行测试。
备注
电脑端下载时应使用 iperf2 版本,不要使用 iperf3,因为示例基于 iperf2 开发。
将程序保存至指定目录,例如
C:\iperf。打开命令提示符(
Win + R> 输入cmd> 回车),并进入 iPerf2 所在目录。输入以下指令,如果成功显示版本号,说明安装和准备工作完成,如果提示找不到命令或报错,则说明路径或文件有问题
iperf.exe --version
测试阶段
备注
在 ESP32 设备端,可输入
help查看指令使用说明。在电脑端,可输入
iperf --help查看指令使用说明。
在测试时,电脑作为服务器,首先需要在 cmd 中输入 ipconfig 获取电脑的 IPv4 地址:
在电脑上以 服务器 身份运行 iPerf2,出现如下信息就说明服务器启动成功:
iperf.exe -s -i 3
/* 若希望开启 UDP 模式,则输入以下指令 */
iperf.exe -u -s -i 3
-s表示开启 Server 模式,默认是 TCP 模式-u表示开启 UDP 模式-i 3表示每 3 秒打印一次速率
在 ESP32 设备端输入指令进行 Wi-Fi 连接,确保和电脑连接的是同一个路由器。
sta_connect <ap_ssid> <ap_password>
<ap_ssid>:要连接的 Wi-Fi 名称<ap_password>:要连接的 Wi-Fi 密码
在 ESP32 设备端运行 iPerf,作为 客户端 使用:
iperf -c <IPv4> -i 3 -t 30
/* 若服务器为 UDP 模式,则输入以下指令 */
iperf -u -c <IPv4> -i 3 -t 60
-u表示开启 UDP 模式-c表示开启 Client 模式<IPv4>表示服务器设备的 IP 地址,用于客户端连接-t 30表示总共测试 30 秒时间-i 3表示每 3 秒打印一次速率
备注
测试时间可不指定,默认为 30 秒;若指定,则服务器和客户端需保持一致。
测试结果
备注
该测试结果仅供参考,具体官方测试数据见 附录。
ESP32 和电脑测试时,作为 发送端(TX) 的 ESP32 设备会打印 Bandwidth,显示的是 ESP32 发送到对端的数据速率,用于反映从 ESP32 到电脑的实际吞吐量。网络丢包或延迟会影响对端统计到的速率。
作为 接收端(RX) 的电脑会打印 Transfer 和 Bandwidth,显示的是 从 ESP32 接收到的数据量和接收速率(RX)。
问题排查
ESP32 和电脑测试时,电脑端启用 UDP 模式,提示 bind failed: Operation not permitted
这是因为 Windows 对 UDP 端口有额外的安全或防火墙限制,可能阻止端口绑定。可以切换至其他端口使用,例如 5002。
指令参考:
/* 电脑端指令 */
iperf.exe -u -s -p 5002 -i 3
/* ESP32 设备端指令 */
iperf -u -c <IPv4> -p 5002 -i 3