网络测速 (iperf3)
专业的网络带宽测试工具,支持 TCP/UDP 测试,可测量吞吐量、抖动、丢包率等关键指标。iperf3 下载地址
speedtest-cli
使用 speedtest-cli 快速测速
shell
# 方式一:全局安装
# 使用 yum 从 EPEL 仓库安装 speedtest-cli。
yum install speedtest-cli
# 安装完成后,运行 speedtest-cli 命令测试网络速度(耐心等待,一般需要两三分钟)
speedtest-cli
# 方式二:非全局安装(使用 git 拉取源码)
# 安装 git(如已安装忽略该命令)
yum install git
# 克隆 speedtest-cli 仓库到本地
git clone https://github.com/sivel/speedtest-cli.git
# 进入 speedtest-cli 目录
cd speedtest-cli
# 运行 speedtest-cli 脚本进行测试(耐心等待,一般需要两三分钟)
./speedtest.pyiperf3
测试服务端与客户端带宽,注意参数区分大小写
主要测量指标
- 带宽 (Bandwidth):
- 最核心的指标,指网络路径上数据传输的速率。
- 单位:iperf3 默认报告bps
- bps (bits per second)
- Kbps (Kilobits per second)
- Mbps (Megabits per second)
- Gbps (Gigabits per second)
- 类型:
- 单向带宽 (Sender to Receiver): 客户端到服务器或服务器到客户端的传输速率(取决于测试模式)。
- 双向带宽 (Bi-directional): 同时测量两个方向的总带宽(使用 -d 或 -w 参数)。
- 报告形式: 发送端带宽 (客户端输出) 和 接收端带宽 (服务器输出)。对于理想 TCP 测试,两者应非常接近。UDP 测试中接收端带宽更关键(反映实际送达的速率)。
- 抖动(Jitter):
- 指连续数据包到达时间间隔的变化程度。对于实时应用(如 VoIP, 视频会议)至关重要。
- 计算方式: iperf3 计算包到达时间间隔与理论间隔的差值。
- 单位: 毫秒 (ms)。值越低越好。
- 丢包率 (Packet Loss):
- 在传输过程中丢失的数据包占总发送包数的百分比。主要出现在 UDP 测试或拥塞严重的 TCP 测试中。TCP 本身会重传丢失包,但重传会显著降低有效带宽。
- 报告形式:对于 UDP 测试,在客户端和服务器报告中有
% Lost的显示。对于 TCP,iperf3 的默认报告不直接显示丢包率,但可以通过重传次数(Retr)间接推断拥塞情况(-i报告间隔显示更直观)。
- 往返时间 (RTT):
- 数据包从发送方发出到收到接收方确认的总时间。
- 在 iperf3 报告中的体现:
- TCP 测试: iperf3 会报告一个加权平均值
RTT(在客户端报告的连接细节部分)。 - UDP 测试: 不会直接报告 RTT。
- TCP 测试: iperf3 会报告一个加权平均值
- 单位: 毫秒 (ms)。
- 缓冲区大小/窗口大小 (Buffer/Window Size):
- 影响 TCP 吞吐量的关键参数。
iperf3客户端会报告测试中使用的Receiver Window Size(由操作系统和可能的手动设置-w决定)。优化窗口大小对于长距离高带宽链路非常重要。
- 影响 TCP 吞吐量的关键参数。
服务端与客户端通用参数
| 参数 | 功能说明 | 示例 |
|---|---|---|
-p | 指定端口号 | -p 5201 |
-f | 设置报告单位(k/K/m/M) | -f K(KBytes) |
-i | 报告间隔时间(秒) | -i 1 |
-t | 测试时长(秒) | -t 10 |
-u | 使用UDP协议 | -u -b 100M |
-b | [K M G]:测试指定目标带宽(UDP必填) | -b 100M、-b 1G |
-P | 多线程,使用并行流 (多个 TCP 连接)。 | -P 4 |
-w | [K M]: 设置 TCP 窗口大小/套接字缓冲区大小 | -w 256K, -w 2M |
-B | 绑定指定网卡 | -B eth0 |
-J | JSON格式输出 | -J > result.json |
服务端专用参数
| 参数 | 功能说明 |
|---|---|
-s | 启动服务端模式 |
-D | 后台守护进程运行 |
-1 | 仅接受1次测试后退出 |
-I | 指定PID文件路径 |
客户端专用参数
| 参数 | 功能说明 | 示例 |
|---|---|---|
-c | 以客户端模式运行,指定服务器IP | -c 192.168.1.1 |
-R | 反转模式。 默认客户端发送数据到服务器。 | 客户端变成接收者,服务器变成发送者。 用于测试反向带宽。 |
-n | 指定传输数据量 | -n 1G |
-l | 设置缓冲区大小 | -l 64K |
-C | 兼容旧版本协议 |
常用测试命令
sh
# 服务端
iperf3 -s -p 5201
# 客户端
iperf3 -c 192.168.1.1 -t 10 -i 1 # 基础TCP带宽测试
iperf3 -u -c 192.168.1.1 -b 200M -t 20 -l 128K # UDP丢包测试
iperf3 -c 192.168.1.1 -P 8 -t 30 -w 1M # 多线程吞吐测试
iperf3 -c 192.168.1.1 -R -t 10 # 反向测试(服务端发送)sh
# TCP 示例
# 客户端发送
[root@iZbp19gu5sf48pg1v9ehcrZ ~]# iperf3 -c 192.168.196.176 -i 1 -t 5 -p 8080 -f M
Connecting to host 192.168.196.176, port 8080
[ 4] local 192.168.196.122 port 34068 connected to 192.168.196.176 port 8080
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 1.90 MBytes 1.90 MBytes/sec 2 118 KBytes
[ 4] 1.00-2.00 sec 2.29 MBytes 2.29 MBytes/sec 0 142 KBytes
[ 4] 2.00-3.00 sec 2.72 MBytes 2.72 MBytes/sec 0 166 KBytes
[ 4] 3.00-4.00 sec 2.26 MBytes 2.26 MBytes/sec 4 107 KBytes
[ 4] 4.00-5.00 sec 2.53 MBytes 2.53 MBytes/sec 0 137 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-5.00 sec 11.7 MBytes 2.34 MBytes/sec 6 sender
[ 4] 0.00-5.00 sec 11.2 MBytes 2.25 MBytes/sec receiver
iperf Done.
# 服务端发送(反向)
[root@iZbp19gu5sf48pg1v9ehcrZ ~]# iperf3 -c 192.168.196.176 -i 1 -t 5 -p 8080 -f M -R
Connecting to host 192.168.196.176, port 8080
Reverse mode, remote host 192.168.196.176 is sending
[ 4] local 192.168.196.122 port 34094 connected to 192.168.196.176 port 8080
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 2.03 MBytes 2.03 MBytes/sec
[ 4] 1.00-2.00 sec 2.79 MBytes 2.79 MBytes/sec
[ 4] 2.00-3.00 sec 3.57 MBytes 3.57 MBytes/sec
[ 4] 3.00-4.00 sec 3.24 MBytes 3.24 MBytes/sec
[ 4] 4.00-5.00 sec 3.06 MBytes 3.06 MBytes/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-5.00 sec 14.9 MBytes 2.97 MBytes/sec sender
[ 4] 0.00-5.00 sec 14.9 MBytes 2.97 MBytes/sec receiver
iperf Done.
# 输出解释
ID: 线程标识符,多线程测试时区分不同数据流
Interval: 测试时间范围(1.00-2.00 sec代表1到2秒之间)
Transfer: 时间范围内传输的数据总量(单位GBytes或MBytes) 2.62 MBytes = 2.62 MB (1 MB = 1,048,576 字节)
Bandwidth: 核心性能指标,时间范围的平均带宽(Mbits/sec) 21.9 Mbits/sec ÷ 8 ≈ 2.74 MB/s)
Retr: 关键指标,重传数据包数量;0代表TCP该时段没有重传,网络良好;非零代表可能存在网络阻塞或丢包
Cwnd: TCP拥塞窗口大小;动态调整以优化吞吐量;窗口越大,允许未确认的数据包越多,带宽利用率通常越高(单位通常是 KBytes)
- - - - - - - - - - - - - - - - - - - - - - - - -
sender: 发送者
receiver: 接收者TCP 测试总结
- 发送者
Transfer: 发送端在整个测试期间发送的总数据量。Bitrate: 发送端的平均发送速率。Retr: 整个测试期间的总重传次数。这是判断测试过程中是否存在丢包(导致重传)的关键指标。
- 接受者
Transfer: 接收端确认收到的总数据量 (应与发送端的Transfer非常接近)。Bitrate: 接收端的平均接收速率。这是测得的有效网络吞吐量 (Available Bandwidth)。它可能略低于发送端速率(协议开销、接收端处理能力)。
sh
# UDP 示例
# 客户端发送
[root@iZbp19gu5sf48pg1v9ehcrZ ~]# iperf3 -c 192.168.196.176 -i 1 -t 5 -p 8080 -f M -u -b 1M
Connecting to host 192.168.196.176, port 8080
[ 4] local 192.168.196.122 port 37181 connected to 192.168.196.176 port 8080
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 110 KBytes 0.11 MBytes/sec 41
[ 4] 1.00-2.00 sec 123 KBytes 0.12 MBytes/sec 46
[ 4] 2.00-3.00 sec 121 KBytes 0.12 MBytes/sec 45
[ 4] 3.00-4.00 sec 123 KBytes 0.12 MBytes/sec 46
[ 4] 4.00-5.00 sec 121 KBytes 0.12 MBytes/sec 45
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-5.00 sec 598 KBytes 0.12 MBytes/sec 1.259 ms 1/223 (0.45%)
[ 4] Sent 223 datagrams
iperf Done.
# 服务端发送(反向)
[root@iZbp19gu5sf48pg1v9ehcrZ ~]# iperf3 -c 192.168.196.176 -i 1 -t 5 -p 8080 -f M -u -b 1M -R
Connecting to host 192.168.196.176, port 8080
Reverse mode, remote host 192.168.196.176 is sending
[ 4] local 192.168.196.122 port 59237 connected to 192.168.196.176 port 8080
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-1.00 sec 123 KBytes 0.12 MBytes/sec 6026573535.603 ms 0/46 (0%)
[ 4] 1.00-2.00 sec 123 KBytes 0.12 MBytes/sec 309563099.045 ms 0/46 (0%)
[ 4] 2.00-3.00 sec 121 KBytes 0.12 MBytes/sec 16961209.135 ms 0/45 (0%)
[ 4] 3.00-4.00 sec 123 KBytes 0.12 MBytes/sec 871241.936 ms 0/46 (0%)
[ 4] 4.00-5.00 sec 121 KBytes 0.12 MBytes/sec 47740.318 ms 0/45 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-5.00 sec 615 KBytes 0.12 MBytes/sec 44756.851 ms 0/229 (0%)
[ 4] Sent 229 datagrams
iperf Done.
# 输出解释
ID: 线程标识符,多线程测试时区分不同数据流
Interval: 测试时间范围(1.00-2.00 sec代表1到2秒之间)
Transfer: 时间范围内传输的数据总量(单位GBytes或MBytes) 2.62 MBytes = 2.62 MB (1 MB = 1,048,576 字节)
Bandwidth:核心性能指标,时间范围的平均带宽(Mbits/sec) 21.9 Mbits/sec ÷ 8 ≈ 2.74 MB/s)
Jitter: 整个测试期间的平均抖动 (ms)。
Total Datagrams:该间隔内发送的数据包数量。
Lost/Total Datagrams: 总丢失的数据包数量 / 总预期收到的数据包数量 (来自 -b 参数的速率和间隔)。以及丢包百分比 (% Lost)。这是 UDP 测试的核心可靠性指标。UDP 测试总结
- 发送端
- 报告发送的总数据量、发送端的平均发送速率 (
Bitrate)、总发送的数据包数量 (Datagrams)。没有抖动和丢包统计 (发送端不知道接收情况)。
- 报告发送的总数据量、发送端的平均发送速率 (
- 接收端(关键)
Transfer: 接收端实际收到的总数据量。Bitrate: 接收端的平均有效接收速率 (实际可用带宽)。Jitter: 整个测试期间的平均抖动 (ms)。Lost/Total Datagrams: 总丢失的数据包数量 / 总预期收到的数据包数量 (来自-b参数的速率和间隔)。以及丢包百分比 (% Lost)。这是 UDP 测试的核心可靠性指标。
常见问题与技巧
- 连接失败 (
Connection refused):- 服务器未运行:检查服务器端
iperf3 -s是否已启动。 - 端口错误:检查
-p参数是否在两端指定且一致。 - 防火墙阻止:最常见原因! 检查服务器端和沿途设备的防火墙规则,确保允许流量通过
iperf3使用的端口 (TCP 5201 或自定义的,UDP 测试也需对应规则)。 - 服务器地址错误。
- 服务器未运行:检查服务器端
- 带宽低于预期 (TCP):
- 重传 (Retr > 0): 排查拥塞(使用 -t 延长测试时间观察)、物理链路问题(光纤/网线/SFP模块)、设备(交换机/防火墙/路由器)性能瓶颈(CPU、队列、ACL)、缓冲区过小(尝试增大 -w 如 -w 2M,尤其是在长距离高带宽链路)。
- 拥塞窗口限制:对于长距离(高延迟)链路,默认 TCP 窗口可能太小(参考 Cwnd 值)。使用 -w 增大窗口大小(需要同时调大操作系统 TCP 缓冲区 net.core.rmem_max/wmem_max)。
- 拥塞控制算法:尝试不同的算法 -C bbr (需内核支持)。
- CPU 瓶颈:检查客户端或服务器端 CPU 是否满载(使用 top, htop 等工具)。
- 路径中间设备限制:防火墙策略、QoS 限速、较低端交换机的背板带宽限制。
- 网卡协商速率:检查 ethtool <接口> 确认协商速率是期望值 (1Gbps/10Gbps)。
- 跨物理设备/交换机测试性能:不同端口速率、交换机交换能力、VLAN 配置都可能有影响。
- 并行流:尝试使用 -P 4 或 -P 8 启动多个并发流。
- 带宽低于预期 (UDP):
- 查看接收端报告的丢包率和带宽。
- 如果丢包率高 (
% Lost),说明网络无法承载-b指定的发送速率。降低-b值。 - 同样排查网络拥塞、设备性能、CPU 瓶颈。
- Windows 防火墙: Windows 防火墙默认阻止入站
iperf3。运行服务器端时需添加入站规则允许iperf3.exe或指定端口。 - 连接重置 (
Connection reset by peer): 服务器或中间设备(如防火墙)提前关闭了连接。尝试使用-t缩短测试时间,检查防火墙超时设置。 - 获取服务器报告: 客户端测试完成后,服务器会输出报告。若想让服务器将报告保存到文件,使用
--logfile <filename>参数启动服务器 (iperf3 -s --logfile ~/iperf.log)。 - 使用 JSON 输出: 使用
-J参数可以让客户端输出 JSON 格式报告,便于其他程序解析和可视化 (iperf3 -c <server> -J > result.json)。 - 可视化工具: iperf3 本身是命令行工具。第三方工具如
jperf(图形前端),gperftools(可配合图形化),Flent(更复杂的网络测试套件,集成 iperf3) 可以帮助可视化结果和运行自动化测试。 - 测试双向带宽: 使用
-d(双向同时) 或-R(先测一个方向,再自动反转测试另一个方向)。 - 避免对生产网络的冲击: iperf3 设计用于压测,会占满带宽。务必在维护窗口或非关键业务网络中进行测试。UDP 测试尤其要注意,无节制的发送可能导致网络拥塞。