简介
iperf3
是一款广泛使用的网络测量工具,用于评估主机之间的带宽、延迟、丢包率等指标。与早期的 iperf
相比,iperf3
在性能、输出格式和可扩展性上都有所改进,支持 TCP 和 UDP 测试,可生成 JSON 格式报告,便于二次处理。本文将分别介绍在 Debian、Ubuntu 和 CentOS 三个常见 Linux 发行版下的安装方法,并结合典型使用场景,给出详尽的命令示例和参数说明,帮助读者快速上手 iperf3
。
1. 安装 iperf3
1.1 Debian / Ubuntu 系列
1.1.1 使用 apt 官方仓库安装(推荐)
在 Debian、Ubuntu 官方软件源中通常已经包含 iperf3
包,安装步骤非常简单:
# 更新本地包索引(建议先执行)
sudo apt-get update -y
# 安装 iperf3
sudo apt-get install -y iperf3
# 验证安装
iperf3 --version
说明:
iperf3 --version
会输出类似iperf 3.x.x
的版本号,若能正常显示,则说明安装成功。如果你需要在脚本里无交互地安装,可加上
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq iperf3
1.1.2 源码编译安装(可选)
如果需要最新版或者官方仓库版本过旧,可以选择从源码编译。适用于需要自定义编译选项或目标系统仓库并未收录新版 iperf3
的情况。
安装编译依赖:
sudo apt-get update -y sudo apt-get install -y build-essential git autotools-dev automake libtool
下载并编译:
# 克隆官方仓库 git clone https://github.com/esnet/iperf.git cd iperf # 切换到 v3 分支(如果想要指定最新版,请自行查询官方发布版本标签) git checkout v3.11 # 生成配置脚本 ./configure make -j$(nproc) # 安装到 /usr/local/bin sudo make install # 确认安装:应该能看到 /usr/local/bin/iperf3 /usr/local/bin/iperf3 --version
添加到系统 PATH(如果必要):
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
注意事项:
- 源码编译需要占用一定时间,请确保网络通畅、依赖齐全。
- 默认会安装到
/usr/local/bin/iperf3
,若与系统仓库版本冲突,可调整--prefix
参数进行自定义路径安装。
1.2 CentOS / RHEL 系列
不同 CentOS 版本下,iperf3
所在仓库略有差异。以 CentOS 7/8 为例说明。
1.2.1 CentOS 7
CentOS 7 默认官方仓库中并不包含 iperf3
,需要借助 EPEL(Extra Packages for Enterprise Linux)仓库:
安装 EPEL 仓库
sudo yum install -y epel-release # 验证 EPEL 是否启用 yum repolist | grep epel
安装 iperf3
sudo yum install -y iperf3
验证安装
iperf3 --version
1.2.2 CentOS 8 及以后(包括 Rocky Linux、AlmaLinux 等 RHEL 衍生版)
在 CentOS 8 或 RHEL 8+ 系统中,同样可以通过 EPEL 仓库安装,或直接使用 dnf:
启用 EPEL
sudo dnf install -y epel-release
安装 iperf3
sudo dnf install -y iperf3
验证安装
iperf3 --version
1.2.3 源码编译安装(可选)
与 Debian / Ubuntu 类似,如果需要自定义编译或安装最新版,也可以选择源码方式:
# 安装依赖(以 CentOS 7 为例)
sudo yum groupinstall -y "Development Tools"
sudo yum install -y git autotools-dev automake libtool
# 克隆 iperf3 源码
git clone https://github.com/esnet/iperf.git
cd iperf
git checkout v3.11
# 编译:先生成配置脚本,再编译安装
./configure
make -j$(nproc)
sudo make install
# 确认 /usr/local/bin/iperf3
/usr/local/bin/iperf3 --version
注意:
- CentOS 系统需安装
Development Tools
以及git
、autoconf
、automake
、libtool
等包。- 安装后可通过
/usr/local/bin/iperf3
或直接iperf3
(若路径正确)进行调用。
2. 基本使用方法
安装成功后,iperf3
主要分为 服务器模式(Server)和 客户端模式(Client)。常见用法是在一台机器上以服务器模式运行,另一台机器上以客户端模式向服务器发起测试。下面依次介绍常见场景下的使用方式与参数。
2.1 启动服务器模式
在被测端或接收端执行:
# 最简单的服务器模式
iperf3 -s
-s
:指定以服务器(server)模式启动,监听端口默认为5201
。如果想后台运行且输出日志,可使用
nohup
或&
:nohup iperf3 -s > /var/log/iperf3-server.log 2>&1 &
如果目标端口需要自定义(例如 5678),则:
iperf3 -s -p 5678
查看所有可选项:
iperf3 --help
常用选项汇总(服务端)
-s
:以服务器模式启动。-p <port>
:指定监听端口,默认 5201。-1
:接受一个客户端连接后自动退出(一次性测试模式)。-D
:后台运行(daemonize)。--logfile <file>
:将日志输出到指定文件(只在某些发行版编译时支持)。
2.2 启动客户端模式
在发起测试的客户端机器上执行:
iperf3 -c <server_ip>
-c
后跟服务器 IP 地址或主机名,默认为 TCP 模式,测试时长 10 秒。完整示例:
iperf3 -c 192.168.1.100
运行后会输出如下类似信息:
Connecting to host 192.168.1.100, port 5201 [ 4] local 192.168.1.101 port 50000 connected to 192.168.1.100 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec sender [ 4] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec receiver
常用选项(客户端)
-c <server>
:指定服务器地址,必选。-p <port>
:与服务器一致的端口。-t <seconds>
:测试持续时间(秒),默认为 10 秒。-i <interval>
:报告输出的间隔时间(秒),默认 1 秒。-P <n>
:并发多个流(parallel streams),例如-P 4
表示同时开启 4 路 TCP 流。-R
:反向测试(reverse),即服务器端向客户端发送数据,用于测试下行带宽。-b <bandwidth>
:仅对 UDP 模式有效,指定带宽上限,例如-b 100M
限速测试为 100 Mbps。-u
:指定使用 UDP 模式(默认 TCP)。-J
:以 JSON 格式输出结果,便于脚本或程序解析。-f <format>
:指定报告中的单位,m
为 Mbps(兆比特/秒),g
为 Gbps,M
为 MB/s(兆字节/秒)等。
2.3 示例:TCP 测试
在接收端(Server)启动:
# 监听默认端口 5201 iperf3 -s # 或指定端口 6000 iperf3 -s -p 6000
在发送端(Client)发起:
# 连接到 192.168.1.100:5201,测试时长 10s iperf3 -c 192.168.1.100 # 使用并发 4 路流,时长 30s,端口 6000 iperf3 -c 192.168.1.100 -p 6000 -t 30 -P 4
客户端输出示例(并发 4 路):
Connecting to host 192.168.1.100, port 6000 [ 5] local 192.168.1.101 port 52000 connected to 192.168.1.100 port 6000 [ ID] Interval Transfer Bandwidth [ 5] 0.00-1.00 sec 120 MBytes 1.01 Gbits/sec sender [ 5] 1.00-2.00 sec 118 MBytes 989 Mbits/sec sender ... [SUM] 0.00-30.00 sec 3.41 GBytes 976 Mbits/sec sender [SUM] 0.00-30.00 sec 3.41 GBytes 976 Mbits/sec receiver
输出字段说明
- Interval:累计时间区间(秒),例如
0.00-1.00 sec
表示第 1 秒的统计。 - Transfer:该时间区间内实际传输的数据量(Bytes/MB/GBytes)。
- Bandwidth:该时间区间的吞吐率。例如
1.01 Gbits/sec
。 - sender/receiver:分别表示发送端和接收端的视角,有时候两者略有差异,但一般相差较小。
3. 进阶应用
在网络测试中,除了最简单的 TCP 带宽测试,还可以使用 iperf3
做以下几种常见测试。
3.1 UDP 测试
默认 iperf3
使用 TCP。如需测试 UDP 性能(常用于实时业务对延迟和丢包敏感场景),可以在客户端添加 -u
参数并指定发送速率:
在服务器端(Server)启动:
iperf3 -s
在客户端(Client)执行 UDP 测试:
# 向服务器 192.168.1.100:5201 以 50 Mbps 发送 UDP 流,测试 10 秒 iperf3 -c 192.168.1.100 -u -b 50M -t 10
输出示例(客户端):
Connecting to host 192.168.1.100, port 5201 [ 4] local 192.168.1.101 port 50002 connected to 192.168.1.100 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-10.00 sec 60.0 MBytes 50.3 Mbits/sec 4375 [ 4] 0.00-10.00 sec 0.054 ms 0/4375 (0%)
其中,
Total Datagrams
表示总共发送的 UDP 包数、丢包数及丢包率。
注意:
- UDP 测试时若发送速率过高,网络可能丢包严重。务必根据网络带宽合理设定
-b
。iperf3
输出会列出丢包率(例如0/4375 (0%)
),利于评估网络稳定性。
3.2 双向测试(Reverse)
默认情况下,客户端向服务器发送数据并统计带宽。如果想从服务器向客户端发送数据,则使用 -R
(reverse)参数:
# 在服务器 uptime 视角启动
iperf3 -s
# 在客户端执行反向测试(即服务器端发流给客户端)
iperf3 -c 192.168.1.100 -R
这会让服务器往客户端方向发送数据,衡量服务器上行带宽。输出中会标记 receiver
与 sender
。
3.3 指定端口与多流并发
指定端口:若碰到防火墙或特定端口限制,可以用
-p
参数指定监听和连接端口。# 服务器:监听 7000 端口 iperf3 -s -p 7000 # 客户端:连接到 192.168.1.100 的 7000 端口 iperf3 -c 192.168.1.100 -p 7000
并发流数:
-P
参数用于并发多流,例如-P 4
会同时开 4 条 TCP 流进行测试,有助于逼近链路极限。iperf3 -c 192.168.1.100 -P 4 -t 15
3.4 进阶常用选项
参数 | 含义 |
---|---|
-i <interval> |
指定统计报告输出间隔,默认为 1 秒;可用于实时观察带宽变化 |
-f [m/M/g/G] |
指定带宽/传输量显示格式:m =Mbps,M =MB/s,g =Gbps,G =GB/s |
-w <bytes> |
TCP 窗口大小(socket buffer size),可用于微调吞吐性能 |
-l <length> |
设置 TCP/UDP 缓冲区长度(pkt size),对于 UDP 可控制包大小 |
-n <bytes> |
指定要传输的数据总量后结束(如果想测试固定数据量,可使用此选项) |
--logfile |
将所有输出写入指定日志文件(部分发行版编译时支持) |
--json / -J |
以 JSON 格式输出结果,便于脚本或二次开发解析 |
-c <server> |
指定测试服务器(必选) |
-s |
启动服务器模式 |
-u |
进行 UDP 测试 |
-b <bandwidth> |
仅对 UDP 模式有效,指定发送速率,例如 100M |
-R |
反向测试,客户端请求服务器发流 |
4. 常见问题及排查
4.1 防火墙 / SELinux 导致无法连通
CentOS 7/8 防火墙(firewalld):
# 临时放行 TCP 5201 端口 sudo firewall-cmd --zone=public --add-port=5201/tcp --permanent sudo firewall-cmd --reload # 若使用 UDP 测试,还需放行 UDP 5201 sudo firewall-cmd --zone=public --add-port=5201/udp --permanent sudo firewall-cmd --reload
iptables(早期 CentOS / Debian 仍可能使用):
# 放行 TCP 5201 sudo iptables -I INPUT -p tcp --dport 5201 -j ACCEPT sudo iptables-save # 放行 UDP 5201 sudo iptables -I INPUT -p udp --dport 5201 -j ACCEPT sudo iptables-save
Debian/Ubuntu ufw:
sudo ufw allow 5201/tcp sudo ufw allow 5201/udp sudo ufw reload
如果常见端口放行后仍无法连接,请检查服务器是否真实监听 iperf3 -s
指定端口,可用 ss
或 netstat
命令确认:
ss -tulnp | grep 5201
若未看到 iperf3
监听,需要确认 iperf3 -s
是否正确运行,以及是否有多实例冲突。
另外,如果系统启用了 SELinux(主要在 CentOS/RHEL 上),需要允许 iperf3
监听自定义端口或关闭 SELinux 临时测试。
# 临时关闭 SELinux(不推荐生产环境长期开启此操作)
sudo setenforce 0
# 或者查看 /var/log/audit/audit.log 中拒绝日志,使用 audit2allow 生成策略放行
4.2 时间同步问题导致带宽计算误差
iperf3
通过记录两端发送/接收时间片段计算带宽,若两台服务器时钟差距过大,可能会产生误差。
建议在测试两台机器上均安装并运行 NTP/DHCP 时间同步:
# Debian/Ubuntu sudo apt-get install -y chrony sudo systemctl enable --now chrony # CentOS 7 sudo yum install -y chrony sudo systemctl enable --now chronyd # 查看同步状态 chronyc tracking
4.3 高并发流测试时的系统调优
在高并发、大流量场景下,系统默认 TCP 窗口大小或文件描述符数量可能不足:
调整文件描述符上限
# 临时调整 ulimit -n 65535 # 永久调整:编辑 /etc/security/limits.conf,添加 * soft nofile 65535 * hard nofile 65535
调整内核 TCP 参数(例如在 /etc/sysctl.conf 中添加)
net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.netdev_max_backlog = 250000 net.core.somaxconn = 65535
然后执行
sudo sysctl -p
使生效。TCP 窗口大小调整 在
iperf3
客户端/服务器均可通过-w
参数指定,例如:iperf3 -c 192.168.1.100 -w 256K -t 20 -P 8
5. 实战示例
下面给出几个常见场景下的实际命令示例,方便快速参考。
场景一:简单的单流 TCP 带宽测试
服务器端:
sudo iperf3 -s
客户端:
sudo iperf3 -c 192.168.1.100 -t 15
测试时长 15 秒,输出每秒带宽以及总带宽。
场景二:多流并发(并行 4 路)TCP 测试
服务器端:
sudo iperf3 -s
客户端:
sudo iperf3 -c 192.168.1.100 -t 20 -P 4 -i 2
-P 4
:并发 4 路 TCP 流;-i 2
:每 2 秒输出一次中间结果。
场景三:UDP 丢包率与带宽测试
服务器端:
sudo iperf3 -s
客户端:
sudo iperf3 -c 192.168.1.100 -u -b 100M -t 10 -i 1
-u
:UDP 模式;-b 100M
:限制发送速率为 100 Mbps;- 输出包含丢包数、丢包率及延迟抖动等关键信息。
场景四:双向(Reverse)带宽测试
服务器端:
sudo iperf3 -s
客户端:
sudo iperf3 -c 192.168.1.100 -R -t 10
-R
:表示服务器往客户端方向发送数据,可测试服务器上行带宽。
场景五:输出 JSON 格式,便于脚本解析
iperf3 -c 192.168.1.100 -t 10 -J > result.json
生成的 result.json
文件中包含了详细的测试信息,可用 jq
、Python 等工具进行解析和可视化。
6. 总结
本文从以下几个方面,针对 Debian、Ubuntu、CentOS 三大发行版详细阐述了 iperf3
的安装与使用方法:
安装方式
- 通过系统自带仓库(
apt-get
/yum
/dnf
)一键安装; - 如有特殊需求,可自行从 GitHub 源码编译并安装最新版。
- 通过系统自带仓库(
基础用法
- 启动服务器模式(
iperf3 -s
); - 客户端测试(
iperf3 -c <server_ip>
),包括常见参数:时长(-t
)、并发流(-P
)、间隔统计(-i
)、端口(-p
)等。
- 启动服务器模式(
进阶测试
- UDP 模式(
-u
+-b
)用于测量丢包与抖动; - 双向带宽测试(
-R
); - JSON 输出(
-J
)便于自动化脚本收集和分析。
- UDP 模式(
常见排查
- 防火墙放通(
firewalld
、iptables
、ufw
)及 SELinux 问题; - 时间同步(使用
chrony
/ntpd
)避免测试结果误差; - 大吞吐场景下的内核和文件描述符调优。
- 防火墙放通(
通过以上步骤和示例,您可以在不同场景下灵活运用 iperf3
进行网络带宽测试与性能评估。无论是在实际运维中验证链路质量,还是做研发环境下的性能基准测试,iperf3
都是一款简单易用且功能强大的利器。祝测试顺利!
评论区