2、吞吐量基础概念:什么是吞吐量?理论吞吐 vs 实际吞吐 vs 有效吞吐
吞吐量这个词,做网络的人天天挂在嘴边。但说实话,很多人对它的理解其实挺模糊的。
我记得刚入行那会儿,跟一个硬件厂商对测试报告。对方信誓旦旦说设备能跑满线速,结果我一测,连标称值的六成都不到。后来才发现,他们说的「吞吐量」跟我理解的压根不是一回事。
所以这一节,咱们先把概念掰扯清楚。你只有搞懂了吞吐量的三个层次,后面做测试才不会踩坑。
2.1 吞吐量的本质定义
吞吐量,说白了就是单位时间内成功传输的数据量。单位通常是 bps(比特每秒),或者 pps(包每秒)。
公式很简单:
吞吐量 = 成功传输的数据量 / 传输时间
但这里有个关键点——「成功传输」。不是发出去就算,得对方确认收到了才算。我在项目中遇到过有人拿发送端的计数器当吞吐量,结果链路丢包 30% 还浑然不觉,那数据根本不能用。
核心要点:吞吐量必须基于「成功交付」来统计。只看发送不看接收,那是自欺欺人。
2.2 理论吞吐:纸面上的天花板
理论吞吐,就是理想状态下链路能承载的最大数据量。它只跟物理层参数有关。
举个例子:
- 千兆以太网,理论吞吐就是 1 Gbps
- 万兆以太网,理论吞吐就是 10 Gbps
- 40G 链路,理论吞吐就是 40 Gbps
嗯,听着很简单对吧?但实际中很少有人能跑到这个值。为什么?因为理论吞吐假设了太多理想条件:
- 没有信号衰减
- 没有协议开销
- 没有处理延迟
- 没有冲突重传
这些条件在真实网络里一个都不成立。所以理论吞吐更像一个「天花板」,告诉你最多能到哪儿,但别指望真能摸到。
我的习惯:做方案设计时,理论吞吐只用来算链路容量上限。真正做性能评估,我从来不看这个数字。
2.3 实际吞吐:你真正能测到的
实际吞吐,就是在真实网络环境下,你拿工具测出来的那个值。它受一堆因素影响:
- 协议开销(TCP 头、IP 头、帧头、确认包)
- 设备处理能力(CPU、NPU、转发芯片)
- 链路质量(误码率、重传率)
- 流量模型(大包还是小包、突发还是平稳)
我举个例子你就明白了。同样是千兆链路:
| 场景 | 理论吞吐 | 实际吞吐(典型值) | 差异原因 |
|---|---|---|---|
| TCP 大包(1460 字节 payload) | 1 Gbps | ~940 Mbps | TCP/IP 头开销约 6% |
| TCP 小包(64 字节 payload) | 1 Gbps | ~200 Mbps | 包处理瓶颈 + 协议开销占比高 |
| UDP 大包 | 1 Gbps | ~980 Mbps | 无确认机制,开销更小 |
看到了吧?同样一条链路,测出来的实际吞吐能差 4 倍。所以你说「我测了吞吐量」,你得说清楚测的是什么场景下的。
避坑指南:我曾经见过一份测试报告,用 1518 字节大包测出 99% 的线速,就宣称设备性能达标。结果客户实际跑小包业务,直接卡死。记住:实际吞吐必须跟你的业务模型匹配。
2.4 有效吞吐:真正干活的速率
有效吞吐,也叫 Goodput。它剔除了所有「不干活」的字节。
什么意思?你想想看:
- TCP 三次握手的包,算不算业务数据?不算。
- 重传的包,算不算?不算。
- TCP 确认包(ACK),算不算?不算。
- IP 头、TCP 头、以太网帧头,算不算?不算。
有效吞吐只统计「应用层真正收到的有用数据」。这才是用户感知到的速度。
举个例子:
你下载一个 100 MB 的文件。
实际传输过程中,线路上跑了 120 MB 的数据(含重传和协议头)。
耗时 10 秒。
实际吞吐 = 120 MB × 8 / 10 s = 96 Mbps
有效吞吐 = 100 MB × 8 / 10 s = 80 Mbps
用户只知道「我下载 100 MB 用了 10 秒」,他不会管你线路上跑了多少额外数据。所以有效吞吐才是最终用户体验的衡量标准。
我的经验:做性能优化时,我优先看有效吞吐。实际吞吐高但有效吞吐低,说明协议开销或重传太多,得优化 TCP 参数或应用层逻辑。
2.5 三个吞吐量的关系
这三者的关系,可以用一张图说清楚:
从上往下,每一层都在剔除「不干活」的部分。你想想看:
- 理论吞吐到实际吞吐,丢的是协议头、帧间隙、前导码
- 实际吞吐到有效吞吐,丢的是重传、控制包、应用层无效数据
我个人的习惯是:做容量规划用理论吞吐,做性能测试看实际吞吐,做用户体验评估只看有效吞吐。三个数字各有各的用处,别混着用。
一个小技巧:用 iperf3 测试时,加 -f m 参数可以只看有效吞吐(Mbps 格式)。配合 -P 并发流,能快速摸清链路的实际承载能力。
2.6 为什么这三个概念很重要?
你可能觉得,不就是三个定义嘛,记住就行了。但我在项目中见过太多因为概念混淆导致的乌龙:
- 销售拿理论吞吐当卖点,客户实测达不到,投诉
- 测试人员拿实际吞吐当有效吞吐,优化方向全错
- 运维拿有效吞吐当链路容量,扩容过度浪费预算
所以这一节虽然基础,但真的值得你花时间消化。后面讲测试方法、工具选型、结果分析,全都建立在今天这三个概念之上。
最后提醒一句:任何时候看到「吞吐量」三个字,先问一句——你说的是哪个吞吐量?理论、实际、还是有效?问清楚了再往下聊。