iperf3 教程:在 Linux 和 Windows 上测试网络速度

10 分钟阅读 - 2026年5月7日

hero section cover
目录
  • iperf3 教程:在 Linux 和 Windows 上测量网络性能
  • 安装 iperf3
  • 设置服务器
  • 运行客户端测试
  • 高级测试
  • 调优与故障排除
  • 视频推荐
分享

在 Linux 和 Windows 上安装 iperf3、运行带宽测试并调整 TCP 缓冲区以获得准确结果。涵盖 UDP、双向和 10GbE+ 测试

iperf3 教程:在 Linux 和 Windows 上测量网络性能

iperf3 是一款用于测量两台机器之间网络带宽、抖动和数据包丢失率的命令行工具。它采用客户端-服务器模型:一台机器负责监听,另一台发送流量,从而获得精确的吞吐量数据。本指南涵盖安装、基础和高级测试,以及如何对系统进行调优,以在高速链路上获得准确的结果。

安装 iperf3

Debian / Ubuntu

sudo apt update
sudo apt install iperf3

使用以下命令确认安装: iperf3 --version。请在服务器和客户端机器上均进行安装。

Fedora / CentOS / Rocky / Alma

在 Fedora 22 及以上版本、CentOS 8 及以上版本、Rocky 或 AlmaLinux 上:

sudo dnf install iperf3

在 CentOS 7 上,请改用 yum 。若未找到该软件包,请先启用 EPEL 软件源:

sudo yum install epel-release
sudo yum install iperf3

如果防火墙处于启用状态,请打开 5201 端口:

sudo firewall-cmd --add-port=5201/tcp --permanent
sudo firewall-cmd --reload

Windows

iperf.frar51an/iperf3-win-builds GitHub 仓库下载独立可执行文件。将其解压到类似 C:\iperf3,然后验证:

cd C:\iperf3
iperf3.exe -v

若要在任意目录下运行 iperf3,请通过“系统属性”>“高级”>“环境变量”将该文件夹添加到系统 PATH 中。此外,您还需要在 Windows Defender 防火墙中创建一条入站规则,允许 TCP 协议通过 5201 端口。

设置服务器

使用以下命令启动服务器:

iperf3 -s

默认情况下,该服务监听 TCP 5201 端口。若要在后台运行并启用日志记录:

iperf3 -s -D --logfile /var/log/iperf3.log

使用以下命令验证是否正在运行: ss -tulpn | grep 5201.

若您的网络中 5201 端口被封锁,请使用 -p 选择其他端口。若需绑定到特定网络接口,请使用 -B:

iperf3 -s -B 192.168.1.10

若仅进行一次性测试, iperf3 -s -1 仅处理单个客户端连接后即退出。在高带宽链路(40 Gbps+)上,请在不同端口运行多个服务器实例,以规避单线程 CPU 限制。

请确保防火墙允许所选端口的流量通过。在安装了 UFW 的 Ubuntu/Debian 系统上:

sudo ufw allow 5201/tcp
sudo ufw allow 5201/udp   # if testing UDP

运行客户端测试

基本 TCP 测试

iperf3 -c 192.168.1.10

此测试用于测量 10 秒内的 TCP 上行带宽。如需延长测试时长,请使用 -t:

iperf3 -c 192.168.1.10 -t 30

在 10 Gbps 或 25 Gbps 链路上,单个 TCP 数据流通常受限于单核 CPU 性能,峰值仅为 3–5 Gbps。请使用并行数据流以充分利用链路带宽:

iperf3 -c 192.168.1.10 -P 8

解读结果

每条时间间隔行显示传输量(已发送数据)和比特率(吞吐量)。对于 TCP,还需关注:

  • Retr(重传次数)。数值过高表示存在数据包丢失或网络拥塞。
  • Cwnd(拥塞窗口)。若数值过低或停滞,则表明缓冲区或窗口大小限制了吞吐量。

在无负载的 1 Gbps 链路上,扣除协议开销后预期吞吐量约为 940 Mbps。测试以发送方和接收方的汇总行结束。在稳定的网络环境下,这两者数值应非常接近。

对于 UDP 测试(-u flag),输出结果会增加抖动(数据包到达时间偏差)以及丢失/总数据报数量。对于VoIP等实时流量,理想状态是抖动低于1毫秒且丢失率为0%。

常用标志

标志用途
-c <IP>连接到服务器
-p <port>使用特定端口(默认:5201)
-t <sec>测试持续时间(以秒为单位)(默认:10)
-i <sec>报告间隔
-P <num>并行流
-uUDP 模式
-b <n>M目标带宽(UDP;若省略则默认为 1 Mbps)
-R反向模式(服务器发送,客户端接收)
-w <n>KTCP 窗口 / 套接字缓冲区大小
-JJSON 输出
-Z零拷贝(在高速链路上可降低 CPU 负载)

高级测试

双向测试

--bidir 标志(iperf3 3.7+)可同时测试上传和下载:

iperf3 -c 192.168.1.10 --bidir

两条连接均源自客户端,因此无需额外打开端口即可穿透NAT。若双向测试结果远低于单向测试,您的路由器或电缆调制解调器可能难以处理全双工流量。

反向模式

-R 标志会反转数据流,使服务器发送数据而客户端接收。这可在不交换角色的情况下测量下载速度:

iperf3 -c 192.168.1.10 -t 30 -i 5 -R

正向与反向结果存在显著差异,通常表明路径不对称、网络拥塞或缓冲区配置错误。

UDP测试

UDP 测试可揭示抖动和数据包丢失,而 TCP 则会通过重传掩盖这些问题。请务必使用 -b,因为 iperf3 默认 UDP 带宽为 1 Mbps:

iperf3 -c 192.168.1.10 -u -b 1G

模拟 VoIP 流量(100 个呼叫,200 字节数据包):

iperf3 -c 192.168.1.10 -u -b 8M -l 200

质量基准:抖动低于 5 毫秒对 VoIP 来说是理想的,超过 30 毫秒会导致可听见的通话问题。丢包率超过 0.1% 会显著降低实时媒体的传输质量。

调优与故障排除

常见问题

千兆链路仅能达到 100 Mbps?请使用 ethtool eth0。自动协商有时会失败,导致链路降速。

以太网的MSS显示为536字节?可能是路径MTU发现(PMTD)功能被禁用了。对于1,500字节的MTU,默认MSS应为1,460字节。测试时请使用 -m 进行测试以确认。536字节的MSS会浪费带宽并增加开销。

高速链路上 CPU 满载?使用 -Z (零拷贝)来降低 CPU 负载。对于 40 Gbps 及以上速率,请在不同端口上运行多个服务器实例,并将它们分布在各个 CPU 核心上。

测试结果不一致?使用 -O 3 来跳过 TCP 拥塞窗口初始建立时的最初几秒。测试运行之间间隔 30 秒以清空网络缓冲区。

单流速度远低于多流总和?如果单流速率为 200 Mbps,而八流总和达到 1.6 Gbps,则说明 TCP 窗口或操作系统缓冲区限制了单流速率。请调整下方的缓冲区设置。

TCP 缓冲区调整

首先计算带宽-延迟积(BDP):带宽 × 往返时延(RTT)。一条 10 Gbps 链路搭配 50 毫秒 RTT,其 BDP 为 62.5 MB。请将最大缓冲区设置为至少 2 倍的 BDP。

将这些参数添加到 /etc/sysctl.d/99-tcp-tuning.conf 并应用 sudo sysctl -p:

参数推荐值(1–10 Gbps)
net.core.rmem_max134217728 (128 MB)
net.core.wmem_max134217728 (128 MB)
net.ipv4.tcp_rmem4096 131072 134217728
net.ipv4.tcp_wmem4096 131072 134217728
net.core.default_qdiscfq
net.ipv4.tcp_congestion_controlbbr

保持 net.ipv4.tcp_moderate_rcvbuf 设置为 1,以便内核在这些范围内进行自动调整。对于大于 64 KB 的 TCP 窗口,请启用 net.ipv4.tcp_window_scaling (设置为 1)以支持大于 64 KB 的 TCP 窗口。

您还可以将默认的 CUBIC 拥塞算法切换为 Google 的 BBR。在存在一定数据包丢失的高延迟链路上,BBR 始终能提供比 CUBIC 更高的吞吐量。

在 iperf3 中使用 -w iperf3 中的标志来测试特定的缓冲区大小,但请注意,该值不能超过内核的 rmem_maxwmem_max。千兆链路建议从 8 MB 开始,100 Mbps 链路建议从 512 KB 开始。

如果您正在配置专用服务器并希望验证网络性能,请在设置完成后以及每次网络变更后立即运行 iperf3 基准测试,以便尽早发现性能退化。

视频推荐

博客

本周特色

更多文章
用于 Linux 数据包处理的 XDP 和 eBPF

用于 Linux 数据包处理的 XDP 和 eBPF

XDP 和 eBPF 如何在网卡驱动程序层处理每秒数百万个数据包。基准、DDoS 用例、工具链设置和硬件要求。

14 分钟阅读 - 2026年5月27日

为什么必须拥有功能强大且不计量的 VPS

3 分钟阅读 - 2025年5月9日

更多文章