4、带宽测试工具概览:iPerf3、Speedtest、Netperf、MTR、Traceroute
做网络性能优化这么多年,我手里最离不开的就是这几把「扳手」。你想想看,没有趁手的工具,光靠猜是搞不定带宽瓶颈的。今天我就把这五个最常用的工具掰开揉碎讲给你听。
核心观点:没有万能工具,只有最合适的组合。iPerf3 测极限吞吐,Speedtest 测用户感知,Netperf 测协议栈细节,MTR 和 Traceroute 负责定位路径问题。
4.1 iPerf3 —— 吞吐量测试的「硬通货」
我个人习惯把 iPerf3 放在工具箱第一位。为什么?因为它干净、直接、不玩虚的。说白了,它就是两台机器之间的一条「水管」,你开多大压力,它给你报多少流量。
我记得有一次帮客户排查 IDC 之间的带宽问题,运营商说给了 10Gbps 专线,结果业务方老说慢。我直接在两端起 iPerf3,一测只有 2.3Gbps。拿着这个数据去找运营商,对方立马老实了。嗯,这就是 iPerf3 的价值——它不给面子,只给真相。
我的小技巧:测试时一定要加 -P 参数开多线程。单线程往往压不满大带宽,尤其是高延迟链路。我一般先试 -P 4,不够再加到 -P 8。
# 服务端(先启动)
iperf3 -s -p 5201
# 客户端(TCP 测试,30秒,4个并行流)
iperf3 -c 192.168.1.100 -p 5201 -t 30 -P 4
# UDP 测试(指定带宽 1Gbps)
iperf3 -c 192.168.1.100 -u -b 1G -t 30
这里有个坑,我曾经踩过:UDP 测试如果不指定 -b,默认只有 1Mbps,你测出来会以为网络炸了。别笑,我真见过有人拿着这个数据去汇报的。
| 参数 | 作用 | 我的建议 |
|---|---|---|
-t |
测试时长(秒) | 至少 30 秒,太短不准确 |
-P |
并行流数 | 高延迟链路建议 4~8 |
-R |
反向模式(测下行) | 别忘了测双向 |
-u |
UDP 模式 | 配合 -b 指定带宽 |
4.2 Speedtest —— 用户感知的「温度计」
iPerf3 测的是网络「能不能跑」,Speedtest 测的是用户「感觉快不快」。这两个概念不一样。你想想看,用户不会关心你的 TCP 窗口大小,他只关心打开网页要几秒。
Speedtest 背后的原理其实不复杂:它找最近的服务器,下载一个大文件,算平均速度。但要注意,它选的是「最优路径」,不代表你的真实业务路径。我在项目中遇到过,Speedtest 测出来 500Mbps,但访问海外业务只有 10Mbps。为什么?因为 Speedtest 的服务器就在国内,而你的业务服务器在海外。
注意:Speedtest 的结果仅供参考,不能替代业务场景的端到端测试。尤其是跨国、跨运营商的场景,一定要用真实业务流量验证。
命令行版 speedtest-cli 也很好用,适合脚本化采集:
# 安装
pip install speedtest-cli
# 基础测试
speedtest-cli
# 只输出简洁结果
speedtest-cli --simple
4.3 Netperf —— 协议栈的「显微镜」
Netperf 这工具,说实话,日常排查用得不多。但当你需要深挖协议栈性能时,它是无可替代的。它能测的东西很细:TCP 发送/接收速率、UDP 丢包率、甚至 RR(请求-响应)延迟。
我记得有一次做 NFV(网络功能虚拟化)的性能调优,发现虚拟机的网络吞吐上不去。用 iPerf3 只能看到「慢」,但不知道慢在哪。换成 Netperf 的 TCP_RR 测试,发现请求-响应延迟比物理机高了 5 倍。这才定位到是虚拟交换机的中断合并策略有问题。
# 服务端
netserver -p 12865
# TCP 流测试
netperf -H 192.168.1.100 -p 12865 -l 30 -t TCP_STREAM
# TCP 请求-响应测试(RR)
netperf -H 192.168.1.100 -p 12865 -l 30 -t TCP_RR -- -r 64,1024
适用场景:当你怀疑协议栈本身有问题,或者需要对比不同内核参数、不同网卡驱动的性能时,Netperf 是你的首选。
4.4 Traceroute —— 路径的「导航仪」
Traceroute 这名字起得好,就是「追踪路由」。它通过发送 TTL 递增的包,让每一跳路由器都「现形」。说白了,就是让每个中间节点都回你一个 ICMP 超时消息,这样你就知道包走了哪条路。
我经常用它来回答一个经典问题:「为什么我访问 A 网站慢,访问 B 网站快?」答案往往在路径上。可能你的流量被绕到了半个地球之外,或者经过了某个拥塞的运营商互联点。
# Linux 下用 traceroute
traceroute -n www.example.com
# Windows 下用 tracert
tracert www.example.com
# 指定使用 TCP 而非 UDP(绕过某些防火墙)
traceroute -T -p 80 www.example.com
我的习惯:加 -n 参数不做 DNS 解析,速度快很多。另外,有些路由器不响应 ICMP,你会看到 * * *,这不代表断了,只是那台设备「沉默」了。
4.5 MTR —— Traceroute 的「升级版」
MTR 就是把 Traceroute 和 Ping 合在了一起。它持续向每一跳发送探测包,然后统计丢包率和延迟。你想想看,Traceroute 只给你看一次的快照,而 MTR 给你看一段时间的趋势——这差别太大了。
我曾经用 MTR 抓到一个「幽灵丢包」问题。某条链路的第 5 跳偶尔丢 2% 的包,但每次单次 Traceroute 都正常。MTR 跑了 5 分钟后,那个 2% 的丢包率清清楚楚地摆在那。拿着这个数据去跟运营商沟通,对方才承认那台设备有硬件故障。
# 基础用法(持续运行,按 Ctrl+C 停止)
mtr -n www.example.com
# 只跑 10 个周期,适合脚本
mtr -n -c 10 www.example.com
# 报告模式(跑完自动输出)
mtr -n -r -c 10 www.example.com
| 工具 | 核心能力 | 我最常用的场景 |
|---|---|---|
| iPerf3 | 端到端吞吐量 | 验证带宽是否达标 |
| Speedtest | 用户感知速度 | 快速评估网络质量 |
| Netperf | 协议栈细节 | 深度调优和对比测试 |
| Traceroute | 路径发现 | 排查路由绕路 |
| MTR | 持续路径质量 | 定位间歇性丢包 |
总结一下我的工具选择逻辑:
- 想确认带宽够不够 → iPerf3
- 想模拟用户感受 → Speedtest
- 想深挖协议栈 → Netperf
- 想知道包走了哪 → Traceroute
- 想抓间歇性问题 → MTR
嗯,这五个工具基本覆盖了日常带宽测试和瓶颈分析的 90% 场景。剩下的 10%,等你真正遇到的时候,自然会知道该用什么。工具是死的,思路是活的——记住这一点就够了。
想要更多资料,联系可可