TCP輻輳制御(CUBIC・BBR)とは?ネットワークの混雑を検知して送信速度を調整するしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

TCP輻輳制御とは(全体像)

TCP輻輳制御とは、ネットワークが混雑したのを検知して、送る速度を自動で落としたり上げたりするしくみである。みんなが好き勝手に送ると道がパンクするので、公平に分け合うために調整するのだ。

身近にたとえると、高速道路の渋滞を避ける運転のようなもの。混んできたと感じたら速度をゆるめ、すいていればまた上げる。最初は様子を見ながら、だんだん速度を上げていくのである。

押さえるのは、CUBICとBBRという2つの方式の違いと、速度を調整するいくつかの機構である。


詳しく:CUBICとBBRの違いと機構だけ覚えれば戦える

ここが記事の心臓部。まず代表的な2つの方式を見ていくのだ。

CUBIC と BBR

方式混雑の判断特徴
CUBICパケットの損失で判断(損失ベース)Linux標準。落ちたら混雑とみなす
BBR実際の帯域と遅延を測って判断(帯域ベース)Googleが2016年に発表

ここでひっかけが「CUBICとBBRは同じもの」という誤解である。CUBICは「パケットが落ちたら混雑」と考える損失ベース、BBRは「実際の流れ(帯域)」を測る帯域ベースで、判断のしかたがちがうのだ。

次に、速度を調整する主な機構である。

主な機構

機構動き
スロースタート最初はゆっくり、問題なければ一気に増やす
輻輳回避ある程度からは、少しずつ慎重に増やす
ファストリトランスミット同じ確認応答が重なったら、すぐに送り直す

そして大事なのが、TCPはいつも速度を制限しているわけではないという点だ。混雑を検知したときに調整するのであって、すいていればちゃんと速く送る。なお、通信のはじめには3ウェイハンドシェイク(SYN → SYN-ACK → ACK の3往復)で接続を確認してから始める。

わかりやすく言い換えると

要するに、高速道路の運転でイメージするとよい。

スロースタート … 最初は様子を見てゆっくり、問題なければ加速する

CUBIC … 「事故(パケットの損失)」を渋滞のサインとみなす方式

BBR … 「実際の道の流れ(帯域)」を測って判断する、Googleの新しい方式

つまり、CUBICは損失ベース、BBRは帯域ベース。そしてTCPは混雑を感じたときに速度を調整する。ここが試験の急所である。


試験のツボ

🔴 一番出る:CUBICとBBRの違い

①CUBIC = パケットの損失で判断(損失ベース・Linux標準)

②BBR = 実際の帯域を測って判断(帯域ベース・Google 2016)

🔴 次に出る:TCPは混雑検知時に調整

①いつも速度を絞っているわけではない

②混雑を検知したときに速度を調整する(すいていれば速く送る)

🟡 押さえると安定:主な機構

①スロースタート = 最初はゆっくり、問題なければ増やす

②ファストリトランスミット = 確認応答が重なったらすぐ送り直す


よくある間違い

「CUBICとBBRは同じ判断のしかたである」→ ✗  CUBICは損失ベース(落ちたら混雑)、BBRは帯域ベース(流れを測る)。判断がちがう。

「TCPはいつも速度を絞り続けている」→ ✗  混雑を検知したときに調整する。すいていれば速く送る。

「BBRは大昔からある古い方式である」→ ✗  BBRはGoogleが2016年に発表した比較的新しい方式。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(輻輳制御とは)

📝 オリジナル問題 1 輻輳制御の意味

TCP輻輳制御に関する次の記述のうち、正しいものはどれか。

  1. TCP輻輳制御は画面の明るさを段階で細かく決めるための専用の設定だとされているものである
  2. TCP輻輳制御は音の大きさを段階で決めるための専用の機能だとされているものである
  3. TCP輻輳制御は、混雑を検知して送る速度を調整し、公平に使えるようにするしくみである
  4. TCP輻輳制御は保存した文字を全部消すための専用の命令だとされているものである
アルゴキュブ
アルゴキュブ 解答・解説

解答は 3 である。

TCP輻輳制御は、混雑(輻輳)を検知して送る速度を調整し、みんなで公平に使えるようにするしくみである。高速道路で混んできたら速度をゆるめる運転に似ているのだ。

選択肢1・2・4の「明るさ」「音の大きさ」「全部消す」はどれも誤りである。

選択肢判定理由
1画面の明るさの設定ではない
2音の大きさの機能ではない
3混雑を検知して速度を調整し公平に使う
4文字を消す命令ではない

オリジナル問題2(CUBICとBBR)

📝 オリジナル問題 2 CUBICとBBRの違い

CUBICとBBRに関する次の記述のうち、正しいものはどれか。

  1. CUBICもBBRもまったく同じ判断のしかたで、違いはないものだとされている
  2. CUBICはパケットの損失で判断する損失ベース、BBRは帯域を測る帯域ベースである
  3. CUBICもBBRも、画面の明るさを段階で決めるための専用の設定だとされているのである
  4. CUBICもBBRも、音の大きさを段階で決めるための専用の機能だとされているのである
アルゴキュブ
アルゴキュブ 解答・解説

解答は 2 である。

CUBICはパケットの損失で混雑を判断する損失ベース(Linux標準)、BBRは実際の帯域を測って判断する帯域ベース(Google 2016)である。判断のしかたがちがうのだ。

選択肢1の「まったく同じ」は誤りである。選択肢3・4の「明るさ」「音の大きさ」も関係ない。

選択肢判定理由
1判断のしかたが違う
2CUBICは損失ベース・BBRは帯域ベース
3画面の明るさの設定ではない
4音の大きさの機能ではない

オリジナル問題3(TCPの調整)

📝 オリジナル問題 3 TCPは混雑検知時に調整

TCPの速度調整に関する次の記述のうち、正しいものはどれか。

  1. TCPは画面を必ず点滅させるためだけに使う専用の設定だとされているものなのである
  2. TCPは音を必ず二重に鳴らすための専用の機能だとされているもの
  3. TCPは保存した文字を必ず全部消すための専用の命令だとされているもの
  4. TCPはいつも速度を絞っているのではなく、混雑を検知したときに速度を調整する
アルゴキュブ
アルゴキュブ 解答・解説

解答は 4 である。

TCPはいつも速度を絞っているのではなく、混雑を検知したときに速度を調整するのだ。すいていればちゃんと速く送る。最初はスロースタートで様子を見ながら増やしていく。

選択肢1・2の「点滅」「二重に鳴らす」、選択肢3の「全部消す」はどれも誤りである。

選択肢判定理由
1画面を点滅させる設定ではない
2音を鳴らす機能ではない
3文字を消す命令ではない
4混雑を検知したときに速度を調整する

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る