带宽-延迟乘积
计算 BDP 和最优 TCP 缓冲区大小
如何使用带宽-延迟乘积
- 1输入链路带宽和往返时间。
- 2读取以比特和字节表示的带宽时延积。
- 3用它来为长距离链路规划 TCP 缓冲与窗口。
带宽时延积(BDP)
BDP = 带宽(比特/秒) × RTT(秒)BDP 是链路上可同时“在途”的数据量;它决定了保持管道满载所需的最小 TCP 窗口。
100 Mbps 链路、100 ms RTT 的 BDP 约 1.25 MB,窗口必须超过它才能避免利用率不足。
BDP = 带宽 × RTT,单位是比特(换算成字节要除以 8)。它回答一个关键问题:**要让这条链路不空闲,管道里必须同时有多少数据在飞?**如果 TCP 窗口或中间设备的缓冲区小于 BDP,链路就会在等待确认时空转,实际吞吐量远低于带宽。
BDP 对网络设备的缓冲区设计也至关重要。经典经验法则要求路由器缓冲 ≥ BDP,一条 10 Gbps、RTT 200 ms 的链路就需要 250 MB 缓冲——这在核心路由器上是巨大的成本和延迟开销,因此后来提出了更精细的模型(如 Stanford 模型,缓冲 = BDP ÷ √N,N 为并发流数)。**这也是「缓冲膨胀」(Bufferbloat)问题的来源**:过大的缓冲让排队延迟飙升,视频会议卡顿但测速却很快。
| 链路类型 | 带宽 | RTT | BDP |
|---|---|---|---|
| 局域网 | 1 Gbps | 0.5 ms | 62.5 KB |
| 同城专线 | 1 Gbps | 5 ms | 625 KB |
| 跨省骨干 | 1 Gbps | 30 ms | 3.75 MB |
| 中美海底光缆 | 1 Gbps | 180 ms | 22.5 MB |
| GEO 卫星 | 100 Mbps | 550 ms | 6.9 MB |
| 5G 移动网络 | 300 Mbps | 30 ms | 1.1 MB |
典型链路的 BDP 与所需缓冲
常见问题
BDP 对 TCP 为何重要?
若窗口小于 BDP,发送方等 ACK 而链路永远填不满。
缓冲怎么定?
把 TCP 窗口和中间缓冲至少设为 BDP。
BDP 随距离增大吗?
会;RTT 随距离上升,所以长途链路需要更大的窗口。
怎么测量自己链路的 BDP?
两步:① 用 speedtest 或 iperf 测带宽;② 用 ping 测 RTT(或用 mtr 看整条路径)。然后 BDP = 带宽(bps) × RTT(s) ÷ 8 得到字节数。例如带宽 200 Mbps、ping 值 40 ms:BDP = 2×10⁸ × 0.04 ÷ 8 = 1 MB。接着检查系统的 TCP 窗口设置是否 ≥ 1 MB,若小于则需调大才能跑满 200 Mbps。
为什么跨国传输特别慢?
主因就是 BDP 太大。中美 RTT 约 150–200 ms,即使带宽 1 Gbps,BDP 也有约 20 MB,需要 20 MB 的 TCP 窗口才能跑满。默认窗口通常不够,加上丢包率较高(跨洋链路 0.1%–1% 很常见),TCP 会频繁降速。解决方案:① 启用 BBR 拥塞控制;② 使用广域网加速/CDN;③ 用多线程并行传输突破单连接窗口限制;④ 对大文件用 UDP 加速协议(如 QUIC、Aspera、镭速)。
