首页/网络/网络排障速查/带宽时延积与单连接吞吐上限

带宽时延积与单连接吞吐上限

长肥管道(高带宽高时延)上单条 TCP 打不满带宽:窗口必须 ≥ 带宽×RTT;学会算 BDP 能立刻判断『慢』是窗口受限还是路径丢包。

网络排障速查网络更新于 2026-10-13

什么是带宽时延积

带宽时延积(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 反推需要的窗口;改完立刻复测,只有吞吐随窗口线性上升,才说明瓶颈确实在窗口。

易错点

  • 用「带宽足够」解释吞吐低:忽略了时延乘窗口的乘积约束
  • 只盯单连接速率,不评估多连接或多路复用的可行性
  • 不看重传就盲目调大缓冲:丢包导致的吞吐下降,调窗口只会加重排队
  • 拿瞬时 RTT 当计算依据:应取稳定期的往返时延均值,否则 BDP 估算偏差很大

数据来源与参考

  • RFC 7323:TCP 窗口缩放选项
  • Linux 内核文档:tcp_rmem / tcp_wmem

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌