TCP BBR てぃーしーぴーびーびーあーる
BBRBottleneck Bandwidth and Round-trip propagation time輻輳制御Googleスループット
TCP BBRについて教えて
TCP BBRとは
BBR(Bottleneck Bandwidth and Round-trip propagation time)は、2016年にGoogleが発表した次世代の輻輳制御アルゴリズムです。Linux 4.9以降に組み込まれ、Google・Cloudflare・AkamaiなどのCDNや大規模サービスで採用されています。
従来の輻輳制御(Reno・CUBIC等)はパケットロスを輻輳のシグナルとして使います。しかしこの方法には問題があります。深いバッファを持つ機器(バッファブロート)ではパケットを溜め込んでからロスが起きるため、遅延が増大してから初めて反応します。
BBRは発想を根本的に変え、ネットワークの実際の「ボトルネック帯域幅」と「最小遅延(伝搬遅延)」を継続的に計測し、バッファを埋めすぎない最適な送信レートを決定します。これにより、バッファブロートに強く、衛星回線・長距離回線でも高いスループットを達成できます。
CUBICとBBRの比較
| 項目 | CUBIC(従来) | BBR(新世代) |
|---|---|---|
| 輻輳検知 | パケットロス | 帯域・遅延の変化 |
| バッファブロート | 影響を受けやすい | 影響を受けにくい |
| 高遅延回線 | 性能が出にくい | 高い性能を維持 |
| パケットロス耐性 | 高ロス環境では遅くなる | 高ロス環境でも比較的安定 |
| LAN環境 | 十分な性能 | ほぼ同等 |
| 実装の複雑さ | シンプル | やや複雑 |
歴史と背景
- 2016年:GoogleのNeal Cardwell等がBBRを発表し、Google B4 WANに導入。スループットが最大2700倍改善されたケースも報告
- 2016年:Linux 4.9に組み込まれ一般公開
- 2018年:BBRv2の研究が始まる
- 2019年:Google検索・YouTube・GCPのデフォルト輻輳制御アルゴリズムに
- 2022年:BBRv3の研究が進み公平性(CUBICとの共存)が改善される
BBRの2つのフェーズ計測
BBRの有効化(Linux)
# 現在の輻輳制御アルゴリズムを確認
sysctl net.ipv4.tcp_congestion_control
# BBRを有効化
sysctl -w net.ipv4.tcp_congestion_control=bbr
# 永続化(/etc/sysctl.conf に追記)
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 9002 | QUICの輻輳制御(BBRが参考にされた) |
| (論文) | Cardwell et al. 2016「BBR: Congestion-Based Congestion Control」 |
関連用語
- 輻輳制御 — BBRが属するTCPの機能
- TCP — BBRが実装されるプロトコル
- TCPウィンドウ制御 — BBRと組み合わさるフロー制御