简介

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 的版本号,若能正常显示,则说明安装成功。

  • 如果你需要在脚本里无交互地安装,可加上 -qq 以减少输出:

    sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq iperf3
    

1.1.2 源码编译安装(可选)

如果需要最新版或者官方仓库版本过旧,可以选择从源码编译。适用于需要自定义编译选项或目标系统仓库并未收录新版 iperf3 的情况。

  1. 安装编译依赖:

    sudo apt-get update -y
    sudo apt-get install -y build-essential git autotools-dev automake libtool
    
  2. 下载并编译:

    # 克隆官方仓库
    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
    
  3. 添加到系统 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)仓库:

  1. 安装 EPEL 仓库

    sudo yum install -y epel-release
    # 验证 EPEL 是否启用
    yum repolist | grep epel
    
  2. 安装 iperf3

    sudo yum install -y iperf3
    
  3. 验证安装

    iperf3 --version
    

1.2.2 CentOS 8 及以后(包括 Rocky Linux、AlmaLinux 等 RHEL 衍生版)

在 CentOS 8 或 RHEL 8+ 系统中,同样可以通过 EPEL 仓库安装,或直接使用 dnf:

  1. 启用 EPEL

    sudo dnf install -y epel-release
    
  2. 安装 iperf3

    sudo dnf install -y iperf3
    
  3. 验证安装

    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 以及 gitautoconfautomakelibtool 等包。
  • 安装后可通过 /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 测试

  1. 在接收端(Server)启动:

    # 监听默认端口 5201
    iperf3 -s
    
    # 或指定端口 6000
    iperf3 -s -p 6000
    
  2. 在发送端(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
    
  3. 客户端输出示例(并发 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 参数并指定发送速率:

  1. 在服务器端(Server)启动:

    iperf3 -s
    
  2. 在客户端(Client)执行 UDP 测试:

    # 向服务器 192.168.1.100:5201 以 50 Mbps 发送 UDP 流,测试 10 秒
    iperf3 -c 192.168.1.100 -u -b 50M -t 10
    
  3. 输出示例(客户端):

    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

这会让服务器往客户端方向发送数据,衡量服务器上行带宽。输出中会标记 receiversender


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 指定端口,可用 ssnetstat 命令确认:

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 窗口大小或文件描述符数量可能不足:

  1. 调整文件描述符上限

    # 临时调整
    ulimit -n 65535
    
    # 永久调整:编辑 /etc/security/limits.conf,添加
    *    soft  nofile  65535
    *    hard  nofile  65535
    
  2. 调整内核 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 使生效。

  3. 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 的安装与使用方法:

  1. 安装方式

    • 通过系统自带仓库(apt-get / yum / dnf)一键安装;
    • 如有特殊需求,可自行从 GitHub 源码编译并安装最新版。
  2. 基础用法

    • 启动服务器模式(iperf3 -s);
    • 客户端测试(iperf3 -c <server_ip>),包括常见参数:时长(-t)、并发流(-P)、间隔统计(-i)、端口(-p)等。
  3. 进阶测试

    • UDP 模式(-u + -b)用于测量丢包与抖动;
    • 双向带宽测试(-R);
    • JSON 输出(-J)便于自动化脚本收集和分析。
  4. 常见排查

    • 防火墙放通(firewalldiptablesufw)及 SELinux 问题;
    • 时间同步(使用 chrony / ntpd)避免测试结果误差;
    • 大吞吐场景下的内核和文件描述符调优。

通过以上步骤和示例,您可以在不同场景下灵活运用 iperf3 进行网络带宽测试与性能评估。无论是在实际运维中验证链路质量,还是做研发环境下的性能基准测试,iperf3 都是一款简单易用且功能强大的利器。祝测试顺利!