安装iperf3
去iperf3官网安装
启动服务端
在需要测试的机器上启动服务
iperf3 s
启动测试脚本
在同网络环境下的另一台机器上启动,目标ip是上面启动的服务
#!/bin/bash
echo "====== UDP 包转发率测试工具(iperf3)======"
# 设置默认值
DEFAULT_TARGET="192.168.31.2"
DEFAULT_PKT_SIZE=64
DEFAULT_BANDWIDTH=2500
DEFAULT_DURATION=10
read -p "请输入目标IP地址 [默认: $DEFAULT_TARGET]: " TARGET
read -p "请输入包大小 (bytes) [默认: $DEFAULT_PKT_SIZE]: " PKT_SIZE
read -p "请输入目标带宽 (Mbps) [默认: $DEFAULT_BANDWIDTH]: " BANDWIDTH
read -p "请输入测试时长 (秒) [默认: $DEFAULT_DURATION]: " DURATION
# 如果输入为空,则使用默认值
TARGET=${TARGET:-$DEFAULT_TARGET}
PKT_SIZE=${PKT_SIZE:-$DEFAULT_PKT_SIZE}
BANDWIDTH=${BANDWIDTH:-$DEFAULT_BANDWIDTH}
DURATION=${DURATION:-$DEFAULT_DURATION}
echo
echo "开始测试..."
echo "目标IP: $TARGET"
echo "包大小: $PKT_SIZE bytes"
echo "带宽: $BANDWIDTH Mbps"
echo "持续时间: $DURATION 秒"
echo "=========================================="
# 执行 iperf3 测试
OUTPUT=$(iperf3 -c "$TARGET" -u -l "$PKT_SIZE" -b "${BANDWIDTH}M" -t "$DURATION" 2>&1)
# 提取数据
SENDER_TOTAL=$(echo "$OUTPUT" | grep sender | grep -oP '\d+(?=/)' | tail -1)
RECEIVER_TOTAL=$(echo "$OUTPUT" | grep receiver | grep -oP '\d+/\d+' | head -1 | cut -d'/' -f2)
LOST=$(echo "$OUTPUT" | grep receiver | grep -oP '\d+(?=/)' | head -1)
RECEIVED=$((RECEIVER_TOTAL - LOST))
RATE=$(echo "$OUTPUT" | grep receiver | grep -oP '\d+\.\d+ Mbits/sec' | head -1)
# 计算 PPS 和丢包率
if [[ "$RECEIVER_TOTAL" -gt 0 ]]; then
PPS=$(echo "scale=2; $RECEIVED / $DURATION / 1000" | bc)
LOSS_RATE=$(echo "scale=2; $LOST * 100 / $RECEIVER_TOTAL" | bc)
echo
echo "✅ 测试完成!结果如下:"
echo "------------------------------------------"
echo "📦 实际接收带宽 :$RATE"
echo "📊 包转发率(PPS) :$PPS Kpps"
echo "❗ 丢包率 :$LOSS_RATE%(丢 $LOST / 共 $RECEIVER_TOTAL)"
echo "------------------------------------------"
else
echo "❌ 无法获取结果,iperf3 可能未运行或目标无响应。"
fi
最终成效
这里测试的是小服务器与nas之间的包转发率。
