iperf3 服务器测速服务搭建指南
目录
概述
iperf3 是一个开源的网络性能测试工具,可以用于测量网络带宽、延迟、丢包率、抖动等关键指标。本文档介绍如何在服务器上搭建 iperf3 测速服务,并让客户端连接进行网络测速。
主要特性
- 跨平台支持:支持 Linux、Windows、macOS、Android、iOS 等多个平台
- 协议支持:支持 TCP 和 UDP 协议测试
- 测试方向:可以测试上行、下行以及双向带宽
- 高精度:提供详细的性能指标,包括带宽、延迟、丢包率、抖动等
- 灵活配置:支持多种参数配置,适应不同测试场景
应用场景
| 场景 | 说明 |
|---|---|
| 网络带宽测试 | 测量实际可用带宽,验证网络服务商承诺的带宽 |
| 网络质量评估 | 检测网络延迟、丢包率、抖动等质量指标 |
| 服务器性能测试 | 评估服务器网络处理能力和吞吐量 |
| 网络故障排查 | 定位网络瓶颈,诊断网络问题 |
| CDN 性能测试 | 测试 CDN 节点的网络性能 |
| VPN 性能测试 | 评估 VPN 连接对网络性能的影响 |
安装 iperf3
各平台安装方法
在服务器上安装 iperf3(支持 Linux/Windows/macOS):
Debian/Ubuntu
bash
sudo apt-get update && sudo apt-get install iperf3
CentOS/RHEL
bash
sudo yum install epel-release && sudo yum install iperf3
Fedora
bash
sudo dnf install iperf3
macOS
bash
brew install iperf3
Windows
- 访问 iperf3 官方下载页面
- 下载 Windows 版本的预编译二进制文件
- 解压后将
iperf3.exe添加到系统 PATH 环境变量
其他平台
其他平台可直接下载官方预编译二进制使用。安装完成后两端均可用 iperf3 命令。
验证安装
安装完成后,可以通过以下命令验证:
bash
iperf3 --version
正常输出示例:
iperf 3.13 (cJSON 1.7.18)
Linux server 5.4.0-74-generic #83-Ubuntu SMP x86_64 GNU/Linux
启动服务器测速服务
最简方式
在服务器执行:
bash
iperf3 -s
默认监听 TCP 5201 端口,日志会打印监听地址与端口。
服务器端输出示例:
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
常用服务器参数
| 参数 | 说明 | 示例 |
|---|---|---|
-s |
以服务器模式运行 | iperf3 -s |
-p <port> |
指定监听端口(默认 5201) | iperf3 -s -p 1314 |
-B <IP> |
绑定到指定 IP 地址或网卡 | iperf3 -s -B 192.168.1.10 |
-D |
以守护进程模式运行(后台) | iperf3 -s -D |
--logfile <file> |
将日志输出到文件 | iperf3 -s --logfile server.log |
-1 |
只接受一个客户端连接 | iperf3 -s -1 |
-V |
显示版本信息并退出 | iperf3 -V |
常用增强参数
指定端口
bash
iperf3 -s -p 1314
指定网卡/IP
bash
iperf3 -s -B 192.168.1.10
后台/守护进程
Linux 可用:
bash
iperf3 -s -D
Windows 有相应服务模式选项。
输出到文件
bash
iperf3 -s --logfile server.log
仅允许指定客户端
bash
iperf3 -s -c 203.0.113.5
仅该客户端可连,UDP 模式不支持该限制。
使用 systemd 管理服务(Linux)
创建 systemd 服务文件 /etc/systemd/system/iperf3.service:
ini
[Unit]
Description=iperf3 server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/iperf3 -s
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启用并启动服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable iperf3
sudo systemctl start iperf3
sudo systemctl status iperf3
防火墙配置
防火墙放行(示例为 firewalld,放通 5201/tcp):
bash
sudo firewall-cmd --zone=public --add-port=5201/tcp --permanent
sudo firewall-cmd --reload
安全建议
重要:不要长期将 iperf3 暴露在公网,必要时限制来源 IP、改用非默认端口并配合防火墙。
客户端连接并测速
客户端常用参数
| 参数 | 说明 | 示例 |
|---|---|---|
-c <host> |
客户端模式,连接到指定服务器 | iperf3 -c 192.168.1.100 |
-p <port> |
指定服务器端口(默认 5201) | iperf3 -c 192.168.1.100 -p 1314 |
-t <seconds> |
测试持续时间(秒) | iperf3 -c 192.168.1.100 -t 30 |
-i <seconds> |
报告间隔(秒) | iperf3 -c 192.168.1.100 -i 1 |
-u |
使用 UDP 协议 | iperf3 -c 192.168.1.100 -u |
-b <bandwidth> |
目标带宽(UDP 或 TCP 限制) | iperf3 -c 192.168.1.100 -b 100M |
-P <num> |
并行流数量 | iperf3 -c 192.168.1.100 -P 4 |
-R |
反向测试(服务器发送,客户端接收) | iperf3 -c 192.168.1.100 -R |
-w <size> |
TCP 窗口大小 | iperf3 -c 192.168.1.100 -w 1M |
-J |
输出 JSON 格式 | iperf3 -c 192.168.1.100 -J |
-V |
显示版本信息 | iperf3 -V |
基本 TCP 测试(客户端上行,服务端下行)
基本命令:
bash
iperf3 -c 服务器IP
常用参数组合:
bash
iperf3 -c 服务器IP -t 30 -i 1
测试 30 秒 ,每 1 秒 输出一次。
输出示例:
Connecting to host 192.168.1.100, port 5201
[ 4] local 192.168.1.50 port 54321 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 11.3 MBytes 94.6 Mbits/sec 0 1.25 MBytes
[ 4] 1.00-2.00 sec 11.2 MBytes 94.0 Mbits/sec 0 1.25 MBytes
[ 4] 2.00-3.00 sec 11.3 MBytes 94.8 Mbits/sec 0 1.25 MBytes
[ 4] 3.00-4.00 sec 11.2 MBytes 94.1 Mbits/sec 0 1.25 MBytes
[ 4] 4.00-5.00 sec 11.3 MBytes 94.7 Mbits/sec 0 1.25 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-5.00 sec 56.3 MBytes 94.4 Mbits/sec 0 sender
[ 4] 0.00-5.00 sec 56.2 MBytes 94.3 Mbits/sec receiver
iperf Done.
反向测试(客户端下行,服务端上行)
bash
iperf3 -c 服务器IP -R
输出示例:
Connecting to host 192.168.1.100, port 5201
Reverse mode, remote host 192.168.1.100 is sending
[ 4] local 192.168.1.50 port 54322 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 11.4 MBytes 95.6 Mbits/sec
[ 4] 1.00-2.00 sec 11.3 MBytes 94.8 Mbits/sec
...
UDP 测试(指定目标带宽,例如 100M)
bash
iperf3 -c 服务器IP -u -b 100M -t 20
输出示例:
Connecting to host 192.168.1.100, port 5201
[ 4] local 192.168.1.50 port 54323 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 11.9 MBytes 99.8 Mbits/sec 15243
[ 4] 1.00-2.00 sec 11.9 MBytes 99.9 Mbits/sec 15243
[ 4] 2.00-3.00 sec 11.9 MBytes 99.8 Mbits/sec 15243
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-3.00 sec 35.6 MBytes 99.8 Mbits/sec 0.000 ms 0/45729 (0%)
[ 4] Sent 45729 datagrams
并行多流(提升吞吐,需服务端/客户端一致)
bash
iperf3 -c 服务器IP -P 4 -t 20
输出示例:
Connecting to host 192.168.1.100, port 5201
[ 4] local 192.168.1.50 port 54324 connected to 192.168.1.100 port 5201
[ 6] local 192.168.1.50 port 54325 connected to 192.168.1.100 port 5201
[ 8] local 192.168.1.50 port 54326 connected to 192.168.1.100 port 5201
[ 10] local 192.168.1.50 port 54327 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 2.81 MBytes 23.6 Mbits/sec 0 320 KBytes
[ 6] 0.00-1.00 sec 2.81 MBytes 23.6 Mbits/sec 0 320 KBytes
[ 8] 0.00-1.00 sec 2.81 MBytes 23.6 Mbits/sec 0 320 KBytes
[ 10] 0.00-1.00 sec 2.81 MBytes 23.6 Mbits/sec 0 320 KBytes
[SUM] 0.00-1.00 sec 11.2 MBytes 94.4 Mbits/sec 0
...
测试场景对比
| 测试类型 | 命令 | 适用场景 |
|---|---|---|
| 基本 TCP 测试 | iperf3 -c 服务器IP |
快速测试基本带宽 |
| 详细 TCP 测试 | iperf3 -c 服务器IP -t 30 -i 1 |
需要详细统计信息 |
| 反向测试 | iperf3 -c 服务器IP -R |
测试下载带宽 |
| UDP 测试 | iperf3 -c 服务器IP -u -b 100M |
测试 UDP 性能和丢包 |
| 并行多流 | iperf3 -c 服务器IP -P 4 |
测试多连接吞吐量 |
| 双向测试 | iperf3 -c 服务器IP -d |
同时测试上下行 |
| 交互式双向 | iperf3 -c 服务器IP -r |
先测上行再测下行 |
测试结果解读
TCP 测试结果解读
关键指标说明:
| 指标 | 说明 | 示例值 |
|---|---|---|
| Transfer | 传输的数据量 | 56.3 MBytes |
| Bandwidth | 带宽(发送端/接收端) | 94.4 Mbits/sec |
| Retr | 重传次数 | 0 |
| Cwnd | 拥塞窗口大小 | 1.25 MBytes |
结果解读要点:
- sender:发送端观测到的吞吐量
- receiver:接收端观测到的吞吐量
- 正常情况下,sender 和 receiver 的值应该接近
- 如果 sender 明显大于 receiver,可能存在网络丢包或拥塞
UDP 测试结果解读
关键指标说明:
| 指标 | 说明 | 示例值 |
|---|---|---|
| Transfer | 传输的数据量 | 35.6 MBytes |
| Bandwidth | 带宽 | 99.8 Mbits/sec |
| Jitter | 抖动(延迟变化) | 0.000 ms |
| Lost/Total Datagrams | 丢包率 | 0/45729 (0%) |
结果解读要点:
- Jitter(抖动):越小越好,通常 < 1ms 为优秀
- 丢包率:应该接近 0%,如果丢包率高,说明网络不稳定
- UDP 测试可以更好地反映网络质量,因为 UDP 不保证可靠性
性能评估标准
| 网络类型 | 典型带宽 | 延迟要求 | 丢包率要求 |
|---|---|---|---|
| 局域网(千兆) | 900+ Mbits/sec | < 1ms | < 0.1% |
| 局域网(百兆) | 90+ Mbits/sec | < 1ms | < 0.1% |
| 家庭宽带(100M) | 80-95 Mbits/sec | < 20ms | < 0.5% |
| 4G 移动网络 | 10-50 Mbits/sec | < 50ms | < 1% |
| 3G 移动网络 | 1-5 Mbits/sec | < 100ms | < 2% |
常见问题与进阶
端口与连通性
确认服务器监听端口(默认 5201/tcp)已在安全组/防火墙放行;云上环境需同时放通云安全组与系统防火墙。
常见防火墙配置:
firewalld (CentOS/RHEL/Fedora)
bash
sudo firewall-cmd --zone=public --add-port=5201/tcp --permanent
sudo firewall-cmd --reload
ufw (Ubuntu/Debian)
bash
sudo ufw allow 5201/tcp
sudo ufw reload
iptables
bash
sudo iptables -A INPUT -p tcp --dport 5201 -j ACCEPT
sudo iptables-save
云服务器安全组
需要在云服务商控制台配置安全组规则,放行 5201 端口。
连通性测试:
bash
# 测试端口是否开放
telnet 服务器IP 5201
# 或使用 nc (netcat)
nc -zv 服务器IP 5201
结果单位换算
带宽单位换算表:
| 单位 | 换算关系 | 示例 |
|---|---|---|
| Mbits/sec | 1 Mbits/sec = 0.125 MBytes/sec | 100 Mbits/sec = 12.5 MBytes/sec |
| MBytes/sec | 1 MBytes/sec = 8 Mbits/sec | 12.5 MBytes/sec = 100 Mbits/sec |
| Gbits/sec | 1 Gbits/sec = 1000 Mbits/sec | 1 Gbits/sec = 125 MBytes/sec |
快速换算公式:
- Mbits/sec ÷ 8 ≈ MBytes/s
- MBytes/sec × 8 = Mbits/sec
便于与常见下载器显示单位对齐。
双向与并行
交互式双向
bash
iperf3 -c 服务器IP -r
先测上行,再测下行。
同时双向
bash
iperf3 -c 服务器IP -d
多线程
bash
iperf3 -c 服务器IP -P N
N 为并发流数,建议服务端也用相同 -P。
自动化与留存
JSON 报告便于分析
bash
iperf3 -c 服务器IP -t 10 -J > result.json
服务端日志
bash
iperf3 -s --logfile server.log
其他平台客户端
Windows
- 下载 iperf3.exe(从 iperf3 官网)
- 在 CMD 或 PowerShell 中进入 iperf3.exe 所在目录
- 执行测试命令:
bash
iperf3.exe -c 服务器IP
Android
推荐使用以下 APP:
- Magic iPerf:功能完整,支持 iperf3
- Network Signal Info:包含网络测试功能
- Termux:在 Android 上运行完整的 Linux 环境,可直接安装 iperf3
使用步骤:
- 安装 Magic iPerf 等 APP
- 切换到 iperf3 模式
- 输入服务器 IP 和端口
- 选择测试类型(TCP/UDP,上行/下行)
iOS
可以使用 Terminal 类 APP(如 iTerminal、Termius)通过 SSH 连接到服务器进行测试,或使用支持 iperf3 的网络测试 APP。
常见错误及解决方案
| 错误信息 | 可能原因 | 解决方案 |
|---|---|---|
connect failed: Connection refused |
服务器未启动或端口未开放 | 检查服务器是否运行,防火墙是否放行 |
connect failed: No route to host |
网络不通或路由问题 | 检查网络连通性,ping 服务器 IP |
bind failed: Address already in use |
端口被占用 | 更换端口或停止占用端口的进程 |
error - unable to connect to server |
服务器地址错误或服务未启动 | 检查服务器 IP 和端口,确认服务运行 |
error - the server is busy running a test |
服务器正在处理其他测试 | 等待当前测试完成或使用 -1 参数限制连接 |
WARNING: did not receive ack of last datagram after 10 tries |
UDP 测试时网络不稳定 | 检查网络质量,降低测试带宽 |
性能优化建议
1. TCP 窗口大小优化
bash
# 增大 TCP 窗口大小(适用于高带宽网络)
iperf3 -c 服务器IP -w 2M
2. 并行流优化
bash
# 使用多个并行流提升吞吐量
iperf3 -c 服务器IP -P 8
3. 测试时间优化
- 短时间测试(10-30秒):快速评估
- 长时间测试(60-300秒):稳定性和一致性评估
- 建议至少测试 30 秒以上以获得稳定结果
4. 网络环境优化
- 关闭其他占用带宽的应用
- 使用有线网络而非 Wi-Fi(更稳定)
- 在低网络负载时段测试
最佳实践
测试流程建议
-
准备阶段
- 确认服务器和客户端都已安装 iperf3
- 检查防火墙和安全组配置
- 关闭不必要的网络应用
-
基础测试
bash# 快速测试连通性 iperf3 -c 服务器IP -t 10 -
详细测试
bash# 详细测试,记录结果 iperf3 -c 服务器IP -t 60 -i 1 > test_result.txt -
多方向测试
bash# 测试上行 iperf3 -c 服务器IP -t 30 # 测试下行 iperf3 -c 服务器IP -R -t 30 # 测试双向 iperf3 -c 服务器IP -d -t 30 -
UDP 质量测试
bash# UDP 测试网络质量 iperf3 -c 服务器IP -u -b 100M -t 30
自动化测试脚本示例
Linux/macOS 脚本:
bash
#!/bin/bash
SERVER_IP="192.168.1.100"
TEST_DURATION=30
echo "=== iperf3 网络测试报告 ==="
echo "测试时间: $(date)"
echo "服务器: $SERVER_IP"
echo ""
echo "--- TCP 上行测试 ---"
iperf3 -c $SERVER_IP -t $TEST_DURATION -i 1
echo ""
echo "--- TCP 下行测试 ---"
iperf3 -c $SERVER_IP -R -t $TEST_DURATION -i 1
echo ""
echo "--- UDP 测试 ---"
iperf3 -c $SERVER_IP -u -b 100M -t $TEST_DURATION -i 1
echo ""
echo "=== 测试完成 ==="
JSON 格式输出(便于分析):
bash
#!/bin/bash
SERVER_IP="192.168.1.100"
DATE=$(date +%Y%m%d_%H%M%S)
# 生成 JSON 报告
iperf3 -c $SERVER_IP -t 30 -J > "iperf3_report_${DATE}.json"
# 也可以同时保存文本格式
iperf3 -c $SERVER_IP -t 30 > "iperf3_report_${DATE}.txt"
监控和日志
服务器端日志配置:
bash
# 启动带日志的服务器
iperf3 -s --logfile /var/log/iperf3.log
# 使用 logrotate 管理日志
# /etc/logrotate.d/iperf3
/var/log/iperf3.log {
daily
rotate 7
compress
missingok
notifempty
}
安全建议总结
- 不要长期暴露在公网:测试完成后及时关闭服务
- 使用非默认端口:避免使用 5201 默认端口
- 限制客户端 IP :使用
-c参数限制允许连接的客户端 - 配合防火墙:使用防火墙规则限制访问来源
- 定期更新:保持 iperf3 版本更新,修复安全漏洞
总结
iperf3 是一个功能强大的网络性能测试工具,通过简单的命令即可搭建测速服务。在实际使用中,建议:
- 安全第一:不要长期暴露在公网,使用防火墙限制访问
- 参数调优:根据实际需求选择合适的测试参数(时间、并发数等)
- 结果分析:关注 sender 和 receiver 的差异,UDP 测试时注意丢包率
- 多平台支持:iperf3 支持多种平台,可以灵活选择客户端进行测试
- 定期测试:建立定期测试机制,监控网络性能变化
- 文档记录:保存测试结果,建立性能基线,便于对比分析
通过合理使用 iperf3,可以准确评估网络性能,为网络优化提供数据支持。无论是网络故障排查、性能评估还是容量规划,iperf3 都是一个不可或缺的工具。
相关资源
- 官方文档 :https://iperf.fr/iperf-doc.php
- GitHub 仓库 :https://github.com/esnet/iperf
- 下载地址 :https://iperf.fr/iperf-download.php