Loading... # 使用 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,动态调整发送速率。其主要状态包括: ```mermaid graph LR A[Startup] -->|探测带宽| B[Drain] B -->|排空队列| C[ProbeBW] C -->|周期探测| D[ProbeRTT] D -->|测量 RTT| C ```  ## 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. 安装依赖 ```bash pip3 install virtualenv virtualenv py3env source py3env/bin/activate pip3 install mplfinance ``` ### B. 所需库 - mplfinance:专门用于金融数据可视化的 Python 库 - numpy:数值计算库 - pandas:数据处理库 ## 2. 基础示例 ### A. 数据准备 ```python 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. 图表绘制 ```python 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](https://blog.csdn.net/dog250/article/details/143260289) 最后修改:2026 年 01 月 18 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏