iperf3 教程:在 Linux 和 Windows 上测试网络速度
10 分钟阅读 - 2026年5月7日

在 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.fr或ar51an/iperf3-win-buildsGitHub repo 下载独立可执行文件。解压到C:\iperf3 等文件夹,然后验证:
cd C:\iperf3
iperf3.exe -v
要从任何目录运行 iperf3,请通过系统属性 > 高级 > 环境变量将文件夹添加到系统路径。你还需要在 Windows Defender Firewall 中创建一个允许 5201 端口 TCP 的入站防火墙规则。
设置服务器
用以下命令启动服务器
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
测量通过 TCP 上传的带宽,持续 10 秒。使用-t 延长持续时间:
iperf3 -c 192.168.1.10 -t 30
在 10 Gbps 或 25 Gbps 链路上,由于单核 CPU 的限制,单个 TCP 流的最高速度通常为 3-5 Gbps。使用并行数据流可使链路达到饱和:
iperf3 -c 192.168.1.10 -P 8
读取结果
每个间隔行显示传输量(发送数据)和比特率(吞吐量)。对于 TCP,还要注意
- Retr(重传)。数字高意味着数据包丢失或拥塞。
- Cwnd(拥塞窗口)。如果数值偏低或卡住,说明缓冲区或窗口大小限制限制了吞吐量。
在干净的 1 Gbps 链路上,扣除协议开销后,预计吞吐量约为 940 Mbps。测试以发送方和接收方摘要行结束。在一个稳定的网络上,这些数据应该非常吻合。
对于 UDP 测试(-u标志),输出会添加抖动(数据包到达差异)和丢失/总数据报。抖动小于 1 毫秒和 0% 丢失是 VoIP 等实时流量的理想选择。
有用的标记
| 标记 | 用途 |
|---|---|
-c <IP | 连接服务器 |
-p <端口 | 使用特定端口(默认:5201) |
-t <秒 | 以秒为单位的测试持续时间(默认: 10) |
-i <秒 | 报告间隔 |
-P <个 | 并行数据流 |
-u | UDP 模式 |
-b <n>M | 目标带宽(UDP;如果省略,默认为 1 Mbps) |
-R | 反向模式(服务器发送,客户端接收) |
-w <n>K | TCP 窗口/套接字缓冲区大小 |
-J | JSON 输出 |
-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 发现可能已禁用。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 缓冲区调整
首先计算带宽-延迟乘积:带宽 x RTT。10 Gbps 链路的 RTT 为 50 ms,BDP 为 62.5 MB。将最大缓冲区设置为 BDP 的至少 2 倍。
将这些参数添加到/etc/sysctl.d/99-tcp-tuning.conf中,并使用sudo sysctl -p 加以应用:
| 参数 | 建议(1-10 Gbps) |
|---|---|
net.core.rmem_max | 134217728(128 MB) |
net.core.wmem_max | 134217728(128 MB) |
net.ipv4.tcp_rmem | 4096 131072 134217728 |
net.ipv4.tcp_wmem | 4096 131072 134217728 |
net.core.default_qdisc | fq |
net.ipv4.tcp_congestion_control | bbr |
将net.ipv4.tcp_moderate_rcvbuf设为 1,以便内核在这些范围内自动调整。对于大于 64 KB 的 TCP 窗口,启用net.ipv4.tcp_window_scaling(设置为 1)。
您还可以将默认的CUBIC拥塞算法切换为 Google 的BBR 算法。在有一定数据包丢失的高延迟链路上,BBR 的吞吐量始终高于 CUBIC。
使用 iperf3 中的-w标志测试特定的缓冲区大小,但注意不能超过内核的rmem_max或wmem _ max。千兆链路从 8 MB 开始,100 Mbps 为 512 KB。
如果您正在配置专用服务器并希望验证网络性能,请在安装后立即运行 iperf3 基线测试,并在任何网络变更后运行,以便及早发现问题。
视频推荐

iperf3 教程:在 Linux 和 Windows 上测试网络速度
在 Linux 和 Windows 上安装 iperf3、运行带宽测试并调整 TCP 缓冲区以获得准确结果。涵盖 UDP、双向和 10GbE+ 测试
10 分钟阅读 - 2026年5月7日
ZFS 快照:如何创建、还原和自动操作快照
10 分钟阅读 - 2026年5月5日