この記事でわかること
- コリジョン(衝突)に対処するために考え出された仕組み「CSMA/CD」の意味と動作手順
- CSMA/CDがコリジョンを完全になくせない理由
はじめに
前回の記事では、バス型ネットワークが抱えていた3つの課題を整理しました。
| 課題 | 内容 |
|---|---|
| 電気信号の衝突(コリジョン) | 同時に信号を送ると混ざり合い、データが壊れる |
| 全員へのデータ到達 | 特定の相手だけに送ることができなかった |
| ケーブル断による全断 | 1か所の断線でネットワーク全体が止まってしまう |
シンプルな構造だからこそ、シンプルな弱点がありました。今回はその中の最初の課題、電気信号の衝突(コリジョン) を機器がどうやって防ぐかを見ていきます。
コリジョンとはどういう状態か
まず、前回のおさらいをしましょう。
コリジョン(Collision)は英語で「衝突」を意味します。
バス型ネットワークでは、全ての機器が1本の共有ケーブルにつながっています。電気信号の通り道はその1本だけです。ここに複数の機器が同時に信号を流すと、電気がぶつかりあい、判別できない状態になります。壊れてしまった信号は受け取り側が読めないため、通信そのものが失敗します。
わかりやすい例で考えてみましょう。静かな池に、2人が同時に石を投げた場面を想像してください。それぞれの波紋が広がり、ぶつかった場所で混ざり合います。混ざった後は、どちらが誰の波紋なのかもう判別できません。コリジョンはまさにこの状態です。ケーブルが池、電気信号が波紋に相当します。混ざり合った信号は判読不能になり、送信した側も受け取った側も、そのデータをなかったものとして扱わなければなりません。
では、コリジョンを防ぐにはどうすればよいか。答えは「送る前に確認する・衝突したらすぐ検知して対処する」という手順を守ることです。この仕組みが CSMA/CD です。
CSMA/CDという名前の意味
CSMA/CDは、英単語の頭文字を並べた略語です。
| 略語 | 英語 | 日本語の意味 |
|---|---|---|
| CS | Carrier Sense | キャリア(信号)を感知する |
| MA | Multiple Access | 複数の機器が同じ回線にアクセスする |
| CD | Collision Detection | 衝突を検出する |
それぞれの単語を確認します。
- Carrier(キャリア):「運ぶもの」が原義。ネットワークの文脈では、ケーブル上を流れる電気信号そのものを指します。
- Sense(センス):感じ取る・感知する。
- Multiple(マルチプル):複数の。
- Access(アクセス):接続する・利用する。
- Collision(コリジョン):衝突。
- Detection(ディテクション):検出・発見。
日本語に直すと「信号(キャリア)を感知しながら、複数の機器が共有ケーブルにアクセスし、衝突を検出したら対処する」という手順です。名前がそのまま動作を表しています。
ちょっとイメージつきづらい内容だと思うので、細かく分けてみていきます!
CSMA/CDの4つの動作ステップ
ステップ1:送信前にケーブルを確認する(Carrier Sense)
データを送りたい機器は、まずケーブルに耳を澄ませます。今ほかの誰かが信号を流していないかを確認するのです。
会議室に例えるとわかりやすいです。誰かが話しているときに割り込まず、「今、話している人はいるかな?」と確認してから発言する——それが Carrier Sense の動きです。言葉を発してみて、誰ともかぶらなかったらそのまま話を続けます。信号でも一緒で、ケーブルに信号が流れていなければ、次のステップに進みます。
ステップ2:空いていたら送信を開始する(Multiple Access)
ケーブルが空いていると確認できたら、信号を送り始めます。これが MA(Multiple Access)の部分です。許可を取ってから送るのではなく、「空いていると判断したら送れる」というルールで動いています。1本のケーブルを複数の機器が対等に共有して使える、という意味がこの MA に込められています。
ステップ3:衝突を検出し、すぐに中断する(Collision Detection)
ここが CSMA/CD の核心です。
ステップ1で「空いている」と確認したとしても、まったく同じタイミングで別の機器も「空いている」と判断して送り始める場合があります。「発言しよう!」と思って発言したら、他の人とかぶってしまって、「あっ、あっ」ってなるイメージですね。空いていると思って2台のコンピューターが同時に電気信号を流すと、衝突するわけです。
ステップ4:ランダムな時間を待ってから再送する
ジャム信号を送った後、
会議室で発言がかぶった場合、「あ、どうぞどうぞ」という感じで相手に発言を促すことが出来ます。しかしネットワークの場合そのようなことはできません。
その代わり、衝突を検知したら機器はランダムな時間だけ待ちます。
なぜランダムなのかというと、衝突した2台の機器が同じ時間だけ待つと、また同時に送り始めて再び衝突するからです。待ち時間をランダムにすることで、どちらかが先に送信を開始できる確率を上げています。もし再び衝突した場合は、待ち時間の上限を広げてランダムに待ちます。衝突を繰り返すほど待てる時間の幅が広がっていくため、最終的にどちらかが先に送れる可能性が高まります。
4つのステップの流れをまとめると次のようになります。
| 番号 | CSMA/CD | 会議室のたとえ |
|---|---|---|
| 1 | ケーブルが開いているか確認 | 誰も話していないのを確認 |
| 2 | 信号を送信 | 発言 |
| 3 | 衝突を検知 | ほかの人と発言がかぶった |
| 4 | ランダムに待機 | お先にどうぞどうぞ |
| 5 | 再度信号を送信 | 改めて発言 |
CSMA/CDが抱えていた限界
CSMA/CDは衝突を「ゼロにする」仕組みではありません。「衝突してしまった後に対処する」仕組みです。
機器が数台しかなく通信量も少ない環境では十分に機能しました。ところが接続台数が増えて全員が頻繁に通信するようになると、衝突の回数が増えていきます。衝突するたびに待ち時間が発生するため、全体として通信の効率が落ちていきます。
イメージとして、50台の機器が同じケーブルを使って通信しようとする状況を考えてみてください。それぞれが少しずつデータを送ろうとするだけで、ケーブルは絶えず衝突と待機を繰り返す状態になります。誰かが送り終わるのを待っている間に、別の誰かがまた衝突を起こします。こうなるとデータが実際に届くまでに予想以上の時間がかかります。
CSMA/CDは「衝突を管理する」ことはできましたが、「衝突そのものを根本からなくす」ことはできませんでした。この限界を超えるには、バス型ネットワークの構造そのものを変える必要がありました。それは後の回で扱います。
まとめ
バス型ネットワークで起きるコリジョン(信号の衝突)に対して、CSMA/CDという手順が考え出されました。
- 送信前にケーブルの状態を確認する(Carrier Sense)
- 空いていたら送信を開始する(Multiple Access)
- 送信中に衝突を検出したらランダムに待ってから再送する(Collision Detection)
「送る前に確認し、ぶつかったら待って再挑戦する」というルールが、複数の機器が1本のケーブルを共有できる基盤を作りました。一方で、機器が増えると衝突が頻発するという限界も持ち合わせていました。
次回は、バス型ネットワークの2つ目の課題「全員へのデータ到達」に進みます。