
如果你的局域网里也有一台NAS或者经常需要在内网里倒腾大文件八成经历过这种场景从一个电脑往另一个电脑拷几十GB的视频素材速度一直徘徊在30MB/s上下路由器是千兆的、网线是新买的六类线、交换机看起来也没毛病。打开在线测速网站点一下“开始”外网下载轻松跑满带宽看着一切正常。但你心里清楚那个真正卡脖子的内网问题从头到尾都没被解决。这时候就该把iperf3掏出来了。iperf3是当前使用最广的开源网络测速工具专门用来测试两点之间的最大可用带宽顺带还能看丢包率、重传次数、抖动等网络健康指标。它在Windows、Linux、macOS上都能跑核心用法就三步装好软件、一端开服务端、另一端开客户端。零基础用户完全不需要懂底层网络协议照着敲几条命令就能拿到内网的真实吞吐量。这篇文章我就从零开始把这三步拆到位再附上一些我实际测下来才发现的坑。1. 先搞明白一件事你到底该测什么很多人在家里组了千兆局域网却始终说不清内网到底能跑多快。新买的NAS标称读写能到100MB/s以上实际从电脑往NAS里拖文件速度却只有二三十MB/s。这时候打开在线测速网站下载带宽轻松跑满就会更困惑网络明明没问题啊这个困惑的核心在于在线测速网站测的链路和你日常传输文件时走的链路不是同一段。在线测速测的是你到运营商机房的互联网出口带宽中间要经过光猫、运营商路由、骨干网络反映的是“家里宽带到底买了多少兆”。而内网传输只经过本地的交换机、网线、路由器LAN口、无线AP这段链路的质量在线测速网站根本测不到。1.1 在线测速为什么会“骗”你我用一个具体例子说明这件事。假设你的宽带是500Mbps的光纤在线测速显示下载498Mbps说明从你家到运营商这一段链路没有问题。可一旦你从桌面电脑往路由器上挂的移动硬盘拷贝文件速度只有40MB/s这说明本地有线网络存在瓶颈——可能是网线只有四芯在工作可能是交换机的某个端口协商成了百兆也可能是笔记本的网卡驱动被系统更新折腾出了bug。这些本地链路问题只有在两台上网设备之间做“端到端带宽测试”才能暴露出来。iperf3就是干这个的一台机器当服务端另一台当客户端数据从客户端持续发送到服务端最后给出实际吞吐量、丢包率、重传次数这些关键指标。通过对比不同链路段的测速结果你才能定位瓶颈到底在网卡、网线、交换机还是路由器。1.2 ipref3的设计逻辑与适用场景iperf3是iperf2的重写版本由ESnet美国能源部科学网络主导开发设计目标非常纯粹测带宽、测UDP丢包与抖动、调优网络参数。它的所有功能都围绕命令行展开没有多余的图形界面好处是可脚本化、可重复、适合自动化测试。对Windows用户来说它就是一个几MB的可执行文件不需要安装不需要依赖Python或Java绿色版解压直接用。我日常把iperf3的适用场景总结成四类验证两条网线之间的实际带宽比如从电脑到墙插、从墙插到交换机这段物理链路。排查NAS传输速度达不到标称值的问题区分是磁盘瓶颈还是网络瓶颈。测试无线网络实际能跑到多少而不是只看路由器包装盒上的“理论标称值”。工程验收时给局域网做吞吐量基准测试留下可对比的记录。记住一个核心原则iperf3测的是“端到端”性能中间任何一环——网卡、网线、交换机、路由器转发性能、无线信号强度——都会在结果里体现出来。这正是它比在线测速有价值的地方。2. 第一步把iperf3装到Windows上并让它跑起来很多新手看到“命令行工具”几个字就想撤退其实iperf3在Windows上的安装是我见过最友好的之一。整个安装过程不需要注册表、不需要管理员权限运行到服务端时才可能需要、不需要装依赖下载解压就能用。2.1 下载与解压一个exe文件搞定iperf3的官方发布页在iperf.fr代码托管在GitHub的esnet/iperf仓库。你打开Release页面找到对应Windows的zip压缩包下载即可。需要注意选对版本号尽量下载最新的稳定版老版本在Windows 11上偶尔会遇到兼容性提示。下载下来是一个zip压缩包里面包含iperf3.exe主程序32位和64位各一个分别放在x86和x64目录下。cygwin1.dll和cygwin2.0相关的DLL文件这是iperf3在Windows上依赖的运行时库必须和主程序放在同一目录。一些示例文档和README。解压时我建议放到一个路径固定、没有空格的目录比如C:\iperf3。因为命令行工具加上PATH环境变量之后路径里有空格会稍微麻烦一些。2.2 快速验证程序能跑打开Windows命令行或者PowerShell切换到解压目录cd C:\iperf3 .\iperf3.exe -v正常情况下会输出类似下面的信息iperf 3.17.1 (cJSON 1.7.18) Windows 64-bit能看到版本号说明程序运转正常。如果提示缺少某个DLL最可能的原因是你解压时漏拷贝了cygwin相关文件重新把zip里所有文件解压到同一目录即可。在PowerShell里运行本地程序需要加.\前缀这是PowerShell为了安全默认禁止直接运行当前目录下程序导致的不是iperf3本身的问题。如果你用老式的CMD命令行直接输入iperf3.exe -v也能运行。2.3 顺手把路径配置好省得每次切目录如果不想每次都cd到C:\iperf3可以把C:\iperf3加进用户PATH环境变量。操作路径是设置 → 系统 → 关于 → 高级系统设置 → 环境变量 → 在“用户变量”里找到Path → 编辑 → 新建 → 填入C:\iperf3→ 确定。配置完成后重新打开一个命令行窗口直接输入iperf3 -v就能识别。2.4 安装阶段最容易翻车的三个小事第一杀毒软件误报。iperf3本质上是网络发包工具部分杀毒软件会把它识别为风险程序。只要是从官方渠道下载的添加信任即可但千万不要去第三方下载站捡“破解版”或“优化版”那里面被塞东西的概率不低。第二旧版本兼容问题。Windows 7用户如果装了最新版iperf3发现报错缺少api-ms-win-*相关的DLL大概率是系统缺少Universal C Runtime更新装上该补丁就能解决。第三64位和32位选错。现在Windows基本都是64位了直接选x64目录下的exe。如果是给老旧设备的嵌入式Windows系统用才考虑x86版本。3. 第二步服务端启动与防火墙放行新手最容易卡住的一关iperf3是标准的客户端-服务端架构测速之前必须先在一台机器上启动服务端另一台机器作为客户端来连接它。这一步的逻辑很像打电话服务端是“接电话的人”客户端是“拨电话的人”。很多人卡在这里不是命令敲错了而是Windows防火墙把入站请求拦了。3.1 服务端启动命令一条命令的事在选定的服务端机器上比如你打算做文件共享的电脑或者一台专职测速的笔记本打开命令行运行iperf3 -s运行后命令行会停留在监听状态默认监听TCP 5201端口等待客户端连接。看到类似Server listening on 5201的提示说明服务端已经就绪。服务端窗口默认每1秒打印一次收包情况测速结束后会自动汇总。如果想调整监听端口加-p参数iperf3 -s -p 5201端口不冲突的情况下用默认的5201就行。需要注意的是Windows上如果5201端口被占用服务端会报bind failed: Address already in use这时候换一个端口比如-p 6001。3.2 Windows防火墙放行命中率最高的坑在Windows上启动iperf3服务端后客户端连接时最常见的报错是connect failed: 连接尝试失败因为连接方在一段时间后没有正确答复或连接的主机没有反应90%的情况是Windows防火墙拦住了入站的5201端口。解决方法是放行该端口最简单的方式是图形界面操作控制面板 → Windows Defender防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → TCP → 特定本地端口填5201 → 允许连接 → 勾选所有配置文件 → 命名“iperf3”。不过我更推荐用命令行的方式方便在没鼠标的环境里快速配置而且只需要两条命令。以管理员身份打开PowerShell或CMDnetsh advfirewall firewall add rule nameiperf3 TCP dirin actionallow protocolTCP localport5201 netsh advfirewall firewall add rule nameiperf3 UDP dirin actionallow protocolUDP localport5201如果你后面要用UDP模式打流UDP端口的规则也顺手放行了一次配好省得到时候又来一遍。3.3 服务端还可以这样玩起步阶段服务端只用一个-s启动就够了。但有几个参数我先列出来等你跑通基础测速后再回头看参数作用使用示例-p指定服务端口iperf3 -s -p 5201-i输出间隔秒iperf3 -s -i 1-1只服务一个客户端后自动退出iperf3 -s -1-B绑定指定IP地址iperf3 -s -B 192.168.1.100--logfile输出结果写入文件iperf3 -s --logfile C:\iperf3\log.txt-1这个参数我在写自动化脚本时很爱用它保证测速完服务端自动退出不会留一堆后台进程在跑。--logfile则适合做多次测试后对比数据日志文件比人眼盯屏幕靠谱。3.4 先确认两台机器能互通客户端连接之前建议先确认网络互通。在客户端机器上运行ping 服务端IP地址如果ping不通先排查IP、网线、无线连接这些基础问题再回来搞iperf3。用ipconfig可以查看本机IP地址服务端机器上的IPv4地址就是客户端要填的目标地址。4. 第三步客户端发起测速逐行读懂输出结果服务端跑起来后剩下的事情就是到另外一台机器上执行客户端命令。第一次测速时别急着加各种复杂参数先跑一条最基础的命令确认链路通、数据在走、结果合理再逐步增加参数。4.1 最基础的测速命令在客户端机器上运行iperf3 -c 192.168.1.100其中192.168.1.100替换成你服务端机器的实际IP。这条命令的意思是向这台服务器发起TCP测速持续10秒每1秒输出一次结果。10秒是iperf3的默认时长5秒是iPerf2的默认习惯两者并不一样习惯了老工具的朋友要注意区分。命令行输出会分成三个区域连接信息显示客户端连接的IP和端口。每秒数据行从0.00-1.00 sec一直到9.00-10.00 sec每隔1秒一行。汇总信息从- - - - - - - - - - - - - - - - - - -分隔符开始显示整段测试的平均带宽。4.2 结果面板逐行拆解别只盯着带宽数字下面是我在一台千兆有线连接环境里实测的输出片段[ 5] 0.00-1.00 sec 112 MBytes 940 Mbits/sec 1.72 MBytes 217 [ 5] 1.00-2.00 sec 114 MBytes 955 Mbits/sec 1.61 MBytes 194 [ 5] 2.00-3.00 sec 113 MBytes 952 Mbits/sec 1.78 MBytes 210 ... [ 5] 9.00-10.00 sec 113 MBytes 948 Mbits/sec 1.54 MBytes 183 - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec 498 sender [ 5] 0.00-10.00 sec 1.11 GBytes 954 Mbits/sec receiver逐行解释Interval统计时间段单位是秒。Transfer这段时间内传输的数据量单位可以是MBytes。Bandwidth这段时间的平均带宽单位Mbits/sec。这是大多数人最关心的数字。RetrTCP重传次数。这个数字很关键如果重传次数很高说明链路存在拥塞或丢包带宽高但数据在反复重发实际用户体验会打折。sender和receiver分别是从发送方角度和接收方角度统计的结果。正常情况下两者带宽数值几乎一致如果接收方数值明显低于发送方说明数据在传输过程中丢了。我特意保留了Retr列很多教程会忽略它。重传次数高通常意味着中间某个设备有瓶颈比如交换机的缓存不够、无线信号不好、网线质量差导致CRC错误。带宽数字好看不一定是真健康配合Retr一起看才完整。4.3 千兆网络到底应该跑多少新手测完最容易问的问题是我这个速度正常吗以千兆有线网络为例理论极限是1000Mbps扣除TCP/IP协议头、网卡处理开销实际能跑到940~960Mbps就属于正常健康水平。换算成文件拷贝时的速度大约是117~120MB/s。如果测速结果只有100Mbps左右那说明链路被限制在了百兆——常见原因是网线只接了4芯、交换机和网卡协商成了100Mbps、或者猫/路由器LAN口不支持千兆。如果测速结果在两三百Mbps徘徊优先怀疑网线质量、水晶头压接不到位、以及网卡驱动异常。这些在后面的排障部分会展开讲。4.4 常用客户端参数速查基础测速跑通后这几个参数就该背下来了参数含义示例-t测试时长秒iperf3 -c 192.168.1.100 -t 20-i输出间隔秒iperf3 -c 192.168.1.100 -i 2-P并行连接数iperf3 -c 192.168.1.100 -P 4-R反向模式服务端向客户端发送数据iperf3 -c 192.168.1.100 -R-uUDP模式iperf3 -c 192.168.1.100 -u -b 1000M-b限制目标带宽TCP/UDP均可用iperf3 -c 192.168.1.100 -b 800M-p服务端端口iperf3 -c 192.168.1.100 -p 5201一开始不需要全部掌握先把-t、-R、-P这三个记住后面进阶会用到。5. 进阶玩法UDP打流、反向测速与瓶颈定位跑通基础TCP测速只是热身。在实际项目中TCP测速只能告诉你“当前环境能跑多快”但没法进一步告诉你“如果链路劣化问题出在哪里”。这时候就需要上UDP打流、反向测速这些进阶手段了。5.1 UDP打流带外网的测压方式TCP有拥塞控制机制会自动适应链路状况带宽跑不满时会自动往上探。而UDP不关心拥塞发了就是发了链路能收多少、丢多少全看网络设备脸色。因此UDP模式下更适合做极限压力测试和丢包率测试。客户端命令示例iperf3 -u -c 192.168.1.100 -b 1000M -t 10-u开启UDP模式-b 1000M指定发送目标带宽为1000Mbps。服务端不用加UDP参数保持iperf3 -s即可它默认支持TCP和UDP。UDP模式下输出的关键指标变了不再是Retr而是Lost / Total Datagrams和Loss%。举个例子[ 5] 0.00-1.00 sec 111 MBytes 932 Mbits/sec 8408/259844 (3.2%)最后的3.2%就是丢包率。在千兆有线内网中丢包率应当是0%或者极低。如果强制用1000Mbps打流出现了百分之几的丢包说明链路无法支撑满速千兆中间某个环节已经到达极限。注意-b参数在UDP和TCP模式下的行为有区别UDP模式下-b指定的是发送速率上限TCP模式下-b也可以限制发送速率但TCP本身会根据网络状况调整速率限制的效果不如UDP明显。想测“链路最大承受能力”时用UDP更直接。5.2 反向测速家里没有第二台电脑时怎么办iperf3默认是客户端向服务端推数据。但实际场景中我们经常遇到只有一台电脑、对方的设备是NAS或电视盒子这种不方便敲命令的设备。这时候可以用-R参数让服务端往客户端推数据iperf3 -c 192.168.1.100 -R这条命令执行后数据方向是服务端到客户端。如果你的设备上启动NAS自带的iperf3服务然后在电脑上用-R测速就能测出NAS作为发送端时你的电脑接收性能如何。很多NAS系统的管理后台里内置了iperf3只要开启服务电脑端跑一下即可。注意-R只是改变数据传输方向但建立连接的方向不变仍然是客户端发起连接到服务端只是数据流方向反过来。这个细节在阅读结果时要注意别把sender和receiver搞反了。5.3 多流测试单线程跑不满时的解法某些高速网络环境下单线程iperf3并跑不满全部带宽。原因可能是CPU单核瓶颈、网卡队列分配、TCP窗口调优不理想等。这时候用-P参数并发多个流iperf3 -c 192.168.1.100 -P 4表示同时建立4个连接并发打流最终输出会汇总显示总带宽。我在测一台万兆网卡设备时单线程只能跑到6Gbps左右开了-P 4之后才能逼近9.4Gbps差异非常明显。注意-P参数不是越大越好并发过高反而会因为CPU软中断太频繁导致性能下降一般从2到4开始试。5.4 实战排障一个典型的慢速网络定位过程我在帮朋友排查过一次NAS拷贝速度只有35MB/s的问题。现象是网上邻居从电脑往NAS拖大文件稳定在35MB/s左右从来没超过40MB/s。排查步骤先跑iperf3 TCP测速结果约280Mbps相当于35MB/s和文件拷贝速度吻合。确认不是NAS磁盘瓶颈因为NAS内部做过RAID的磁盘阵列顺序读写能跑满千兆。换一条已知良好的成品网线重新测速带宽立即跳到950Mbps左右。仔细检查原来的网线发现RJ45水晶头只压了4根线芯。千兆网络需要8根线芯全部工作只有4根线时最多协商到100Mbps换算成文件速度大约就是10-11MB/s但因为网卡和交换机之间协商出了特殊状态实际跑到了比百兆高一些的速率极不稳定。这类问题如果只靠在线测速网站根本发现不了因为在线测速只测外网出口速度而问题出在本地物理链路上。iperf3的端到端测速正好弥补了这个盲区。6. 那些我踩过的坑和值得留意的细节最后这部分没有固定章法全是我在Windows上用iperf3这几年攒下来的零碎经验。每个坑都是真金白银的时间换来的提前说清楚能帮你少走很多弯路。6.1 常见报错排障速查表报错信息原因解决方案connect failed: 连接尝试失败防火墙拦截、IP写错、服务端没启动确认防火墙放行5201端口ping测试连通性检查服务端状态bind failed: Address already in use端口已被其他程序占用换一个端口比如iperf3 -s -p 6001客户端也相应加-p 6001unable to connect to server - server may have stopped running or firewall is blocking客户端指定端口与服务端不一致检查两端端口是否一致Permission denied服务端端口小于1024时Windows要求管理员权限使用默认5201端口即可或右键“以管理员身份运行”结果只有几Mbps无线网络信号差、网线质量差、网卡省电模式优先检查物理链路禁用网卡省电模式试一次iperf3.exe 已停止工作通常是DLL缺失或版本过旧重新完整解压官方包确认cygwin相关DLL与exe在同一目录6.2 笔记本测速记得关省电模式笔记本用户在测速时遇到带宽大幅度波动除了链路问题还要考虑Windows电源管理的坑。无线网卡和有线网卡默认都可能开启“允许计算机关闭此设备以节约电源”这会导致测速过程中网卡周期性休眠带宽曲线呈现锯齿状。处理办法打开设备管理器找到网络适配器 → 属性 → 电源管理取消勾选“允许计算机关闭此设备以节约电源”。测速期间建议把电源模式设置为“最佳性能”。6.3 测速结果不稳定先看杀毒软件Windows Defender和部分第三方杀毒软件会实时扫描网络数据包个别安全软件还会对iperf3这种高频发包工具做行为拦截导致测速结果忽高忽低。如果发现同样的链路前几天测950Mbps今天怎么测都只有三四百可以先退出安全软件特定模块再测一次。6.4 交换机和网卡的协商结果别忘了确认iperf3测出的带宽本质是链路中所有设备协商后的结果。如果交换机端口协商成了100Mbps哪怕你电脑网卡是2.5G的测出来也就是百兆。排查时可以登录交换机管理界面看端口协商状态或者用ipconfig /all查看本机网卡当前的连接速率。有些网卡驱动装了之后默认开着自协商和某些老交换机兼容性不佳会协商成100Mbps手动把网卡速率强制为1.0Gbps往往能解决。6.5 把iperf3变成你的长期工具我个人习惯把C:\iperf3这个目录整个打包放进U盘同时在U盘根目录放两个bat文件一个叫“测速服务端.bat”内容是iperf3 -s -i 1并加说明窗口标题另一个叫“测速客户端.bat”用set /p提示输入目标IP然后执行测速命令。这样即便去别人家里或者出外场不需要重新下载工具、重新配环境插上U盘就能测速。你还可以把每次测速结果存成带日期的文件名比如iperf3 -c 192.168.1.100 -t 30 --logfile C:\iperf3\log_20250114.txt积累一段时间后对比历史记录可以明显看出链路性能的变化趋势。网络问题往往不是突然坏的而是慢慢劣化的有历史数据才能定位“从何时开始变慢”。如果你第一次测速就成功跑到了950Mbps左右的带宽说明你的内网从网线到交换机到网卡都处于健康状态。如果没跑到别急着怀疑设备性能先从网线和水晶头查起——我排过的内网慢速案例里物理层的问题占了至少一半。