什么是带宽时延积?
带宽时延积(Bandwidth-Delay Product,简称 BDP)指的是在任一时刻,网络链路上能够"在途传输"的最大数据量。它等于链路带宽乘以往返时延(RTT)。BDP 是 TCP 调优中的核心概念:要想充分利用高速率、高延迟的链路(也就是所谓的"长肥网络",long fat network),TCP 接收窗口至少要不小于 BDP;否则,实际吞吐量会被远远限制在可用带宽之下。
如何使用本计算器
先输入链路带宽,并选择对应单位(bit/s、Kbit/s、Mbit/s 或 Gbit/s);然后填入往返时延(单位为毫秒),这个数值通常就是 ping 命令所报告的延迟。计算器会给出以比特、字节和千字节为单位的 BDP 结果。其中的字节值可直接用于设置套接字缓冲区或 TCP 窗口的大小。
计算公式详解
BDP(比特)= 带宽(比特/秒)× RTT(秒)。计算时,先把带宽换算成每秒比特数,再把 RTT 从毫秒换算成秒(即除以 1000)。将比特结果除以 8 即可得到字节数,字节数再除以 1024 则得到千字节(KB)。
$$\text{BDP (bytes)} = \frac{\text{Bandwidth} \times \text{Unit} \times \dfrac{\text{RTT (ms)}}{1000}}{8}$$
计算实例
假设有一条 100 Mbit/s 的链路,RTT 为 40 ms。此时带宽 = 100,000,000 bit/s,RTT = 0.040 秒。则 \(\text{BDP} = 100{,}000{,}000 \times 0.040 = 4{,}000{,}000\) 比特 = 500,000 字节 ≈ 488.28 KB。要想跑满这条链路,你的 TCP 窗口至少应设置为约 500 KB。
解释您的 BDP 结果
BDP 是发送方必须能够在线路上保持的未确认数据量,以充分利用链接。TCP 在必须等待确认之前只能有一个窗口的数据处于未决状态,因此接收窗口必须满足:
$$\text{TCP 窗口} \ge \text{BDP}$$如果窗口小于 BDP,发送方传输一个窗口的数据,然后在等待 ACK 的往返时间的其余部分闲置。无论链接提供多少带宽,可实现的吞吐量都会受到限制:
$$\text{吞吐量} \approx \frac{\text{窗口(字节)} \times 8}{\text{RTT(秒)}}$$例如,在 150 ms 跨大陆路径上的经典 64 KB 窗口只能产生 \(\frac{65{,}536 \times 8}{0.150} \approx 3.5\) Mbit/s —— 远低于 100 Mbit/s 链接的容量。
- 默认窗口(无缩放):原始 16 位 TCP 窗口字段的最大值为 65,535 字节(64 KB)。在低延迟的局域网上,这通常足够了。
- 窗口缩放(RFC 1323 / RFC 7323):任何 BDP 超过 64 KB 的路径都需要 TCP 窗口缩放选项,该选项将公告窗口乘以 2 的幂,最多可达约 1 GB。必须在两个端点上启用此选项(且不能被中间设备剥离)。
- 窗口过小:吞吐量被限制为窗口 ÷ RTT;将延迟加倍会将固定窗口的可达速度减半。这就是为什么"长胖网络"(高 BDP)在快速链接上感觉很慢。
- 窗口过大:设置远大于 BDP 的窗口会浪费内存并可能增加缓冲/延迟,但不会改善稳态吞吐量。
作为实际规则,将最大 TCP 缓冲区设置为至少 BDP(通常使用 2× BDP 来吸收 ACK 时序和重传)。现代操作系统会自动调整窗口向上朝向 BDP,因此主要需要验证的是窗口缩放在端到端之间是否被允许。
典型 RTT 和带宽参考值
当您没有测量的 RTT 时,使用这些典型范围作为输入。实际 RTT 取决于物理距离、路由、队列和介质;卫星链接由地球同步轨道往返的传播延迟主导。
| 网络路径 | 典型 RTT | 备注 |
|---|---|---|
| 相同局域网 / 数据中心 | < 1 ms | 交换以太网,本地子网 |
| 相同城域 / ISP | 1–10 ms | 本地对等互联,地区服务器 |
| 相同国家 | 10–40 ms | 跨地区陆地光纤 |
| 跨大陆 / 洲际 | 80–150 ms | 例如美国–欧洲、美国–亚洲 |
| 地球同步卫星 | 500–700 ms | ~36,000 千米往返每跳 |
按连接类型的常见接入带宽(下游,标称):
| 连接类型 | 典型带宽 |
|---|---|
| ADSL | 5–24 Mbit/s |
| VDSL / 固定无线 | 25–100 Mbit/s |
| 有线电视(DOCSIS) | 100–1000 Mbit/s |
| 光纤到家(FTTH) | 100 Mbit/s – 10 Gbit/s |
| 4G LTE | 10–100 Mbit/s |
| 5G | 100 Mbit/s – 1 Gbit/s+ |
| 千兆以太网(局域网) | 1 Gbit/s |
| 10 千兆以太网 | 10 Gbit/s |
在计算 BDP 之前将引用的计划速度在单位之间转换,Gbps 转 Mbps 或 Kbps 转 Mbps 转换会有帮助;请记住 BDP 公式需要原始位每秒。
常见问题
为什么延迟会影响吞吐量?因为发送方在任一时刻只能有一个窗口大小的未确认数据处于发送状态。如果窗口比 BDP 小,发送方就会停下来等待 ACK 确认,从而导致带宽被白白浪费。
应该用字节还是比特?带宽通常以比特为单位标注,但缓冲区和窗口大小一般以字节为单位进行配置,因此用于调优时,字节结果最为实用。
该使用怎样的 RTT 值?应使用两个端点之间的往返时延,通常通过 ping 命令测得,也可以根据地理距离进行估算。