目录
一、iperf3 是什么?
二、为什么需要 iperf3?
三、iperf3 的主要测量指标
四、安装 iperf3
五、基础使用模式(命令行参数示例)
1. 启动 Server 端 (必须)
2. 启动 Client 端进行测试 (最常见)
基本 TCP 测试 (10秒)
基础参数
UDP 测试
绑定特定接口
设置 TOS/DSCP
六、解读报告输出
TCP 测试 (客户端输出示例)
UDP 测试 (客户端输出示例)
服务器端输出
七、常见问题 & 技巧
总结
这次来详细讲解一下 iperf3 这款强大的网络性能测量工具。
一、iperf3 是什么?
- 定位: iperf3 是一个开源的、跨平台的命令行工具,专门用于测量网络带宽、延迟抖动和数据包丢失等网络性能指标。
- 核心功能: 它通过在两个联网设备(通常称为客户端和服务器)之间创建大量的数据流(TCP或UDP),并对这些数据流的传输进行计时和统计,从而计算出可用的最大网络带宽、延迟变化(抖动)和数据包丢失率。
- 工作原理:
- 在一台设备上运行
iperf3 -s
启动服务器端,监听特定端口(默认5201)。 - 在另一台设备上运行
iperf3 -c <服务器IP地址>
启动客户端,向服务器发起连接。 - 客户端默认发送 TCP 数据流到服务器(持续时间默认10秒),服务器接收并确认。
- 测试结束后,两端(尤其是客户端)会输出详细的性能报告,包括带宽、传输数据量、往返时间、抖动、丢包等。
- 在一台设备上运行
- 与前代的关系: iperf3 是 iperf(目前通常指 iperf2)的一个重写版本。它设计得更轻量、库化(libiperf),拥有更简洁的代码库和更少的历史包袱。虽然在基本功能上相似,但一些高级特性(如特定拥塞控制算法)和参数可能在不同版本间有所不同。
二、为什么需要 iperf3?
- 验证理论带宽: 你的链路是 1Gbps 的?用 iperf3 测一下实际能达到多少,排除中间设备(交换机、防火墙、路由器)或配置瓶颈。
- 排查网络瓶颈: 当网络感觉慢时,通过多点测试(如:客户端->核心交换机->目标服务器)定位瓶颈位置。
- 评估设备性能: 测试路由器、防火墙、VPN 隧道或负载均衡器的吞吐量和延迟影响。
- 网络设备选型: 购买新交换机或防火墙前,用 iperf3 测试其在不同负载下的表现。
- 应用性能调优: 评估网络是否能满足特定应用(如视频会议、备份、数据库同步)的带宽和延迟要求。
- 有线 vs 无线: 比较有线连接和 Wi-Fi 连接的实际性能差异。
- 云服务性能: 测试云虚拟机之间、虚拟机到本地数据中心、或者不同云区域之间的网络性能。
- 拥塞控制算法测试: 测试不同 TCP 拥塞控制算法(如 CUBIC, BBR)在实际网络环境下的表现。
三、iperf3 的主要测量指标
-
带宽 (Bandwidth):
- 最核心的指标,指网络路径上数据传输的速率。
- 单位:
bits per second
(bps),Gigabits per second
(Gbps),Megabits per second
(Mbps),Kilobits per second
(Kbps)。iperf3
默认报告bits 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 吞吐量的关键参数。
四、安装 iperf3
iperf3 在主流操作系统上安装都非常简单:
- Linux (Debian/Ubuntu):
sudo apt-get install iperf3
- Linux (RHEL/CentOS):
sudo yum install iperf3
(可能需要启用 EPEL 仓库) 或sudo dnf install iperf3
- macOS:
- 使用 Homebrew (推荐):
brew install iperf3
- 或从官网下载源代码编译。
- 使用 Homebrew (推荐):
- Windows:
- 官方提供了预编译的二进制文件。从官网下载压缩包,解压后即可运行
iperf3.exe
(通常在命令提示符或 PowerShell 中运行,注意路径)。
- 官方提供了预编译的二进制文件。从官网下载压缩包,解压后即可运行
- FreeBSD:
pkg install iperf3
五、基础使用模式(命令行参数示例)
1. 启动 Server 端 (必须)
iperf3 -s
-s
: 以服务器模式运行。- 默认监听 TCP 端口 5201。使用
-p <端口号>
指定其他端口 (e.g.,iperf3 -s -p 5202
)。 - 重要: 确保防火墙允许
iperf3
的流量通过 (TCP/UDP 的相应端口)。
2. 启动 Client 端进行测试 (最常见)
基本 TCP 测试 (10秒)
iperf3 -c <server_ip_address>
-c <server_ip_address>
: 以客户端模式运行,连接到指定 IP 地址的服务器。
基础参数
-t <秒数>
: 指定测试持续时间 (e.g.,-t 30
运行30秒)。-i <秒数>
: 指定报告间隔 (e.g.,-i 1
每秒输出一次进度报告)。-P <线程数>
: 使用并行流 (多个 TCP 连接)。这对充分利用高带宽链路或测试负载均衡很有用 (e.g.,-P 4
)。-R
: 反转模式。默认客户端发送数据到服务器。使用-R
后,客户端变成接收者,服务器变成发送者。用于测试反向带宽。-d
: 同时进行双向 (duplex) 测试。客户端既发送也接收数据。-w <size>[KM]
: 设置 TCP 窗口大小/套接字缓冲区大小 (e.g.,-w 256K
,-w 2M
)。对 WAN 优化很重要。
UDP 测试
iperf3 -c <server_ip> -u -b <bandwidth>
-u
: 使用 UDP 而不是 TCP。-b <bandwidth>[KM]
: 必须为 UDP 测试指定目标带宽。如-b 100M
(100 Mbps),-b 1G
(1 Gbps)。- UDP 测试的报告会包含
Jitter
和Lost/% Lost
信息。
绑定特定接口
iperf3 -c <server_ip> -B <local_interface_ip>
- 当设备有多个网卡或 IP 地址时有用。
设置 TOS/DSCP
iperf3 -c <server_ip> -S 0x<hex_value>
- 用于测试 QoS 策略效果。
六、解读报告输出
TCP 测试 (客户端输出示例)
Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.50 port 56032 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 134 MBytes 1.12 Gbits/sec 0 747 KBytes
[ 5] 1.00-2.00 sec 140 MBytes 1.17 Gbits/sec 0 908 KBytes
[ 5] 2.00-3.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 3.00-4.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 4.00-5.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 5.00-6.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 6.00-7.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 7.00-8.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 8.00-9.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 9.00-10.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.37 GBytes 1.17 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.37 GBytes 1.17 Gbits/sec receiveriperf Done.
- ID: 连接/线程标识符。
- Interval: 报告的时间区间。
- Transfer: 该间隔内传输的数据量。
- Bitrate: 该间隔内的平均带宽速率 (
[ ]
内是发送端速率)。 - Retr: 该间隔内发生的 TCP 重传次数。关键指标! 多次重传 (>0) 通常表明存在拥塞、链路质量差、缓冲区不足或防火墙策略问题。是 TCP 吞吐量低于预期的首要排查点。
- Cwnd: 报告间隔结束时的拥塞窗口大小估计值 (单位通常是 KBytes)。
- Sender Summary:
Transfer
: 发送端在整个测试期间发送的总数据量。Bitrate
: 发送端的平均发送速率。Retr
: 整个测试期间的总重传次数。这是判断测试过程中是否存在丢包(导致重传)的关键指标。
- Receiver Summary:
Transfer
: 接收端确认收到的总数据量 (应与发送端的Transfer
非常接近)。Bitrate
: 接收端的平均接收速率。这是测得的有效网络吞吐量 (Available Bandwidth)。它可能略低于发送端速率(协议开销、接收端处理能力)。
UDP 测试 (客户端输出示例)
Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.50 port 52465 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 1.00-2.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 2.00-3.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 3.00-4.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 4.00-5.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 5.00-6.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 6.00-7.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 7.00-8.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 8.00-9.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 9.00-10.00 sec 128 KBytes 1.05 Mbits/sec 91
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 1.25 MBytes 1.05 Mbits/sec 0.000 ms 0/910 (0%) sender
[ 5] 0.00-10.00 sec 1.25 MBytes 1.05 Mbits/sec 0.027 ms 0/910 (0%) receiver
- ID, Interval, Transfer, Bitrate: 含义与 TCP 类似,但
Bitrate
指的是客户端 UDP 发送的速率 (受-b
参数控制)。 - Total Datagrams: 该间隔内发送的数据包数量。
- Sender Summary:
- 报告发送的总数据量、发送端的平均发送速率 (
Bitrate
)、总发送的数据包数量 (Datagrams
)。没有抖动和丢包统计 (发送端不知道接收情况)。
- 报告发送的总数据量、发送端的平均发送速率 (
- Receiver Summary (最关键):
Transfer
: 接收端实际收到的总数据量。Bitrate
: 接收端的平均有效接收速率 (实际可用带宽)。Jitter
: 整个测试期间的平均抖动 (ms)。Lost/Total Datagrams
: 总丢失的数据包数量 / 总预期收到的数据包数量 (来自-b
参数的速率和间隔)。以及丢包百分比 (% Lost
)。这是 UDP 测试的核心可靠性指标。
服务器端输出
服务器端通常也会输出报告(在测试结束后或使用 --logfile
参数时保存),内容与客户端接收方报告类似(显示接收了哪些数据)。
七、常见问题 & 技巧
-
连接失败 (
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 测试尤其要注意,无节制的发送可能导致网络拥塞。
总结
iperf3 是网络工程师和系统管理员必备的、轻量而强大的网络性能诊断工具。通过理解其核心概念、正确安装使用(尤其注意防火墙)、仔细解读报告(特别是带宽、重传、抖动、丢包等指标),并掌握基本的故障排查技巧,你可以有效地利用 iperf3 来测量带宽潜力、定位瓶颈、验证配置和评估网络基础设施的性能,为网络优化和问题解决提供坚实的数据支撑。