安装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之间的包转发率。
image-1749808004935