CSMA/CDとは

10BASE5や10BASE2といった伝送媒体に同軸ケーブルを利用する初期のバス型イーサネットでは、複数のホストで同軸ケーブルを共有していることになります。そこで、1本の同軸ケーブルをどう使い回すかをきちんと制御しなければいけません。その制御方式のことをMAC(Medium Access Control)と呼んでいます。日本語では、「媒体アクセス制御」というふうに訳されることが多いでしょう。

そして、イーサネットの媒体アクセス制御方式がCSMA/CD(Carrier Sense Multiple access with Collision Detection)です。

CSMA/CDの仕組み

CSMA/CDの制御は、とてもシンプルで基本的に早い者勝ちです。フレームを送信するときにケーブルが空いているかどうかをチェックして、空いていたらフレームを送り出すというシンプルな仕組みです。

CSMA/CDの動作をフローチャートにしたものが次の図です。

図 CSMA/CDの動作の流れ

CSMA/CDの動作は、「CS」「MA」「CD」という具合に、アルファベット2文字ずつ3つに分けて考えるとわかりやすくなります。

CS : Carrier Sense

まず、何かフレームを送信したいホストは「CS : Carrier Sense」を行ってケーブル上に他のホストのフレームが流れているかどうか確認します。電圧をチェックすることで他のホストのフレームの電気信号が流れているかを見ています。他のホストのフレームが流れていれば、そのフレームが流れなくなるまで待機します。もし他のホストのフレームが流れていなければ自分がフレームを送信することができます。他のホストのフレームが流れていなくて、ケーブルが空いている状態をアイドル状態と呼びます。

  • Carrier Senseでアイドル状態であることを確認してから、すぐにフレームの送信を開始するわけではありません。IFG(Inter Frame Gap)だけ待機してからフレームの送信を開始します。IFGは96ビット時間です。
  • ビット時間は1ビットを送り出すのに要する時間です。10Mbpsの伝送速度であれば0.1マイクロ秒、100Mbpsの伝送速度であれば0.01マイクロ秒です。

MA : Multiple Access

ケーブルが空いていれば、フレームを送信できるというように非常にわかりやすく単純な仕組みです。これによって複数のホストで1本の伝送媒体(ケーブル)を共有するという「MA : Multiple Access」を実現しています。

CD : Collision Detection

しかし、複数のホストが1本の伝送媒体を共有するといっても、ある瞬間にフレームを送信することができるのはただ1台だけです。たまたま複数のホストが同時にフレームを送信したいという場合、Carrier Senseを行ってケーブルが空いていると判断して、同時にフレームを送信してしまうことが起こりえます。そうすると、フレームの電気信号が途中で衝突してしまい、その結果、元のフレームに変換できなくなり正常な通信を行うことができなくなります。

図 衝突の発生

  • 図ではわかりやすくするために、PC-Aからは右向き、PC-Cからは左向きにデータが流れるように表しています。ただし、これは電気信号が流れる向きを正確に表していません。PC-Aから送り出される電気信号の流れる向きとPC-Cから送り出される電気信号の流れる向きは同じです。
  • 「同時に複数のホストがフレームを送信」といっても、完全に同時のタイミングになることはありません。CSMA/CDで「同時」とみなす時間はスロットタイムと呼び、512ビット時間です。512ビット時間以内に複数のホストがフレームの送信を行うと「同時に」送信したことになります。

この衝突を検出(「CD : Collision Detection」)すると、フレームの送信はやめずに一定時間送り続けます。その間、壊れてしまっているフレームを送り続けています。衝突検出後に送り続ける、壊れてしまったフレームをジャム信号と呼んでいます。ジャム信号は、同じ伝送媒体に接続されている他のホストが衝突の検出を確実にするためのものです。そのため、ジャム信号が流れている間、ほかのホストがフレームを送信することはありません。

衝突を検出したフレームの送信元のホストはランダムな時間だけ待機し、再びCarrier Senseに戻り、フレームを送信することができるかどうかを判断していきます。ランダム時間待機することで、再送信時の衝突の可能性を小さくします。再送時にランダム時間待機する処理をバックオフと呼んでいます。

  • Carrier SenseもCollision Detectionも同軸ケーブルを流れる電気信号の電圧をチェックして行っています。
  • イーサネットの規格ではデータを送信するPCなどは「ノード」や「ステーション」という表現がされています。この記事ではPCなどを「ホスト」と表現しています。

今ではCSMA/CDは関係ない

現在のイーサネットは、1本の同軸ケーブルを共有するバス型のトポロジではありません。レイヤ2スイッチを中心としたスター型トポロジです。レイヤ2スイッチを中心としたハブ型トポロジでCSMA/CDの制御を特に考える必要はありません。

スター型トポロジでは伝送媒体を占有して使えます。そのため、常に伝送媒体は空いています。そして、衝突が発生することはありません。図 CSMA/CDの流れのフローチャートで「データを送信したい」から「送信完了」まで必ずまっすぐ進めることができます。一応、CSMA/CDに則ってはいるのですが、CSMA/CDを意識する必要はありません。また、イーサネットの規格で10GイーサネットからはCSMA/CDの制御は削除されています。

コリジョンドメイン

コリジョンドメインとは、CSMA/CDでの衝突が発生したときに影響を受ける範囲です。言い換えると、伝送媒体を共有している範囲がコリジョンドメインです。

コリジョンドメイン内に多くのホストが存在すると、その分、衝突が起こる可能性が大きくなります。衝突が発生すると、イーサネットフレームを再送するため、転送の効率が悪くなります。コリジョンドメインを分割して、伝送媒体を共有するホストの数を少なくすることで、イーサネットのフレームの転送効率を高めることができます。

コリジョンドメインを分割するには、ブリッジやレイヤ2スイッチといったデータリンク層レベルのネットワーク機器を利用します。ブリッジやレイヤ2スイッチは、衝突によって壊れてしまったフレームの電気信号を他のインタフェースには流さないようにして、衝突の影響が受ける範囲を限定します。つまり、ブリッジやスイッチはポートごとにコリジョンドメインを分割できます。