使用 K 线图分析 BBR 拥塞控制算法

一、概述

1. 问题背景

在网络性能分析中,当只有一个吞吐率散点图需要分析链路带宽走势时,传统的分析方法存在局限性。移动平均线会随时间依次平滑掉所有细节,因此它是滞后的。而蜡烛图(即 K 线图)同时保留峰谷起始,更多细节被保留,通过按阶段绘制四点包络线又同时会显示移动平均的趋势。

2. 核心思想

通过蜡烛图分析 BBR 带宽变化,可以识别多种网络状态:

  • 随机波动和随机噪声
  • 微突发流量
  • 持续拥塞和逐渐拥塞
  • 新流侵入和退出
  • 探测比例和公平比例

3. 技术价值

蜡烛图通过实体长度、上影线、下影线长度等特征,能够刻画很多细节并得到很多结论。通过大阳线、大阴线、锤头、十字星、吊颈线等固有模式及其组合分析,可以深入理解 BBR 拥塞控制算法的运行状态。

二、蜡烛图基础

1. 起源与定义

蜡烛图(日本称为「けいせん」,Kei-sen)始于日本,早期用于统计米价走势,如今普遍用于金融领域。只有中国等少数国家叫「K 线图」,其余多称为「蜡烛图」。Kei-sen 发音也包括「线」的发音,疑似源于粤语音读。

2. 基本组成

一个标准的蜡烛图包含四个关键价格点:

  • 开盘价(Open):周期开始时的价格
  • 最高价(High):周期内的最高价格
  • 最低价(Low):周期内的最低价格
  • 收盘价(Close):周期结束时的价格

3. 形态特征

  • 实体:收盘价与开盘价之间的部分,反映价格变动幅度
  • 上影线:实体上方的细线,代表最高价与实体顶端(开盘价或收盘价)的距离
  • 下影线:实体下方的细线,代表最低价与实体底端(开盘价或收盘价)的距离

4. 常见模式

  • 大阳线:收盘价远高于开盘价,实体较长,表示强势上涨
  • 大阴线:收盘价远低于开盘价,实体较长,表示强势下跌
  • 锤头:下影线较长,实体较小,表示反转信号
  • 十字星:开盘价与收盘价接近,实体很小,表示市场犹豫
  • 吊颈线:上影线较长,实体较小,表示可能的反转

三、BBR 算法简介

1. 核心概念

BBR(Bottleneck Bandwidth and Round-trip propagation time)是 Google 推出的一种 TCP 拥塞控制算法。与传统的基于丢包的拥塞控制算法(如 CUBIC)不同,BBR 基于带宽和 RTT(往返时间)进行拥塞控制。

2. 工作原理

BBR 通过测量网络路径的瓶颈带宽和最小 RTT,动态调整发送速率。其主要状态包括:

graph LR
    A[Startup] -->|探测带宽| B[Drain]
    B -->|排空队列| C[ProbeBW]
    C -->|周期探测| D[ProbeRTT]
    D -->|测量 RTT| C

BBR 状态机

3. 关键参数

  • BtlBw(Bottleneck Bandwidth):瓶颈带宽
  • RtProp(Round-trip propagation time):最小往返时间
  • Delivery Rate:实际交付速率
  • Inflight:在途数据量

四、BBR 模拟场景分析

1. 场景设定

以下是一个典型的 BBR 模拟场景:

  • t < 100:单流正常
  • 100 < t < 200:随机突发
  • t = 250:新流侵入
  • 300 < t < 350:随机突发
  • t = 500:新流侵入
  • 600 < t < 650:持续拥塞
  • 750 < t < 900:逐渐拥塞
  • t = 1050:带宽加倍
  • 1050 < t < 1250:带宽随机波动
  • 1300 < t < 1450:突发波动
  • 1450 < t < 1550:突发波动

2. 带宽变化识别

通过蜡烛图分析 BBR 带宽变化:

A. 随机波动

特征:实体较小,上下影线长度接近,表示带宽在较小范围内波动。

B. 微突发

特征:下影线较长或上影线较长,实体较小,表示短时间内带宽的突然变化。

C. 持续拥塞

特征:连续的大阴线,实体较长,表示带宽持续下降。

D. 逐渐拥塞

特征:实体逐渐变长且呈阴线趋势,表示带宽逐渐恶化。

E. 新流侵入

特征:突然的大阴线,下影线较长,表示带宽被新流抢占。

F. 退出

特征:突然的大阳线,上影线较长,表示流退出后带宽释放。

3. 分析优势

对移动平均而言,不同 alpha 的平滑细节不同,即便和算术平均放一起也看不出任何趋势,几乎无法分析。而蜡烛图能够:

  • 保留峰谷起始信息
  • 显示阶段内的最大值和最小值
  • 同时展示趋势和细节
  • 通过形态识别各种网络状态

五、Python 实现蜡烛图绘制

1. 环境准备

A. 安装依赖

pip3 install virtualenv
virtualenv py3env
source py3env/bin/activate
pip3 install mplfinance

B. 所需库

  • mplfinance:专门用于金融数据可视化的 Python 库
  • numpy:数值计算库
  • pandas:数据处理库

2. 基础示例

A. 数据准备

import mplfinance as mpf
import numpy as np
import pandas as pd

data_list = []
data_list.append((100, 104, 98, 102))
data_list.append((102, 108, 88, 96))
data_list.append((96, 100, 85, 93))
data_list.append((93, 115, 93, 105))

data = np.array(data_list).reshape(-1, 4)
df = pd.DataFrame(data, columns=['Open', 'High', 'Low', 'Close'])

dates = pd.date_range(start='2023-01-01', periods=len(df), freq='D')
df.index = dates

B. 图表绘制

market_colors = mpf.make_marketcolors(up='g', down='r')
style = mpf.make_mpf_style(marketcolors=market_colors)

mpf.plot(df, type='candle')

C. 输出结果

绘制完成后,将生成标准的蜡烛图,其中:

  • 绿色实体表示收盘价高于开盘价(阳线)
  • 红色实体表示收盘价低于开盘价(阴线)

3. BBR 数据处理

A. 数据转换

将 BBR 的吞吐率数据转换为蜡烛图格式:

  • Open:周期开始时的带宽
  • High:周期内的最大带宽
  • Low:周期内的最小带宽
  • Close:周期结束时的带宽

B. 时间窗口选择

选择合适的时间窗口对数据分组:

  • 过短:细节过多,难以识别趋势
  • 过长:细节丢失,类似移动平均

建议根据实际场景调整,通常可以设置为 RTT 的整数倍。

六、扩展应用

1. Sigmoid 函数预处理

当有多个指标可以分析时,可以使用 sigmoid 函数进行特征预处理。Sigmoid 函数普遍运用于 AI 大模型,将值域映射到固定区间(一般 0 到 1),通过设定激发阈值来获得输出或不输出。

但在只有一个指标(如吞吐率散点图)的情况下,蜡烛图是更直观的分析方法。

2. 与其他方法对比

方法优点缺点适用场景
移动平均平滑噪声,显示趋势滞后,丢失细节长期趋势分析
算术平均计算简单丢失所有波动信息静态统计
蜡烛图保留细节,显示趋势需要人工识别模式动态性能分析

3. 实际应用场景

  • 网络性能监控:实时分析链路带宽变化
  • 故障诊断:识别拥塞原因和类型
  • 容量规划:分析带宽使用趋势
  • 算法优化:评估 BBR 参数调整效果

七、总结

蜡烛图为 BBR 拥塞控制算法的性能分析提供了一种直观且信息丰富的方法。相比传统的移动平均或算术平均,蜡烛图能够同时保留趋势和细节,通过实体长度、上下影线等特征识别各种网络状态。

结合 Python 的 mplfinance 库,可以轻松实现 BBR 数据的蜡烛图可视化,为网络性能分析和故障排查提供有力工具。


参考资料

  1. K 线图下的 BBR
最后修改:2026 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏