网络性能测试以及流量监测
1. 快速开始
安装依赖
# Ubuntu/Debian
sudo apt install iperf3 sockperf python3 python3-psutil
# CentOS/RHEL
sudo yum install iperf3 sockperf python3 python3-psutil
基本使用
启动服务端(在VR设备或目标服务器上)
python3 vr_network_server.py- 服务端只负责启动监听,不显示性能数据
- 测试完成后显示简单的完成提示
运行客户端测试(在测试机器上)
python3 vr_network_client.py <VR设备IP>- 客户端负责数据分析和结果展示
- 显示完整的性能指标和VR适用性评估
2. 网络性能测试
📊 测试指标
核心四大指标(仅客户端显示):
- ⚡ 延迟: 通过ping测试获取RTT延迟数据
- 📈 抖动: 网络延迟波动(iperf3 jitter)
- 📦 丢包率: 数据包丢失百分比
- 🚀 吞吐量: 实际数据传输速率
- 🎮 VR适用性: 综合评估是否适合VR应用
🛠️ 高级配置
自定义数据包大小
# 小包测试 (模拟手势数据)
python3 vr_network_client.py 192.168.1.100 -l 256 -b 1M
# 中包测试 (模拟复合数据)
python3 vr_network_client.py 192.168.1.100 -l 2048 -b 10M
# 大包测试 (模拟视频流)
python3 vr_network_client.py 192.168.1.100 -l 8192 -b 50M
调整流量大小
# 低流量测试
python3 vr_network_client.py 192.168.1.100 -b 1M
# 高流量测试
python3 vr_network_client.py 192.168.1.100 -b 100M
长时间稳定性测试
python3 vr_network_client.py 192.168.1.100 -t 300 # 5分钟
python3 vr_network_client.py 192.168.1.100 -t 1800 # 30分钟
📋 参数说明
服务端 (vr_network_server.py)
-p, --port: 监听端口 (默认: 9019)-B, --bind: 绑定IP地址 (默认: 0.0.0.0)
客户端 (vr_network_client.py)
server_ip: 服务器IP地址 (必需)-p, --port: 服务器端口 (默认: 9019)-l, --length: 数据包大小 (bytes, 默认: 512)-b, --bandwidth: 目标带宽 (如: 1M, 10M, 100M, 默认: 5M)-t, --time: 测试时长 (秒, 默认: 30)--tcp: 使用TCP协议 (默认UDP)
🎯 VR测试场景推荐
Quest3 手势数据测试
python3 vr_network_client.py <quest3_ip> -l 512 -b 2M -t 60
高频传感器数据测试
python3 vr_network_client.py <quest3_ip> -l 256 -b 5M -t 120
视频流质量测试
python3 vr_network_client.py <quest3_ip> -l 16384 -b 50M -t 300
🛠️ 设计原理
分工明确
- 服务端: 纯粹的数据接收器,只负责启动iperf3监听,不做数据分析
- 客户端: 数据分析器,集成ping延迟测试和iperf3吞吐量测试,提供完整分析
数据流程
- 客户端先用ping测试延迟
- 客户端连接服务端进行iperf3测试
- 客户端获取并解析所有测试数据
- 客户端显示完整的VR网络评估报告
抖动说明
- 网络抖动: iperf3测量的UDP数据包传输延迟变化,反映网络稳定性
- 只显示一个抖动指标,避免混淆
3. 本地端口流量监测工具
3.1 基于tcpdump的流量监控(推荐)
由于原始的 vr_traffic_monitor.py 监控的是本地端口,而实际上是本地作为客户端连接到VR端的端口,因此提供了基于tcpdump的新监控脚本 vr_tcpdump_monitor.py。
使用方法
实时监控所有VR端口流量:
sudo python3 vr_tcpdump_monitor.py
限时监控(例如60秒):
sudo python3 vr_tcpdump_monitor.py -d 60
指定网卡设备(默认wlo1):
sudo python3 vr_tcpdump_monitor.py -i eth0
自定义统计显示间隔:
sudo python3 vr_tcpdump_monitor.py -s 5 # 每5秒显示一次统计
功能特点
- ✅ 正确监控本地连接到VR端的端口流量
- ✅ 基于tcpdump实现,精确捕获网络数据包
- ✅ 实时显示每个端口的发送/接收数据量和速率
- ✅ 显示活跃连接数和端口使用情况
- ✅ 提供详细的流量统计和汇总报告
注意事项
- 需要root权限运行(使用sudo)
- 确保tcpdump已安装:
sudo apt install tcpdump - 默认监控wlo1网卡,可通过-i参数指定其他网卡
3.2 原始监控工具(仅供参考)
基本用法
1. 监控VR端口流量
python3 vr_traffic_monitor.py monitor -d 60 -i 2
2. 测试VR端口延迟
python3 vr_traffic_monitor.py latency <VR设备IP> -d 10
⚠️ 注意: 此工具监控的是本地端口,当本地作为客户端连接VR设备时可能无法正确显示流量。建议使用上述基于tcpdump的监控工具。
监控的VR端口 (基于实际代码分析)
脚本会自动监控以下VR相关端口 (共28个):
核心数据端口: | 端口 | 用途 | 来源文件 | |------|------|----------| | 10019 | Quest3主要数据端口/左手手势数据 | monitor_quest3.py, noitom_hand_publish.py | | 10029 | 右手手势数据服务端口 | noitom_hand_publish.py | | 10050 | Noitom本地左手端口 | noitom_hand_publish.py | | 10060 | Noitom本地右手端口 | noitom_hand_publish.py |
Quest3广播发现端口: | 端口 | 用途 | 来源文件 | |------|------|----------| | 11000-11010 | Quest3广播发现端口 (11个) | monitor_quest3.py |
WebRTC视频流端口: | 端口 | 用途 | 来源文件 | |------|------|----------| | 8765 | WebRTC信令服务器 | webrtc_singaling_server.py | | 10030-10040 | 视频流广播端口 (11个) | webrtc_videostream.py |
其他服务端口: | 端口 | 用途 | 来源文件 | |------|------|----------| | 8031 | Flask HTTP服务端口 | flask_server.py | | 8080 | UDP测试服务端 | test_upd_server.py | | 8443 | VR广播端口 | planarmwebsocketservice, pico-body-tracking | | 12345 | Body Tracking UDP Server | body_tracking_udp_server.py |
📝 端口验证: 所有端口均基于
src/manipulation_nodes/noitom_hi5_hand_udp_python项目的实际代码分析确定,详见VR端口分析报告.md
最后: 注意:
一、带宽限制 -b 的实现原理
目标速率控制
-b参数设定的是 理论发送带宽上限(如-b 100M表示目标速率为 100 Mbps)。iperf3 客户端会尝试以该速率发送数据,但实际速率可能受网络拥塞、设备性能等因素影响而低于设定值。发包频率计算
实际发包频率由以下公式决定:
[ \text{发包频率 (pps)} = \frac{\text{带宽 (bps)}}{\text{有效数据包大小 (bit)}} ]- 有效数据包大小 = 应用层数据包大小(
-l参数) + 协议头部开销- TCP 开销:IP 头(20B) + TCP 头(20B) = 40B
- UDP 开销:IP 头(20B) + UDP 头(8B) = 28B
- 示例:
- 若
-l 1000 -b 100M(UDP 协议):
有效包大小 = 1000B + 28B = 1028B = 8224 bit
发包频率 = (100 \times 10^6 \, \text{bps} / 8224 \, \text{bit} \approx 12,153 \, \text{包/秒})
- 若
- 有效数据包大小 = 应用层数据包大小(
工具行为差异
- TCP 模式:
通过滑动窗口和拥塞控制算法动态调整速率,-b仅作为软性上限(实际速率可能略低)。 - UDP 模式:
严格按计算出的发包频率发送数据包,-b为硬性限制(客户端强制按此速率发包)。
- TCP 模式: