什么是带宽时延积
带宽时延积(BDP)等于带宽乘以往返时延,表示一条链路上「在途未确认数据」的容纳能力。TCP 的吞吐上限近似等于窗口除以 RTT:窗口够大才能填满管道,窗口小则只能跑出窗口除以时延的速度。这就是长肥管道(高带宽、高时延)上单条连接跑不满带宽的原因,也是判断「慢」属于窗口受限还是丢包压制的第一步计算。
基本信息
| 计算式 | BDP = 带宽 × RTT,示例 1 Gbps × 20 ms = 2.5 MB |
|---|---|
| 吞吐上限 | 近似等于窗口 ÷ RTT,64 KB 窗口配 20 ms 约 3.2 MB/s |
| 查看窗口 | ss -tni 看 cwnd、rtt、rwnd 与 wscale |
| 内核参数 | net.ipv4.tcp_rmem、tcp_wmem、tcp_window_scaling |
| 适用平台 | Linux(iproute2 的 ss 与 sysctl) |
典型使用场景
- 跨地域传输慢:先算 BDP 判断窗口是否够用,再决定是否调参
- 文件下载打不满带宽:区分是窗口受限、丢包压制还是磁盘写入瓶颈
- 跨洋专线验收:按 BDP 核对接收窗口与内核缓冲上限是否匹配
- 评估多连接方案:单连接受限于 BDP 时,多连接或多路复用往往是更快的解法
- 排查吞吐忽高忽低:结合重传计数判断是否因丢包反复收缩窗口
计算与验证
计算与验证
ping -c 5 10.0.0.5 | tail -1 # 先拿到 RTT
# BDP = 带宽 × RTT:1 Gbps × 20 ms = 20 Mbit = 2.5 MB
# 例:64 KB 窗口 + 20 ms RTT → 64KB / 0.02s ≈ 3.2 MB/s ≈ 26 Mbps 上限
ss -tni state established '( dport = :443 )' | head # 看 cwnd、rtt、rwnd、wscale
sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem net.ipv4.tcp_window_scaling
ss -ti state established | grep -o 'retrans:[0-9]*' | sort | uniq -c # 重传分布判据与处置
| 观察 | 结论 | 处置 |
|---|---|---|
| cwnd 小且重传增长 | 丢包压制吞吐,窗口被迫收缩 | 先解决丢包,再谈调参 |
| wscale 为 0 或接收窗口很小 | 窗口不足,BDP 填不满 | 确认窗口缩放开启并调大缓冲上限 |
| 窗口已足够大仍跑不满 | 瓶颈不在单连接窗口 | 查并发连接数、应用处理与磁盘 |
| RTT 波动大 | 队列或路径拥塞 | 查沿途设备队列与限速策略 |
BDP 是在途数据量:跨洋 200 ms 链路跑 1 Gbps 需要约 25 MB 在途窗口,靠单条 TCP 连接几乎不可能,这正是 CDN 与多连接分发存在的现实理由。
调参顺序建议:先用 iperf3 单流测出实际吞吐并记录重传数,再按 BDP 反推需要的窗口;改完立刻复测,只有吞吐随窗口线性上升,才说明瓶颈确实在窗口。