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 接口 连接至电脑,以确保能够进行调试和查看输出信息。可输入 idf.py menuconfig 进入菜单后,在 Component config > ESP System Settings > Channel for console output 中确认或修改所选接口。
确认接口设置后,编译并烧录 iPerf 示例程序至 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 流量评估链路带宽、吞吐量、延迟和丢包情况。
准备阶段
ESP32 设备端
使用 iPerf 示例 程序进行测试。
通过 控制台(console) 观察运行状态、调试信息及测试结果。
由于默认情况下控制台通过 UART 通信,建议将 ESP32 设备通过 UART 接口 连接至电脑,以确保能够进行调试和查看输出信息。可输入
idf.py menuconfig进入菜单后,在Component config>ESP System Settings>Channel for console output中确认或修改所选接口。确认接口设置后,编译并烧录 iPerf 示例程序至 ESP32,以便进行后续网络性能测试。
电脑端
安装 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