在Linux环境下进行精准的带宽测试,核心在于根据测试场景选择正确的工具并理解底层协议参数,对于内网性能压测,iperf3是无可替代的行业标准;而对于外网连通性测试,speedtest-cli提供了最直观的参考,掌握这两类工具的组合使用,结合TCP协议调优,才能获得真实的网络吞吐量数据,避免因配置不当导致的误判。

内网极限压测:iperf3的专业应用
在服务器迁移、数据中心网络验收或高性能计算(HPC)环境搭建中,测试内网真实带宽是首要任务,iperf3作为C/S架构工具,能排除磁盘I/O干扰,纯粹测试内存到内存的网络吞吐能力。
基础服务端与客户端部署
测试前需确保防火墙(如firewalld或iptables)已放行iperf3默认端口或指定端口,在接收端运行服务模式:
iperf3 -s
在发送端发起连接,默认运行10秒:
iperf3 -c <服务器IP>
关键参数调优与多线程优化
默认的单线程测试往往无法跑满万兆网卡或高带宽链路,为了最大化利用带宽,必须使用并行流(-P参数),建议将线程数设置为CPU核心数的2倍或与网卡队列数匹配,
iperf3 -c <服务器IP> -P 8 -w 1M
此处-w 1M至关重要,它将TCP窗口大小设置为1MB,在长肥网络(Long Fat Network,高延迟高带宽)中,较小的默认窗口会严重限制吞吐量,导致带宽测不准,只有当窗口大小大于带宽延迟积(BDP)时,才能达到理论网速。
双向测试与反向模式
为了检测全双工网卡的真实性能,应使用双向测试参数:
iperf3 -c <服务器IP> -P 4 --bidir
使用-R参数可以测试反向带宽,即从服务器向客户端发送数据,这对于排查非对称网络环境(如不同运营商线路)非常有用。
外网带宽检测:speedtest-cli实战
对于连接互联网的服务器,运维人员更关心实际出口带宽及运营商提供的速率稳定性,speedtest-cli基于Python开发,利用Speedtest.net的全球节点进行测试。
安装与基础测速
安装通常通过pip或包管理器完成,执行speedtest-cli即可自动选择最近的服务器进行测试,输出结果中,Download(下载)和Upload(上传)是核心指标,同时关注Ping值,这反映了网络链路的延迟状况。
指定节点与生成分享链接
自动选择的节点可能并非最优,建议先列出节点列表speedtest-cli --list,根据地理位置或运营商ID手动指定节点,
speedtest-cli --server <ServerID>
使用--share参数可以生成测试结果的图片链接,便于在报告中直观展示。

实时流量监控与进程级分析
带宽测试是瞬时值,而长期监控需要借助iftop和nethogs。
iftop:接口级流量监控
iftop类似于top命令,但它针对网络流量,它能实时显示每个连接的带宽占用、发送接收速率,通过-n参数禁止解析主机名,-P参数显示端口号,可以更清晰地看到业务流量走向:
iftop -n -P
重点关注TX(发送)和RX(接收)列的峰值,判断是否存在突发流量。
nethogs:进程级带宽占用
当服务器带宽跑满但不知道是哪个进程导致时,nethogs是最佳选择,它按进程分组统计流量,能快速定位异常上传或下载的程序:
nethogs eth0
相比iftop,nethogs能直接展示PID和程序名称,是排查被入侵或异常业务逻辑的利器。
深度优化:突破Linux网络栈限制
即使使用了iperf3,如果Linux内核参数未优化,测试结果往往不理想,专业的网络测试必须包含系统层面的调优。
调整TCP缓冲区
Linux默认的读写缓冲区可能较小,对于万兆网卡,建议在/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
调整后执行sysctl -p生效,这能显著提升大数据包传输时的吞吐量。
CPU亲和性与中断平衡
网络中断处理如果集中在单个CPU核心,会成为性能瓶颈,使用irqbalance服务可以自动平衡中断,对于极致性能测试,可以将网卡中断绑定到特定CPU核心,并关闭CPU节能模式(如cpufreq-set),使CPU始终处于高性能状态。
硬件层校验
在软件测试前,必须确认物理链路协商速率,使用ethtool <网卡名>查看Speed和Duplex,如果显示为100Mb/s或Half Duplex,无论软件如何调优,带宽都无法提升,此时需检查网线、交换机端口配置。

常见误区与专业建议
误区:混淆比特与字节
iperf3默认显示单位为Mbits/sec(兆比特每秒),而日常下载速度通常指MB/s(兆字节每秒),换算关系为1 Byte = 8 bits,若测试结果为800 Mbits/sec,实际下载速度约为100 MB/s。
误区:忽视丢包率
在iperf3结果中,除了带宽,必须关注retransmits(重传)字段,如果重传次数较多,说明网络存在拥塞或物理层不稳定,此时的高带宽是虚假的,TCP拥塞控制算法正在降速以维持连接。
相关问答
Q1:为什么使用iperf3测试时,速度始终无法超过1Gbps,但网卡是10G的?
A: 这通常是由TCP窗口大小限制或CPU软中断处理能力不足导致的,首先尝试增大-w参数(如-w 4M);检查是否开启了CPU节能模式;确认交换机端口和网线是否支持10Gbps速率,如果是虚拟机环境,还需检查宿主机的vCPU分配和网络队列配置。
Q2:speedtest-cli测试结果与运营商承诺的带宽不一致怎么办?
A: 运营商承诺的带宽通常是接入层的峰值,而speedtest-cli测试的是端到端的实际可达速率,如果差异过大,建议:1. 使用--server参数选择同一运营商内的节点;2. 检查服务器是否开启了流量整形(TC);3. 排查内网其他设备是否占用了出口带宽。
能帮助您在Linux环境下更精准地掌握网络带宽状况,如果您在测试过程中遇到特殊的网络拓扑环境,欢迎在评论区分享您的配置方案,我们一起探讨最佳实践。















