CSMA/CD
CSMA/CD(Carrier Sense Multiple Access/Collision Detection 、搬送波感知多重アクセス/衝突検出)は、有線LAN規格であるイーサネットにおいて初期に実装された制御方式である。
10BASE5・10BASE2などの初期の同軸ケーブルによるイーサネットにおいて通信プロトコルとして広く普及した。
共有バス上で複数の端末が同時にデータ送信して衝突したときの再送処理手順を定めており、これによりイーサネットは多元接続が可能となった。
1970年代にALOHAnetというUHF帯をもちいた通信ネットワークで使われたのが起源で、これを同軸ケーブル上で使えるようにアレンジしたもの。Xerox社のPalo Alto Research Center(PARC)に所属するロバート・メトカーフ博士によって基礎理論がつくられた。DEC、インテル、Xeroxをあわせて「DIX仕様」と呼ばれ、この3社によって1980年にイーサネットの通信手順として公開提案された。
その後、1990年にツイストペアケーブル接続によるイーサネットが登場し、リピータハブ接続における半二重通信環境でも本機能が引き継がれたが、1000BASE-Tが標準化された1999年以降は全二重通信でスイッチングハブによる通信制御を行うことが一般的になっている。そのため、衝突を回避する必要性がほとんどなくなり、10ギガビット・イーサネットなど後発規格では本機能はサポートされていない。
無線LANでは、同様の方式としてCSMA/CAが用いられている。最大の違いは、CSMA/CDにおいては送信中に衝突検出したら即座に通信を中止し、ランダムな待ち時間を挿入するのに対し、CSMA/CAは送信前に待ち時間を毎回挿入する点である。
CSMA/CDは、データリンク層で実装されるMAC機能であり、半二重通信環境で動作する。
初期イーサネットにおける同軸ケーブルによるバス型構成では、複数の端末が1本の同軸ケーブルに接続される。一つの論理バス内の全端末はそれぞれ電気的に等価であるため全てのフレームを受信する。各端末はこのうち宛先が自身のMACアドレスであるフレームのみを処理し、そうでないものは廃棄する(同一バス内に流されたフレームをモニタリングする機器により他者の通信内容を傍聴することも可能ではある)。多数の端末が繋がっている場合には、任意の端末AとBとの「1対1」の排他的な通信は不可能であり、端末Aから送出されたデータは、同じイーサネットの配線に繋がっている全端末へ届けられる「1対全」の通信方式である。「1対全」の通信であるため、既に端末AとBが通信している時に端末Cが新たに送信したい場合は、伝送路の空きを待つ必要がある。接続された複数の端末がほぼ同時に送信を行った場合、データが損失する。これを衝突(コリジョン)と呼ぶ。なお、同軸ケーブルのみならずリピータハブでも半二重通信となり、衝突が発生する。
CSMA/CDは、この衝突対策のために通信経路上での信号の発送手段を規定しており、以下の内容を含んでいる。
Carrier Sense: 通信開始前に、現在通信中の端末が他にいないか確認する。
Multiple Access: 複数の端末が同じ通信路を共用できる。
Collision Detection: 複数の端末が同時に送信を行った時はそれを検知し、ランダムな時間待ってから再送する。
それぞれの動作について以下に概説する。
キャリア検知(搬送波検知)
バス上の全ての端末は通信路上の全て信号を常に受信可能であり、通信路が他の端末によって使われているかを確認できる。
端末は通信路が空いていることを確認できたら送信を開始し、完了後に再びキャリア検知状態に復帰する。これにより複数の端末による共有バス上での通信が可能となる。
衝突検出(コリジョン検出)
たまたまほぼ同時に複数の端末が送信を開始すると衝突が発生する。物理層が衝突による電気信号の乱れを検出した場合は、受信中のフレームは破棄され、ジャム信号という特殊な信号を伝送路に送信する。送出中の端末は衝突による自身の信号の乱れを検出するかジャム信号を検出すれば、直ちに送出を停止し送信中だったフレームは送信前の状態に戻される。
フレームの送出を中止した端末は、擬似乱数によるランダムな時間だけ待った後に、再び受信を試みて通信路が空いていれば、自分のフレームを送出することができる。その際にもし再度衝突が発生した場合は、n回目の衝突に対して2n個の待ち時間候補の中からランダムに決定される。この方法は「TBEBアルゴリズム」(Truncated binary exponential backoff algorithm) と呼ばれる。
イーサネットフレームのいくつかの仕様は、CSMA/CDによる物理的制約に基づいて決められているものがある。
フレーム間ギャップ = 96ビット
1つの端末はフレーム送信後は96ビット時間(10Mbpsでは9600ナノ秒)以上待つ必要がある。待ち時間後に通信路が空いていれば次のフレームを通信路に送出することが許される。
送信後のキャリア検知切り替えのための復帰時間として設けられている。
最小フレーム長 = 64オクテット
同軸ケーブルの信号伝送には遅延があるため、送信中の衝突を送信完了前に確実に検出するにはある程度の送信時間が必要となる。衝突検出のために最小限必要な時間を「スロット時間」と呼ぶ。
その値は衝突検出に最も時間が掛かる場合を想定し、ここでは500mの同軸ケーブルがリピータで5本結合された場合の最大長2.5kmを上限として算出された。衝突検出に必要な最長の時間は、送信信号が通信路の左端から右端へ伝播した瞬間に右端で別の端末が送信開始した場合である。この場合は、信号が通信路全長を伝播する時間と、衝突が発生した信号が同じ道を戻る時間の合計となり、これは単純に全長の倍の距離の伝播時間となる。5kmの同軸ケーブルにおける伝播時間約26μSecと、リピータやトランシーバーの処理時間約20μSecの合計で46.38μSecと見積もられた。これは10メガビット・イーサネットでは464ビットに相当するため、マージンを取って最小フレームサイズは512ビット(64オクテット)時間と設計されている。
さらに、CSMA/CDは1Gbps半二重通信でもサポートされており、オプションとして以下の2つが追加された。
キャリア・エクステンション (Carrier Extension)
衝突検出時間を拡張して接続距離長を延ばすための対策。
1Gbps半二重通信においては、64オクテット時間ではフレーム送出中の衝突検出のために接続距離長が非常に短く制限されてしまう。ここで必要なスロット時間は4096ビット=512オクテット相当となる。これを最小フレーム長として規定せずに、フレーム長が512オクテットに満たない場合は穴埋めのために無意味なダミーデータを追加することで512オクテットとする。この穴埋めをキャリア・エクステンションと呼ぶ。これにより、10M/100Mbps環境と同じく、リピータ・ハブまでのケーブル長最大100m、ハブの両方向のケーブル長を合わせて200mの接続距離長を実現している。
バースト・モード (Burst mode)
短いフレームを連続して伝送する際の伝送効率低下を改善するための対策。
フレームを大量に送出したい場合はフレーム間ギャップが多くなり、ギャップ時間中に他端末の通信開始があれば伝送路の待ち時間が増える。さらに、512オクテット未満のフレームが多ければキャリア・エクステンションによる不要データの送出が増え、伝送効率が低くなる。
このオプションでは、連続するフレームの1つ目にキャリア・エクステンションを付加し、以後のフレームにはキャリア・エクステンションを付加せずに送出する。フレーム間ギャップ時間中もキャリア信号を発信し続けることで、他端末からの送信を抑制し伝送路を占有する。伝送路の最長占有時間(最初のフレーム伝送開始から最後のフレームの伝送終了まで)は8192オクテット時間と規定されている。
CSMA/CDは1983年に最初の策定時の規格名であり、2012年に「イーサネット」に改称するまでIEEE 802.3規格の代名詞となっていた。
CSMA/CDのアルゴリズムで特に注目すべき点は、衝突が発生から再送までにランダム時間をあけるという点である。他の端末と全く同じ時間だけ間隔をあける確率は極めて低いため、再衝突が起こることを回避できる。
一方で、使用率の高いネットワークにおいては、衝突が多発することは避けられず、バス内に接続端末が多すぎる場合は衝突頻度が加速度的に高まり、閾値を越えたところで急激に帯域が飽和する欠点がある。混雑時に送信待ちの端末が多数あっても常に待ち時間があり通信路に空きが生じるため帯域に無駄が生じてしまう。