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 三个吞吐量的关系

这三者的关系,可以用一张图说清楚:

吞吐量三层模型 理论吞吐 物理层极限:1 Gbps / 10 Gbps / 40 Gbps 实际吞吐 扣除协议开销:~940 Mbps(TCP 大包) 有效吞吐(Goodput) 仅统计应用层有用数据:~80 Mbps(含重传) 关键关系 理论吞吐 ≥ 实际吞吐 ≥ 有效吞吐 差距越大,说明协议开销或网络问题越严重

从上往下,每一层都在剔除「不干活」的部分。你想想看:

  • 理论吞吐到实际吞吐,丢的是协议头、帧间隙、前导码
  • 实际吞吐到有效吞吐,丢的是重传、控制包、应用层无效数据

我个人的习惯是:做容量规划用理论吞吐,做性能测试看实际吞吐,做用户体验评估只看有效吞吐。三个数字各有各的用处,别混着用。

一个小技巧:用 iperf3 测试时,加 -f m 参数可以只看有效吞吐(Mbps 格式)。配合 -P 并发流,能快速摸清链路的实际承载能力。

2.6 为什么这三个概念很重要?

你可能觉得,不就是三个定义嘛,记住就行了。但我在项目中见过太多因为概念混淆导致的乌龙:

  • 销售拿理论吞吐当卖点,客户实测达不到,投诉
  • 测试人员拿实际吞吐当有效吞吐,优化方向全错
  • 运维拿有效吞吐当链路容量,扩容过度浪费预算

所以这一节虽然基础,但真的值得你花时间消化。后面讲测试方法、工具选型、结果分析,全都建立在今天这三个概念之上。

最后提醒一句:任何时候看到「吞吐量」三个字,先问一句——你说的是哪个吞吐量?理论、实际、还是有效?问清楚了再往下聊。