来源:音视频小话
原文:https://mp.weixin.qq.com/s/8bYpASuJINpqXKid6v_mIw
在分布式系统、实时音视频传输或游戏服务器等场景中,网络质量(带宽、延迟、丢包率)直接影响用户体验和系统稳定性。传统工具(如 iperf)主要针对 TCP 协议优化,而 UDP 压测工具较少且功能单一。为此,作者基于 Rust 的异步运行时 Tokio 开发了一款高性能 UDP 网络压测工具,专注于精准探测两台主机之间的网络状况,为 UDP 应用提供可靠的数据支撑。基于Rust开发的工具,具有跨平台的特点,可以探测服务器之间,或者pc与服务器之间的网络带宽,Rtt,丢包率等重要信息。
核心功能
- 带宽探测
通过动态调整发送速率,结合接收端统计实际接收的数据量,计算出当前网络环境下的可用 UDP 带宽,避免传统工具因 TCP 拥塞控制导致的偏差。 - RTT(往返时延)测量
在 UDP 报文中嵌入时间戳,接收端计算报文从发送到返回的延迟,支持统计最小、最大、平均 RTT 及抖动(Jitter),帮助识别网络抖动对实时应用的影响。 - 丢包率统计
发送端记录发送的报文序列号,接收端比对缺失的序列号,精确计算丢包率,尤其适用于高丢包场景(如跨地域公网传输)下的质量评估。
技术亮点
- 异步高性能架构
基于 Tokio 的异步 I/O 模型,实现多线程并发收发,充分利用多核 CPU 性能,轻松应对高吞吐量场景(支持百万级报文/秒)。 - 低开销设计
报文头仅包含必要元数据(序列号、时间戳),最大限度减少额外开销,确保测试结果贴近真实业务负载。 - 灵活配置
支持自定义报文大小、发送速率、测试时长等参数,适配不同网络环境和测试目标(如模拟游戏小包、视频流大包)。 - 跨平台rust支持linux/mac/win的编译和使用
使用场景
- UDP 应用开发调试快速验证网络模块的性能瓶颈。
- 服务器部署选址通过跨地域压测选择最优机房。
- 网络故障排查定位丢包或延迟异常的具体环节。
开源代码开源代码github地址:
https://github.com/runner365/udp_bench.git
编译:
# rust标准编译方法
cargo build
运行
udp服务端
./target/debug/udp_server_bench -l 152.136.169.211 -p 9898
- -l 设置监听地址
- -p 设置udp监听端口
udp客户端
./target/debug/udp_client_bench -s 192.168.40.245 -p 9898 -c 152.136.169.211 -r 7878 -k 2000
- -s 设置服务端的ip
- -p 设置服务端的udp端口
- -c 设置客户端的ip地址
- -r 设置客户端的udp端口
- -k 设置发送流量大小,单位kbps
运行结果:rtt打点结果:rtt_stats.json
tail -n 10 rtt_stats.json
{"ts":1752726855409,"rtt":8.0,"avg_rtt":8.379359,"seq":8987}
{"ts":1752726857420,"rtt":6.0,"avg_rtt":8.983239,"seq":9436}
{"ts":1752726859428,"rtt":9.0,"avg_rtt":14.932756,"seq":9884}
{"ts":1752726861437,"rtt":7.0,"avg_rtt":11.19528,"seq":10332}
{"ts":1752726863457,"rtt":9.0,"avg_rtt":8.244389,"seq":10780}
{"ts":1752726865473,"rtt":13.0,"avg_rtt":9.156795,"seq":11230}
{"ts":1752726867478,"rtt":6.0,"avg_rtt":8.048859,"seq":11681}
{"ts":1752726869498,"rtt":7.0,"avg_rtt":7.8547807,"seq":12130}
{"ts":1752726871513,"rtt":15.0,"avg_rtt":15.589755,"seq":12577}
{"ts":1752726873519,"rtt":17.0,"avg_rtt":9.958101,"seq":13026}
丢包信息:total_stats.json
cat total_stats.json
{"sent":13396,"received":13382,"lost":14,"lost_percent":0.10450881}
通过rtt_stats.json绘制rtt变化曲线:
python report.py
曲线包括avg_rtt和最小二乘法的曲线

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至[email protected] 举报,一经查实,本站将立刻删除。