XeroxのPARCで開発されたイーサネットの起源は、無線を使ったハワイ大学のパケットネットワーク「ALOHA-NET」といわれている。無線通信の特徴は、同じ周波数で待ち受けているエリア内のすべての局に一斉に信号が伝わる点と、混信が起こらないように送信局を常に1局だけに限定しなければならない点である。いうまでもなくこれは、ひとつのメディアを共有するLANの技術要求と同じものであり、このプロジェクトに参加したRobert Metcalfeが、のちにこのALOHA-NETの経験を活かして現在のイーサネットの原型を開発したのである。
アマチュア無線や市民無線などで使う、いわゆるトランシーバを思い浮かべていただきたい。身近なところではタクシーの無線機などもそうだが、あのトランシーバはボタンを押すと送信、離すと受信に切り換わる単純な仕組になっている。複数のユーザーはおろか、1対1で同時に会話することすらできないのである。実に不自由な世界ではあるが、便利に使えているはずの通信システムも、実はこのような不自由なメディア上に構築されているというケースが多い。1デバイス1方向という不自由な世界で、複数の機器が自由に双方向のコミュニケーションを行なえるようにするための基盤、これを提供するのがメディアそのものを扱う最下層のプロトコルを含んだイーサネットの役割なのである。そしてその実現方法は、実はトランシーバを使った無線通信と実によく似た、とても単純な方法だったりする。
■
イーサネット通信の基本
まず、「すべての局に一斉に信号が伝わる」という点だが、これは各デバイスを識別できるようにし、送信元と送信先を名乗ることで簡単に解決できる。無線通信のコールサインに相当する識別子を、すべてのデバイスにつければよいのだ。これをMAC(Media Access Control)アドレスといい、ネットワークカードなどには通常、IEEEが管理する3バイト(24bit)のベンダーコードと、各ベンダが管理する3バイト(24bit)のコードで構成された6バイト(48bit)の番号が設定されている。通信時には、相手先のMACアドレスと送信元である自分のMACアドレスをパケットにセットして送信。イーサネットのメディア上は基本的にありとあらゆるものが流れる回転寿司状態であり、その中から必要なものをそれぞれが自力でピックアップしていくという仕組になっている。
「必要なもの」は、通常は自分宛てのアドレスが付いたものだが、たとえばMACアドレスそのものを取得する際などに使う、特殊なアドレスも用意されている。この場合は送信先にブロードキャストアドレスと呼ばれるものをセットして、とりあえず「おーい!」とやってみるのだ。すると、聞こえる相手が名のってくれ、相手のMACアドレスが取得できる。イーサネット自体は、このように直接信号が届く範囲の通信しかサポートしていない。実際に広範囲なコミュニケーションを実現しているのは、その上位で動いているTCP/IPのような別のプロトコルたちなのである。
このような仕組なので、流れているものすべてをピックアップしてしまうことも可能だ。たとえばプロトコルアナライザやパケットモニタと呼ばれるハードウェアやソフトウェアなどは、この取捨選択を柔軟に行なえるように作られている。もちろん、片っ端からツマミ食いしても回転寿司と違って痕跡がまったく残らないというのが、ちょっと怖いところでもある。
■
ひとつのメディアを共有する仕組
さて、「混信しないように制御する」というもうひとつの重要な問題だが、これも無線通信と同じように、誰かの通信中は邪魔しないように待機し、誰も通信していなかったら送信するという単純な仕組で動いている。
イーサネットのトランシーバが送信を行なう際には、他の通信を妨害しないように誰も送信していないことをまず確認する。使用中なら空くまで待ち、一定時間(表のインターフレームギャップ)送信がなければ送信を開始してよいというのが、回線を使用するにあたっての唯一のルールなのだ。たったこれだけのルールなので、タイミングが悪いと送信が重なってしまうこともある。そこで、送信中も常に回線を傍受し、信号が衝突(コリジョンという)していないことを確認する(無線では難しいが有線では信号を比較するだけで簡単に行なえる)。そして、もし衝突を検出したらただちに送信を中止し、他のノードに衝突を知らせる信号(ジャム信号)を送信する。これが2つ目の送信中のルールで、これもいたって単純である。
最後のルールは、中止後にし切り直すバックオフのルールだ。中断後すぐにし切り直してしまうと、再び衝突が起きてしまう可能性が高いので、衝突後は一定時間待機することになっている。その際、現在の試行回数と10(バックオフリミット)のいずれか小さい方の値「k」を使い、0以上で2のk乗未満の整数値を乱数で算出。この値に、スロットタイム(100Mbpsなら512bit÷100Mbps=5.21μ秒)を乗じた時間をし切り直しを開始するまでの待機時間としている。同時に再送に入ってしまう確率を低くしてるわけだ。それでも衝突し続ける可能性は否定できないので(回線異常の公算が高いが)、再送は最大16回までと規定している。これが、複数のデバイスがひとつのメディアを使って相互に通信を行なえるようにするためのイーサネットのコア技術であり、このアクセス制御方式をCSMA/CD(Carrier Sense Multiple Access/Collision Detection)と呼んでいる。
表:イーサネットの基本パラメータ
伝送速度 | 10Mbps | 100Mbps | 1000Mbps |
スロットタイム | 512bit時間(51.2μs) | ←(5.12μs) | 4096bit時間(4.096μs) |
インターフレームギャップ | 9.6μs | 0.96μs | 0.096μs |
最大試行回数 | 16回 | ← | ← |
バックオフリミット | 10 | ← | ← |
ジャム信号サイズ | 32bit | ← | ← |
最大フレームサイズ | 1518byte | ← | ← |
最小フレームサイズ | 64byte(512bit) | ← | ← |
MACアドレス | 48bit | ← | ← |
イーサネットは、このような単純な仕組なので、実装が容易でコストもかからない。世の中には、いろいろな種類のネットワークがあるのだが、イーサネットがここまで普及した大きな要因のひとつには、この単純さがあっただろう。だがこの単純さゆえに、アクセスが競合すると衝突が発生しやすくなり、衝突が発生するとスループットが極端に落ちてしまうという欠点がある。また、衝突検出という微妙なタイミングに依存した制御を行なうため、タイミングに起因する大きな制約もある。
ケーブルの端にあるデバイス[A]が送信を開始したとしよう。この信号が、もう一方の端にあるデバイス[B]に届くまでには、少なからず時間がかかる。回線が空いていると判断した[B]が送信を始め、その直後に衝突が起こってしまったとする。[A]がこれを検出できることを保証するためには、そこからさらに[A]のところに信号が伝わるまでの時間を加えた、すなわち、[A][B]間の伝送にかかる時間の最大2倍の時間を考慮しなければいけない。もしこれより早く[A]が送信を完了しまうと、[A]は衝突を検出できない可能性が出てきてしまうのだ。そこで、イーサネットでは最小時間を保証するための最小フレームサイズというのを規定している(前述のスロットタイムの根拠でもある)。
10BASE-5の500mや10BASE-Tの100mというケーブル長は、主に信号の劣化を考慮した制限で、実際にはリピータ(劣化した信号を整形して再送する中継機)を介してさらに延長することができる。だが衝突検出を行なうためには、このリピータで生ずる遅延やケーブル自体の遅延を考慮しなければならないため、無制限というわけにはいかない。たとえば10BASE-2なら500m間隔で、10BASE-Tなら100m間隔でリピータを4台挿入できるのだが、高速な100BASE-TXでは、リピータは2台に制限されている。
ケーブルを集線するハブの中で一番安いタイプは、受け取った信号を何も考えずにすべてのポートに再送するリピータとして動作している。デバイス側で衝突検出を行なう必要があるため、間に挿入できるハブの段数にリピータの制限が適用されるわけだ。一方、スイッチングハブと呼ばれている製品の場合には、信号を送信先のポートにだけ再送する。すなわち、常にデバイス間が1対1で接続されているのと同じ状態であり、実質的に信号の衝突そのものが起こらない。衝突が起こらないので、衝突検出のタイミングに起因するこのような制限がないのである。
(2001/12/27)
|