BBR

読み:びーびーあーる / 英語表記:Bottleneck Bandwidth and Round-trip propagation time

Googleが開発したTCPの輻輳制御アルゴリズム。経路のボトルネックの帯域と、往復の伝搬遅延(RTT)を測定し、その結果から送信の速さを決める。パケットの損失ではなく、帯域と遅延の推定をもとに制御する点が特徴。

イマシルちゃんの解説

これまでのTCPは、「パケットがなくなった=道が混んでる!」って考えて、送る量を減らしていたんだ。
でも、それだと、道がいっぱいになるまで詰め込んでから、慌ててブレーキをかけることになっちゃう。

BBRは、「この道の一番狭いところは何台通れるかな?」「行って帰ってくるのに何秒かかるかな?」を、こまめに測るんだ。
そのちょうどいい量だけ送るから、渋滞を起こさずに、速く送れるんだよ!

より深い解説

定義

BBR(Bottleneck Bandwidth and Round-trip propagation time)は、2016年にGoogleが発表したTCPの輻輳制御アルゴリズムである。Linuxのカーネルに実装され、YouTubeやGoogleのサービスで使われている。QUICでも利用されている。

従来の方式との違い

損失ベースの方式(Reno、CUBICなど)BBR
混雑の判断材料パケットの損失ボトルネックの帯域とRTTの測定値
送信量の増やし方損失が起きるまで増やし続ける推定した帯域と遅延から、ちょうどよい量にする
ルータのバッファいっぱいになるまで使う(遅延が増える)なるべくためない(遅延が小さい)
損失が多い回線損失のたびに送信量を大きく減らし、速度が出ない損失だけでは減らさないため、速度を保ちやすい

従来の方式は、ルータのバッファがあふれてパケットが捨てられるまで送る量を増やすため、大きなバッファを持つ機器では、キューに大量のパケットがたまり、遅延が大きくなる(バッファブロート)という問題があった。

考え方:最適な動作点

ネットワークに送り込んでおくべきデータの量の目安は、次の帯域遅延積(BDP)である。

送り込むべきデータの量 = ボトルネックの帯域 × 往復の伝搬遅延(RTT)

これより少ないと回線を使い切れず、多いとルータのキューにたまって遅延が増える。BBRは、帯域とRTTの最小値を継続的に測定して、この最適な量に近づけるように送信の速さ(ペーシング)を調整する。

動作の段階

段階内容
STARTUP送信量を急速に増やして、利用できる帯域を探す
DRAINSTARTUPでキューにたまった分を減らす
PROBE_BW推定した帯域で送りつつ、ときどき少し多く送って、帯域が増えていないかを探る
PROBE_RTT一時的に送信量を減らし、キューが空の状態での最小のRTTを測り直す

課題

初期のBBR(v1)は、損失ベースの方式と同じ回線を共有したときに帯域を多く取りすぎる、損失が多くても送り続けてしまう、などの公平性の問題が指摘された。これらを改善したBBRv2、BBRv3が開発されている。

名前の似たアルゴリズムとの区別

名前分野内容
BBRTCPの輻輳制御帯域とRTTから送信の速さを決める
HMAC暗号共通鍵とハッシュ関数によるメッセージ認証コード
RSA暗号素因数分解の難しさに基づく公開鍵暗号
SPF計算(Shortest Path First)ルーティングOSPFが最短経路を計算するアルゴリズム(ダイクストラ法)

実際の試験ではここに出る!

この用語が出てくる記事

↑