
ラントとコリジョン
コリジョンとはイーサネットネットワーク上で二つのステーションが同時に「話そう」としたときに起こる現象のことです。
コリジョンはイーサネットネットワークの正常な動作であり、ほとんどの場合問題とみなさなくても構いません。
以下のことをこのページで説明します。
コリジョンを導く現象と、引き続き起こる現象
コリジョン( early collision )とレイトコリジョン( late collision )の違い。
ここでは以下の二つに分けて論じる。
コリジョン
レイトコリジョン
コリジョン
ここでは、ステーションAとステーションBと他のいくつかのステーションからなる架空のイーサネットのネットワークを考えます。
ネットワークは空き状態(誰も話していない)で最後に誰かが話してから 9.6 マイクロ秒が経過しています。
ここで言うコリジョンとはフレームが送信されてから、512 ビット以内に起こります。
これについての論理的根拠は別のページで説明します。
以下が正常なコリジョンについての説明です。
- ステーションAが 9.6 マイクロ秒の空き時間を検出し、64 ビットのプリアンブルからデータを送信し始めます。
[ CSMA/CD による送信のフローチャート ]
ステーションAは送信しながら、異常電圧(コリジョンが起こったという信号)を検知し続けます。

- いくらか時間が経って、しかしステーションAからの信号がステーションBに伝播する前に、
ステーションBも 9.6 マイクロ秒の空き時間を検出し、64 ビットのプリアンブルからデータを送信し始めます。
ステーションBも送信しながら、コリジョンの検知をし続けます。

- ステーションAとステーションBの間のどこかの地点で、電気信号が重なり、異常電圧が発生します。
異常電圧は、ステーションAとステーションBの両方へ伝播します。

- 信号が重なった地点に、物理的に近いところにあるステーションがコリジョンを検知しますが、ここではステーションAであったとします。
ステーションAがコリジョンを検知しました。

異常電圧を検知したステーションAはコリジョンが起こったと判断し、ただちに送信をやめ、32 ビットのジャム信号を流します。

32 ビットのジャム信号には、たった今コリジョンによって中断されたばかりのフレームの CRC を含んではなりません。
今日ではほとんどのイーサネットカードは 32 個の1の連続信号をジャムとして使用しています。
このやり方は、2の 32 乗分の1の確率でしか、チェックサムが一致することはないので、なかなか良い方法と言えます。
32 ビットのジャム信号の目的は他の誰もがしゃべらないようにすることにあります。
[ ステーションが HUB に接続されている場合は HUB がジャム信号を送出 ]
- ステーションAは制限付き二進指数バックオフアルゴリズムを実装しています。[制限付き二進指数バックオフアルゴリズム ]
これは、フレーム送信が遮られた後に、どれくらいの時間が経てば、再送信が可能かを決めるアルゴリズムです。
中断されたフレームはラント(規定よりも短い)フレームとなります。
- 次に、ステーションBがコリジョンを検出します。ステーションBも 32 ビットのジャム信号を送出します。また制限付き二進指数バックオフアルゴリズムを実装しています。

コリジョンはイーサネットネットワークでたびたび起こる正常な動作です。
ハードウェアの故障やステーションの誤動作ではありません。二つの NIC (ネットワークインターフェイスカード)が同時に話そうとして起こる現象です。
一般的には、送信側がバックオフアルゴリズムを実行した後、このアルゴリズムは再度 NIC が同時に話すことがないよう特別に設計されているので、
二つのステーションは次にはうまく送信することができます。
たいていは、コリジョンから回復し、うまくデータを送信できるようになるのに2、3ミリ秒もかかりません。
レイトコリジョン
レイトコリジョンは正常な動作ではありません。通常はケーブルやアダプタの障害など、仕様から外れていることによって発生します。
フレームが送信され始めてから 512 ビットより後で発生したコリジョンのことをレイトコリジョンと呼びます。
この論理的根拠は別ページで述べます。
ここで想定するネットワークは上記のものと同じです。
しかし、このネットワークでは、ネットワーク管理者がリピータを多段にし過ぎている/長すぎるケーブルを敷設した
などの理由で最大ケーブル長を超えるネットワークとなっています。( 10BASE5 では 500 メートル以上、10BASE2 では 185 メートル以上です。)
以下はケーブル長異常によって発生するレイトコリジョンの概要です。
- ステーションAが 9.6 マイクロ秒の空き時間を検出して、64 ビットのプリアンブルからデータを送信し始めます。
ステーションAはフレームの 256 ビット分を送信します。
ケーブルが規定通りであるならば、ステーションAとステーションBがもっとも離れた位置にあっても、
ステーションAは、ステーションBが送信をし始めてから、自分が 512 ビット分を送信する前にコリジョンを検知するはずです。

- ステーションAは送信を続け、ステーションBに電気信号が届くほんの少し前まで行きます。
ステーションBは 9.6 マイクロ秒の空き時間を検出し、送信を始めます。

- そのほんの少し後にコリジョンが検出されました。

ステーションBの方が極端にコリジョン地点に近いので、先に検出し、32 ビットのジャム信号を出します。

- コリジョンが伝播し、ステーションAに達します。しかし、ケーブルが規定長ではないので、ステーションAに達するときには、
ステーションAはすでに送信を終えています。そして、コリジョンを聞く時間はありません!

ステーションAはコリジョンが起こったことを全く知らないことになるのです!
レイトコリジョンが問題なのは、NIC がコリジョンを見逃すと、再送が上位層に委ねられ再送時間が劇的に増加するからです。
NIC の平均的な再送時間が2、3ミリ秒なのに対し、上位層では平均してその 10 倍から 100 倍の時間がかかります。
レイトコリジョンが起こる他の大きな原因は NIC の故障です。
NIC が故障すると、他のステーションが話しているのが検知できず、レイトコリジョン(コリジョンも)が発生します。
[ ]は訳者の補足説明です。