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(輻輳制御とは)
TCP輻輳制御に関する次の記述のうち、正しいものはどれか。
- TCP輻輳制御は画面の明るさを段階で細かく決めるための専用の設定だとされているものである
- TCP輻輳制御は音の大きさを段階で決めるための専用の機能だとされているものである
- TCP輻輳制御は、混雑を検知して送る速度を調整し、公平に使えるようにするしくみである
- TCP輻輳制御は保存した文字を全部消すための専用の命令だとされているものである
解答は 3 である。
TCP輻輳制御は、混雑(輻輳)を検知して送る速度を調整し、みんなで公平に使えるようにするしくみである。高速道路で混んできたら速度をゆるめる運転に似ているのだ。
選択肢1・2・4の「明るさ」「音の大きさ」「全部消す」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面の明るさの設定ではない |
| 2 | ✗ | 音の大きさの機能ではない |
| 3 | ✓ | 混雑を検知して速度を調整し公平に使う |
| 4 | ✗ | 文字を消す命令ではない |
オリジナル問題2(CUBICとBBR)
CUBICとBBRに関する次の記述のうち、正しいものはどれか。
- CUBICもBBRもまったく同じ判断のしかたで、違いはないものだとされている
- CUBICはパケットの損失で判断する損失ベース、BBRは帯域を測る帯域ベースである
- CUBICもBBRも、画面の明るさを段階で決めるための専用の設定だとされているのである
- CUBICもBBRも、音の大きさを段階で決めるための専用の機能だとされているのである
解答は 2 である。
CUBICはパケットの損失で混雑を判断する損失ベース(Linux標準)、BBRは実際の帯域を測って判断する帯域ベース(Google 2016)である。判断のしかたがちがうのだ。
選択肢1の「まったく同じ」は誤りである。選択肢3・4の「明るさ」「音の大きさ」も関係ない。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 判断のしかたが違う |
| 2 | ✓ | CUBICは損失ベース・BBRは帯域ベース |
| 3 | ✗ | 画面の明るさの設定ではない |
| 4 | ✗ | 音の大きさの機能ではない |
オリジナル問題3(TCPの調整)
TCPの速度調整に関する次の記述のうち、正しいものはどれか。
- TCPは画面を必ず点滅させるためだけに使う専用の設定だとされているものなのである
- TCPは音を必ず二重に鳴らすための専用の機能だとされているもの
- TCPは保存した文字を必ず全部消すための専用の命令だとされているもの
- TCPはいつも速度を絞っているのではなく、混雑を検知したときに速度を調整する
解答は 4 である。
TCPはいつも速度を絞っているのではなく、混雑を検知したときに速度を調整するのだ。すいていればちゃんと速く送る。最初はスロースタートで様子を見ながら増やしていく。
選択肢1・2の「点滅」「二重に鳴らす」、選択肢3の「全部消す」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面を点滅させる設定ではない |
| 2 | ✗ | 音を鳴らす機能ではない |
| 3 | ✗ | 文字を消す命令ではない |
| 4 | ✓ | 混雑を検知したときに速度を調整する |
まとめ
押さえどころ
- 🔴 CUBICとBBR = CUBICは損失ベース(Linux標準)、BBRは帯域ベース(Google 2016)。判断のしかたが別もの。
- 🔴 TCPは混雑検知時に調整 = いつも絞るのではなく、混雑を検知したときに速度を調整する。
- 🟡 主な機構 = スロースタート(最初ゆっくり)・ファストリトランスミット(重なったらすぐ送り直す)。
次に学ぶ
- OSI参照モデル(7層) ── TCPが動くトランスポート層(L4)を含む通信の全体像。
- サブネット・CIDR(VLSM) ── 通信の宛先となるIPアドレスの割り当てのしくみ。
執筆: SikakuQuest編集部