本文目录导读:

使用 iperf3 测试 UDP 丢包率是非常常见的网络性能测试场景,UDP 测试与 TCP 不同,它不保证数据到达,因此丢包率是衡量 UDP 传输质量的关键指标。
以下是使用 iperf3 测试 UDP 丢包率的详细步骤和参数说明。
核心原理
- 客户端按照指定的带宽(
-b)和包大小(-l)向服务器发送 UDP 数据包。 - 服务器会统计接收到的数据包数量和接收到的数据总量。
- 差异计算:客户端发送的总数据量(或总包数) 减去 服务器接收的量,再除以客户端发送的量,就是丢包率。
注意:
iperf3的 UDP 测试必须指定带宽参数-b,如果不指定,它会以极低的默认速率(通常是 1 Mbps 或更低)发送,这通常不会产生丢包。
测试步骤
启动服务器端
在接收数据的一端(通常是测试目标)运行:
iperf3 -s # 或指定端口:iperf3 -s -p 5201
服务器会保持监听状态,等待客户端连接。
启动客户端并发送 UDP 数据流
在发送数据的一端运行客户端命令,必须包含 -u 和 -b 参数。
基本命令格式:
iperf3 -c <服务器IP> -u -b <带宽> -t <时长> -l <包大小>
参数详解:
-c:服务器 IP 地址。-u:使用 UDP 协议(非常重要)。-b:目标带宽,这是 UDP 测试的核心,你可以设置一个理论最大带宽,看看网络能否支撑。-b 100M:尝试以 100 Mbps 的速率发送。-b 1G:尝试以 1 Gbps 的速率发送。-b 0:尝试以最大努力发送,但可能会压垮链路。
-t:测试时长(秒),默认 10 秒。-l:数据包大小(字节),默认是 1470 字节(适配以太网 MTU),可以修改(如-l 1000)来测试不同包大小的影响。
示例:测试 100 Mbps 的 UDP 丢包
iperf3 -c 192.168.1.100 -u -b 100M -t 10
这条命令会向 IP 为 168.1.100 的服务器持续发送 10 秒 100 Mbps 的 UDP 数据流。
解读结果
测试结束后,客户端和服务器端都会显示结果。请务必查看服务器端(接收端)的输出,因为丢包是在接收端统计的。
客户端输出示例(发送端):
Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.20 port 54321 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-10.00 sec 119 MB 100 Mbps 85714 (sender)
这里显示发起了 85714 个数据报(Datagrams)。
服务器端输出示例(接收端 - 关键信息在这里):
[ 5] local 192.168.1.100 port 5201 connected to 192.168.1.20 port 54321
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 94.6 MB 79.4 Mbps 2.387 ms **2147/85714 (2.5%)**
重点看最后一行:
Lost/Total Datagrams:2147/85714- 前一个数字(2147) = 丢失的数据包数量。
- 后一个数字(85714) = 总发送的数据包数量(与客户端一致)。
(2.5%):这就是丢包率,本例中为 2.5%。Jitter:抖动,反映了延迟的变化程度,单位是毫秒(ms),在 UDP 测试中也很重要,对于语音/视频流非常关键。Bitrate:服务器实际接收到的有效吞吐量(79.4 Mbps),低于发送的 100 Mbps,因为部分数据丢了。
高级测试场景
测试网络的极限带宽
你可以逐步增加 -b 参数,直到丢包率开始显著上升。
-b 500M-> 丢包 0%-b 800M-> 丢包 0.5%-b 1G-> 丢包 15% 这说明你的网络链路在接近 800 Mbps 时开始达到瓶颈。
测试不同包大小的影响
# 测试小包(模拟语音) iperf3 -c 10.0.0.1 -u -b 1M -l 64 # 测试大包(模拟视频流) iperf3 -c 10.0.0.1 -u -b 100M -l 1460
小包通常更容易被路由器限制(每秒 PPS 限制),大包则更容易受带宽限制。
反向测试(测试服务器到客户端的链路)
使用 -R 参数:
iperf3 -c <服务器IP> -u -b 100M -R
这会从服务器向客户端发送 UDP 数据流,用于判断链路质量是否对称。
常见问题与排查
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 丢包率为 0%,但实际感觉卡顿 | 发送带宽 -b 设置得太低,没有填满网络链路。 |
增加 -b 的值,模拟真实负载。 |
| 出现大量丢失(>50%) | 发送速率远超接收端处理能力或网络带宽。 2. 防火墙或 QoS 设备丢弃了 UDP 包。 3. 接收端缓冲区不足。 |
降低 -b 值。2. 检查防火墙规则。 3. 在服务器端加大 UDP 接收缓冲区: iperf3 -s -w 256K。 |
客户端和服务器显示的 Total Datagrams 不一致 |
网络中间设备(如路由器)丢失了数据包,或者连接被中断,这是正常的,差值就是丢包。 | 无,这是正常的测试现象。 |
| 测试结果波动极大 | 网络本身不稳定,或者存在其他流量竞争。 | 尝试在低负载时段测试,或使用 -P <线程数> 进行多流测试。 |
测试 UDP 丢包率的 黄金命令:
- 服务器端:
iperf3 -s - 客户端:
iperf3 -c <IP> -u -b <目标带宽> -t 30
最终看服务器端输出的 Lost/Total Datagrams (X%) 中的百分比。
标签: UDP丢包率