【第7回】データの「ぶつかり」を防ぐ仕組み ― CSMA/CDをやさしく解説

結論

ネットワークでのデータの衝突を防ぐために、「送る前にまず聞く、ぶつかったらいったん止まってランダムな時間だけ待ってからやり直す」 というルールが使われています。このルールを CSMA/CD(シーエスエムエー・シーディー) と呼びます。


はじめに

前回のおさらい

前回は、複数のコンピュータが1本のケーブルを共有して通信する「ケーブル共有方式」について学びました。

このしくみには大きな問題がありました。それは、2台以上のコンピュータが同時にデータを送ろうとすると、データが「衝突(コリジョン)」してしまうという問題です。衝突が起きると、データはぐちゃぐちゃになって使い物にならなくなってしまいます。

今回のテーマ

では、その衝突をどうやって防ぐのでしょうか?

今回は、昔のイーサネット(ケーブル共有型のネットワーク)で実際に使われていた衝突防止のルール、CSMA/CD を解説します。

むずかしそうな名前に見えますが、中身はとってもシンプルです。「しゃべる前に、まわりの音を聞く」 ―― それだけです。


本題:衝突を防ぐルール「CSMA/CD」

まず、会議室を想像してみよう

10人が同じ部屋でミーティングをしているシーンを思い浮かべてください。

マイクは1本しかなく、全員がそのマイクを通じて話さなければなりません。

このとき、何のルールもなければどうなるでしょう?

  • AさんとBさんが同時に話し始める
  • 声が重なってぐちゃぐちゃになる
  • 誰も何を言っているかわからない

ケーブル共有型のネットワークも、まったく同じ状況です。ケーブルがマイク1本で、コンピュータが参加者です。


CSMA/CDの3つのステップ

CSMA/CDは、会議室の「上手な話し方のルール」に相当します。順番に見ていきましょう。


ステップ1:送る前にケーブルの音を聞く(CS:キャリアセンス)

CS(Carrier Sense) の意味を、単語ひとつずつ見てみましょう。

  • Carrier(キャリア):「信号を運ぶもの」という意味です。ここではケーブルに流れている電気信号のことを指します。
  • Sense(センス):「感じ取る・検知する」という意味です。日本語の「センスがある」とは少しニュアンスが違い、ここでは「察知する」に近いです。

つまり Carrier Sense とは、「ケーブルに信号が流れているかどうかを感じ取る」ということです。

会議室で言えば、「しゃべる前に、誰かもうしゃべっていないか耳を傾ける」行動です。

  • ケーブルが静かなら(誰もデータを送っていなければ)→ 送ってOK!
  • ケーブルがにぎやかなら(誰かがデータを送っている最中なら)→ 待つ

これだけで、多くの衝突を防げます。


ステップ2:空いていたら送り始める(MA:マルチプルアクセス)

MA(Multiple Access) の意味も、単語ごとに見ていきましょう。

  • Multiple(マルチプル):「複数の・たくさんの」という意味です。「マルチ商法」などの「マルチ」と同じ語源です。
  • Access(アクセス):「使う・つながる」という意味です。「インターネットにアクセスする」という言葉そのままです。

つまり Multiple Access とは、「複数のコンピュータが同じケーブルにつながって使う」ということです。特別なアクションではなく、このしくみの前提条件を表しています。

「ケーブルが空いている」と判断したら、データの送信を開始します。


ステップ3:送りながら、ぶつかっていないか聞き続ける(CD:コリジョンディテクション)

ここが一番のポイントです。

実は、「送り始める前に確認した」だけでは衝突をゼロにはできません。

なぜかというと、こんなことが起きるからです。

AさんとBさん、ほぼ同時にケーブルを確認した。 2人とも「静かだ!」と判断して、同時に送り始めた。 → 衝突発生。

そこで、CD(Collision Detection) の出番です。こちらも単語ごとに確認しましょう。

  • Collision(コリジョン):「衝突・ぶつかること」という意味です。車の「コリジョン保険」などにも使われる言葉です。
  • Detection(ディテクション):「検知・発見」という意味です。「探偵(Detective)」と同じ語源で、「見つけ出す」というニュアンスがあります。

つまり Collision Detection とは、「衝突を検知する」ということです。送信しながらも「ケーブルの音」を聞き続け、「あ、ぶつかった!」とすぐに気づくしくみです。

衝突を検知したら、次の行動をとります。

  1. 送信をすぐに中止する
  2. 「ジャム信号」を送って、全員に衝突を知らせる(「ぶつかったぞ!みんな一度止まれ!」というお知らせ)
  3. ランダムな時間だけ待ってから、もう一度最初からやり直す

なぜ「ランダムな時間」待つの?

衝突したあと、もしAさんとBさんがまったく同じ時間だけ待ってから再送したら、どうなるでしょう?

→ またぴったり同時に送り始めて、またぶつかります。

そのため、待つ時間を**ランダム(バラバラ)**にするのです。

たとえば、Aさんは0.3秒待ち、Bさんは1.1秒待つ、といった感じです。これにより、2回目の衝突が起きる確率を大幅に下げられます。

この「待ち時間をランダムにする」しくみを、バックオフ と呼びます。


CSMA/CDの流れをまとめると

【データを送りたい!】
        ↓
ケーブルを確認する(CS)
        ↓
使われてる? → YES → しばらく待ってもう一度確認
        ↓ NO
データを送り始める(MA)
        ↓
送りながらケーブルを聞き続ける(CD)
        ↓
衝突した? → YES → 送信中止 → ジャム信号 → ランダムに待つ → 最初に戻る
        ↓ NO
送信完了 🎉

補足:現代のネットワークはどうなの?

実はいまのネットワークでは、CSMA/CDはほぼ使われていません。

現在主流のスイッチングハブ(スイッチ)を使ったネットワークでは、各コンピュータが専用のケーブルで1対1でつながるため、そもそも衝突が起きない構造になっています。

それでもCSMA/CDを学ぶ価値があるのは、「なぜ今のしくみがこうなっているのか」を理解するための、大切な歴史的背景だからです。


まとめ

  • 前回学んだ「衝突(コリジョン)」の問題を解決するルールが CSMA/CD
  • 送る前にケーブルを聞く(CS)」「みんなで共有して使う(MA)」「衝突したらすぐ気づく(CD)」の3つで成り立っている
  • 衝突したら送信を止め、ランダムな時間(バックオフ)待ってからやり直す
  • 現代のスイッチを使ったネットワークでは衝突が起きない構造のため、CSMA/CDは基本的に使われないが、ネットワークの歴史と設計思想を理解する上でとても重要

次回は、今回少し出てきた**スイッチングハブ(スイッチ)**がどんな装置なのか、くわしく見ていきましょう!