
你要是干过网络运维、弱电集成或者服务器交付应该对“打流”这个词不陌生。两台设备之间网络到底能不能跑满带宽、延迟是不是正常、有没有丢包光靠 ping 大包和复制文件根本说明不了问题。这时候就得请出 iperf3 这个老牌工具专门用来做网络吞吐测试也就是大家常说的“打流测试”。iperf3 说到底就是一个命令行工具一端跑服务端一端跑客户端两端之间持续发送数据流最后报给你带宽、丢包率、抖动这些关键指标。它的安装方式跨平台差异不小Windows 上很多小白习惯去搜“iperf3 中文版下载”结果装了一堆带广告的捆绑包Linux 发行版各有各的包管理器像 Ubuntu 系、Arch 系甚至国产的麒麟系统命令完全不同还有人买了路由器、NAS 之后想在内部组网做验证发现手里根本没编译环境。这篇就围绕“iperf3 打流测试软件安装”这个主题把各平台安装、参数配置、实际排障的完整过程捋一遍新手可以直接照着操作老手也能顺手查漏补缺。1. 打流测试到底在测什么1.1 先搞懂 iperf3 的定位iperf3 是 iperf 系列的第三代重写版本由 ESnet / Lawrence Berkeley National Laboratory 维护主要用于主动测量 IP 网络上的最大可用带宽。它的工作模式非常朴素一台机器以服务端模式运行iperf3 -s监听端口另一台机器以客户端模式运行iperf3 -c 服务器IP然后客户端会尽量用最大速率往服务端方向发包测试结束后把统计结果呈现在两端屏幕上。它和日常用的网速测试工具有本质区别。Speedtest 测的是“你这个宽带连到运营商节点的速度”走的是公网、有运营商限速因素iperf3 打流是“自己网络内部两台设备之间的真实转发能力”完全绕开公网的不确定性。正因为这种特性它被广泛用于局域网验收、无线 AP 覆盖测试、服务器网卡调优、交换机转发性能抽查等场景。1.2 为什么“打流”能暴露网络问题很多人会问ping 通不就行了吗这其实就是打流测试存在的价值。ping 用的是 ICMP 小报文一次几十字节对网络转发设备的压力极小哪怕链路质量已经很差小包照样可以通。而实际业务传输时TCP 数据包动辄 1400 多字节还要面临队列缓存、CPU 处理能力、流控算法等多重考验。拿我自己测过的场景举例有一次机房两台服务器直连ping 的延迟只有 0.3ms看起来一切正常但用 iperf3 一打流TCP 吞吐只有 180Mbps——而网卡明明是千兆的。后来排查发现其中一台服务器的网卡驱动固件版本太老开启了节能模式导致大包处理性能大幅缩水。这种隐性问题不打流根本测不出来。所以在做组网验收或者故障定位时我的建议永远是先把 iperf3 安装包准备好别等出了故障再找工具。2. 安装前的准备与平台选择2.1 安装包从哪来安全第一安装 iperf3 这件事在不同平台上的复杂度差异相当大。最稳妥的路径永远是优先使用系统自带的软件仓库安装其次才是去官网下载官方编译二进制包最后才是源码编译。原因是仓库里的包经过了发行版维护者的测试依赖关系完整装完就能用基本不会出现“缺这个库缺那个库”的连锁问题。值得特别提醒的是千万不要去那些来路不明的下载站找“iperf3 破解版”“iperf3 汉化版”。这个工具本来就是开源的、完全免费根本不存在什么破解版。很多第三方下载站会在安装包里捆绑推广软件或者挖矿程序我见过好几个同事在 Windows 上装这类工具把浏览器主页和开机启动项搞乱的。老老实实用官方渠道后面才能省心。2.2 Windows / Linux / 国产系统的安装差异从操作系统分类来看iperf3 的安装方式大体分为三类Windows 系官方提供编译好的 zip 包解压即用无需安装。Debian / Ubuntu / 麒麟 / Deepin 等 apt 系用apt install iperf3直接装。Arch / Manjaro / CachyOS 等 pacman 系用pacman -S iperf3直接装。其他 Linux如 CentOS / RHEL 早期版本源码编译是相对通用的兜底方案。在动手之前先确认一下操作系统的版本和架构。用uname -m或者 Windows 任务管理器看下 CPU 架构是 x86_64、ARM64 还是其他。iperf3 官方发布的 Windows 包通常只提供 x86_64 版本ARM 设备跑 Windows 的话就需要另想办法。Linux 发行版则可以直接用系统包管理器安装对应架构的预编译包不用关心架构兼容问题。3. 各平台安装实操全记录3.1 Windows 上安装 iperf3解压即用Windows 平台的安装逻辑最简单核心步骤就三步下载、解压、加到 PATH。具体过程如下。先去 iperf3 的官方下载页面https://iperf.fr/iperf-download.php找到 Windows 对应的 zip 包一般文件名类似iperf-3.1.3-win64.zip或更新的版本。下载完成后把它解压到一个固定目录例如C:\tools\iperf3目录下会有一个iperf3.exe和iperf3.exe所依赖的 dll 文件比如iperf3.dll。然后为了让它在任何目录下都能直接执行需要把解压目录加入系统的 PATH 环境变量。具体操作为右键“此电脑”→ 属性 → 高级系统设置 → 环境变量 → 在“系统变量”里找到 Path → 编辑 → 新建 → 填入C:\tools\iperf3→ 确定。验证是否安装成功重新打开一个 CMD 窗口输入iperf3 -v如果能看到版本号输出那就说明安装完成。需要注意Windows 下 iperf3 的防火墙弹窗第一次运行时可能会跳出来一定要点击“允许访问”否则后续测试时客户端连接会被 Windows 防火墙静默拦截报错信息非常具有迷惑性。注意iperf.fr 这个站点虽然界面比较原始但它就是 iperf 官方推荐的下载渠道之一下载时看清楚文件别点页面上那些广告推广按钮。3.2 Debian / Ubuntu / 麒麟系统用 apt 安装银河麒麟、中标麒麟、Deepin、UOS 这些国产 Linux 发行版多数是基于 Debian 或 Ubuntu 生态的软件源里大多已经收录了 iperf3。安装之前先做一步常规操作sudo apt update然后安装sudo apt install -y iperf3安装完成后验证iperf3 -v如果提示找不到软件包第一反应不应该是去网上随手搜一个 deb 包下载。更稳妥的做法是先检查软件源配置文件确认当前系统的源是否正常工作。以银河麒麟 V10 为例它默认的源里软件包名称和 Debian 原生源略有差异但 iperf3 基本都在。如果仓库确实没有可以尝试启用universe软件源或者直接采用后面要讲的源码编译方案。我在给客户现场部署测试环境时经常遇到麒麟系统上一次性装完 iperf3 后直接运行测试的情况只要网络源通畅整个过程不超过两分钟。它和 Ubuntu 的软件源管理方式高度相似用惯了 apt 的人不会有任何陌生感。3.3 Arch 系 / CachyOS 安装CachyOS 是最近比较热门的 Arch 衍生发行版主打性能优化很多喜欢折腾的人拿它做基准测试。Arch 系安装 iperf3 直接用 pacman 即可sudo pacman -S iperf3Arch 系的软件仓库更新非常激进iperf3 版本一般都很新此外还可以通过 AUR 安装带 mtu 修正等额外 patch 的版本但对普通用户来说官方仓库版本完全够用。装完同样用iperf3 -v验证。如果你用的是 Manjaro、EndeavourOS 这类 Arch 衍生版命令完全一样。这算是所有平台里安装体验最顺滑的之一毕竟 Arch 生态里包工具链非常完善。3.4 源码编译安装的兜底方案有些场景下既没有 apt 也没有 pacman或者软件源里恰好没有这个包那就只能编译安装了。iperf3 依赖 OpenSSL 开发库编译前先把基础编译工具和依赖准备好。以 CentOS 7 / openEuler 这类 yum 系系统为例sudo yum install -y gcc make openssl-devel wget https://downloads.es.net/pub/iperf/iperf-3.17.1.tar.gz tar -xzf iperf-3.17.1.tar.gz cd iperf-3.17.1 ./configure make -j$(nproc) sudo make install配置完成后默认安装到/usr/local/bin/iperf3。如果在运行iperf3 -v时提示找不到命令多半是因为动态链接库路径没刷新执行sudo ldconfig然后再运行即可。如果你的系统是精简安装缺少wget或者tar先补齐这些基础工具再继续。源码编译安装的通用性很强几乎适用于任何 Linux 发行版唯一的缺点是要自己解决依赖编译时间视机器性能而定一般几十秒到几分钟就能完成。实操心得我用 CentOS 7 做编译时踩过一个坑系统的 gcc 版本如果比较老4.8.5编译新版 iperf3 源码时可能会报错。解决办法要么升级 gcc要么改用低版本的 iperf3 源码包比如 3.9 或 3.10这些版本对老编译器的兼容性更好。4. TCP/UDP 打流测试的核心参数与方法装好 iperf3 只是热身真正有用的是实际打流时怎么选参数、怎么看结果。很多第一次用的人只会跑一句默认命令得到一堆数字不知道怎么解读也不知道 UDP 打流和 TCP 打流的区别在哪儿。这里我按照使用频率从高到低逐个拆解。4.1 TCP 打流测最大带宽默认情况下 iperf3 走的是 TCP 协议。服务端在一台机器上启动监听iperf3 -s默认监听 5201 端口。如果端口被占用可以用-p指定其他端口iperf3 -s -p 12001客户端连接测试iperf3 -c 192.168.1.10输出结果会显示一段时间的传输数据量和计算出的带宽值例如[ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec这里 943 Mbits/sec 就是这条 TCP 链路的有效吞吐。如果网卡是千兆的测出 940Mbps 左右属于正常水平因为 TCP 协议头、确认包等开销本来就存在不可能精确到 1000Mbps。如果想持续测更长时间用-t指定秒数iperf3 -c 192.168.1.10 -t 30TCP 打流是最常见的验收方式适合判断“这条链路能不能跑满带宽”。但要注意TCP 本身有拥塞控制机制如果链路丢包吞吐会迅速下降这是 TCP 的正常自我保护。所以 TCP 测速结果偏低时往往意味着链路质量有问题但不一定是带宽不够。4.2 UDP 打流测带宽上限与丢包率UDP 打流和 TCP 的思路完全不同。UDP 没有拥塞控制客户端会按照指定速率拼命往外发数据不管对端能不能收得过来。它的核心价值在于测试网络的极限转发能力和丢包情况。服务端启动方式不变iperf3 -s客户端指定 UDP 模式和带宽上限iperf3 -c 192.168.1.10 -u -b 1000M-u表示使用 UDP-b 1000M表示以 1000Mbps 的速率发送。测试结束后服务端会汇报接收到的数据量和丢包率[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 5] 0.00-10.00 sec 882 MBytes 739 Mbits/sec 0.023 ms 22858/593471 (3.9%)这里最关键的是最后那个百分比丢包率 3.9%。这意味着网络在 1000Mbps 负载下出现了接近 4% 的丢包这个结果对视频传输、VoIP 这类实时业务来说是不可接受的。作为测试者你可以用不同速率档位做几轮测试比如分别用 200M、500M、800M、1000M 打流找出丢包率开始明显上升的临界点。这就是网络设备吞吐上限的实用量化方法。4.3 双向与多线程更真实的业务模拟默认情况下 iperf3 只测客户端到服务端的单向数据流也就是我们常说的“上行”。但在真实场景中很多业务是上下行同时进行的比如视频会议、文件双向同步。这时候要加-d参数做双向测试iperf3 -c 192.168.1.10 -d -t 20除了双向还有多线程。为什么要多线程因为 CPU 单核性能可能会成为瓶颈。如果网卡是万兆或者更高的一个 iperf3 客户端进程可能无法打满全部带宽这时候可以用-P参数指定并发连接数iperf3 -c 192.168.1.10 -P 4 -t 20-P 4代表同时建立 4 个 TCP 连接。多线程测试更接近真实场景因为现代应用的连接数往往不止一个同时也能规避单核 CPU 限制的问题。4.4 结果解读与 JSON 输出iperf3 默认输出人性化格式的文本结果但如果要做自动化采集或者后期数据分析可以加-J参数输出 JSON 格式iperf3 -c 192.168.1.10 -J这个 JSON 输出里包含了完整的测试信息包括服务端版本、时间戳、带宽、丢包率、重传数量等可以配合 jq 命令做筛选也可以直接导入监控系统做可视化。我个人写脚本巡检服务器间网络质量时就是用-J把结果收集起来统一入库的比抓屏记录文本靠谱得多。还有几个常用参数值得收藏-R反向模式服务端向客户端打流在客户端加这个参数即可。-i 1每 1 秒输出一次中间统计方便观察带宽波动过程。-l 1400指定包大小UDP 打流时常用。5. 常见问题排查与避坑实录5.1 防火墙拦截导致连接失败这是 iperf3 使用时最高频的故障没有之一。表现形式为客户端连接后长时间无响应最后报错iperf3: error - unable to connect to server根本原因通常是服务端的防火墙没有放行 5201 端口。在 Linux 上临时验证可以先关闭防火墙再测一次sudo systemctl stop firewalld如果关掉防火墙后测试正常那就把端口加入放行名单sudo firewall-cmd --permanent --add-port5201/tcp sudo firewall-cmd --reloadUbuntu 上可能是 ufwsudo ufw allow 5201/tcp sudo ufw allow 5201/udpWindows 服务端则检查“防火墙 → 允许应用或功能通过防火墙”里有没有为iperf3.exe放行。多一个心眼如果客户端和服务端中间隔着三层交换机或路由器还要检查设备上的 ACL 是否放行了相关端口。5.2 安装时提示依赖缺失或软件包找不到Debian/Ubuntu 系安装时报E: Unable to locate package iperf3十有八九是apt update没执行或者软件源列表有问题。先执行sudo apt update如果还是找不到检查/etc/apt/sources.list以及/etc/apt/sources.list.d/下的源配置是否正常确保网络能访问到镜像源地址。源码编译时报openssl/ssl.h: No such file or directory说明 OpenSSL 开发头文件没装。Debian 系执行sudo apt install libssl-devRedHat 系执行sudo yum install openssl-devel。这个依赖是必须的缺少它连./configure都过不了。5.3 测速结果远低于预期排除安装问题后测试结果不理想的原因就比较复杂了。我按排查优先级整理了一个速查表优先级排查方向快速验证方法高服务端 CPU 是否跑满top观察 %Cpu 使用率单核 100% 大概率是瓶颈高中间链路是否有丢包用 UDP 小带宽如 100M打流看丢包率中网卡协商速率Linux 用ethtool eth0Windows 查看网络连接状态中网线/光纤模块质量更换网线、插拔光模块后再测试中TCP 窗口设置检查系统tcp_rmem/tcp_wmem参数低对端设备性能换个性能更强的机器做服务端对照测试需要强调一点iperf3 打流结果反映的是整条链路的性能而不是某一台设备的性能。如果达不到预期把服务端和客户端角色对调一下再测一次往往能快速定位是哪一侧的短板。有一次我测试两台服务器直连A 到 B 只有 500Mbps反过来 B 到 A 能跑满千兆瞬间就判断问题出在 A 的网卡或驱动上后来升级固件解决。5.4 老版本兼容性与 IPv6 问题如果两端安装的 iperf3 版本差距过大可能出现客户端连接后直接断开或者参数解析异常。iperf3 第三版没有完全做到向后兼容官方也明确说明 3.x 和旧版 2.x 不兼容。所以最好保证两端主版本一致比如都装 3.17.1 或者都装 3.9。实际测试时我一般会让两端统一使用同一个安装包或同一条安装命令避免版本差异带来的额外变量。另外iperf3 默认解析 IPv4 地址。如果客户端输入的是 IPv6 地址需要加-6参数强制使用 IPv6iperf3 -6 -c fe80::1不加-6的话iperf3 一般会尝试用 IPv4 解析然后直接解析失败。这个坑在纯 IPv6 内网里尤其常见别等排查到网关策略才发现是地址族选错了。6. 实测经验与技巧杂谈6.1 测 WiFi 时先分清楚“无线到有线”还是“无线到无线”很多朋友拿 iperf3 测家里的无线路由器结论却糊里糊涂。我这里给一个小建议不要直接拿两台无线设备互打流否则测试结果混入了两台设备各自的无线链路质量根本无法定位问题。比较规范的做法是用一台有线设备连接路由器 LAN 口当服务端另一台无线设备当客户端去打流。这样测试的是“这台无线设备到路由器有线侧”的真实有效吞吐数据更有参考价值。想做无线性能验收时可以分别在 2.4GHz 和 5GHz 频段下各测一轮对比结果就能知道路由器的双频表现差异。6.2 通过调大窗口提升 TCP 吞吐如果你确信链路质量没问题但 TCP 带宽始终上不去可以考虑调整系统 TCP 接收/发送缓冲区大小。以 Linux 为例查看当前设置sysctl net.core.rmem_max sysctl net.core.wmem_max对于高带宽高延迟链路比如跨地域专线默认的窗口大小可能不够。临时调大sudo sysctl -w net.core.rmem_max134217728 sudo sysctl -w net.core.wmem_max134217728需要在测试结束后评估是否长期保留用sysctl -p持久化配置。iperf3 的窗口参数其实也可以在客户端通过-w直接指定iperf3 -c 192.168.1.10 -w 1M不过实际操作中调整系统参数比依赖 iperf3 的-w更彻底因为后者只对当前连接生效。6.3 多轮测试取平均值更科学单次打流结果只能反映“这一时刻”的网络表现。因为网络设备的队列深度、CPU 频率调度、无线信道干扰都是动态变量单次测试的随机性比较大。我个人习惯的做法是每个场景至少测 3 次每次 10 秒以上间隔 5 秒再开始下一轮最后取中位数或平均值作为结论。如果要做正式的验收报告我还会记录每轮 JSON 输出里的sum_sent、sum_received字段把原始数据留档。这样后来出了问题可以用当时的原始数据做对比比截图有说服力得多。6.4 容器环境里跑 iperf3 的注意事项现在很多环境跑到 Docker 里了在容器里装 iperf3 也不是什么难事。官方其实也提供了 iperf3 的容器镜像可以直接拉取。在宿主机执行docker run --rm -p 5201:5201 -it networkstatic/iperf3 -s客户端执行docker run --rm -it networkstatic/iperf3 -c 服务器IP不过要提醒一下容器网络默认走 NAT和宿主机直接跑 iperf3 的结果会差一些。如果你要测宿主机网卡的真实性能建议用--network host模式跑容器或者干脆在宿主机上直接安装 iperf3不要多绕一层虚拟化。我做对比测试时曾经发现同样两台物理机容器模式比宿主机直跑掉 5%10% 的吞吐原因就是 NAT 转发开销。所以正式验收时还是要让 iperf3 跑在物理网络栈上。最后再分享一点自己的体会从我这些年做网络测试的经历看iperf3 最大的价值不在于它能跑出多好看的带宽数字而在于它能把网络问题“逼”出来。很多你觉得“应该没问题”的链路一打流就现出原形。所以我给新人的建议就是遇到网络慢、丢包、视频卡顿别急着怪运营商或者设备厂商先用 iperf3 把两端链路拉起来做一轮对照测试数据出来再下结论。安装这件事本身并不难难的是针对不同平台选择正确的安装方式以及在测试时用对参数、读懂结果。希望这篇围绕 iperf3 打流测试软件安装的完整记录能帮你少走一点弯路。下次再有人问我“iperf3 怎么装”我大概率还是会先反问一句你是在什么系统上装想测 TCP 还是 UDP这两个问题定下来后面的事其实都非常顺了。