スイッチング

Ethernetのコリジョンの原因と対策

コリジョンとは

コリジョンとは、半二重通信環境において、同時にお互いがデータ送信をしてしまい、電気信号が破損して通信に失敗してしまうことを言います。失敗した通信は、Ethernetレベルで再送されます。

イーサネットはCSMA/CD(Carrier Sense Multiple Access with Collision Detection)という方式を利用しており、 コリジョンを検知した際に、ジャム信号を送出した後、ランダムな時間を待った後に再送します (決まった時間だとまた同じ相手と衝突するため)。

ジャム信号とは、1から始まり、1と0が交互に現れる96bitのパターン信号です。

もし片方が全二重通信対応の機器で、もう片方が半二重通信にしか対応していない場合、どちらも半二重通信に設定すべきです。

そのとき、10BASE-Tや100BASE-T、1000BASE-TなどのUTPケーブルでは、送信用の線と受信用の線に分かれているので、実際にはコリジョンが発生しませんが、その先にあるNWで10base-5等があることを想定し、同時に通信が行われた場合は"擬似的にコリジョン検知をし"、 ジャム信号を送出し、ランダムな時間を待った後に再送します。

しかし、最近では半二重の必要な環境がなくなってしまったため、CSMA/CDが使われることはほとんどありません。

そのため、1000Base-Tや10GBase-SR/LRなど、比較的新しいEthernet規格ではCSMA/CDをサポートしない仕様になっています。

Auto Negotiationとコリジョン

Auto-Negotiationの機能により、通信速度とduplexを機器間で自動でネゴシエーションすることができます。通信速度は10Mbps/100Mbps/1000Mbpsから、duplexは全二重、半二重から適したものが選択されます。

しかし、これにはトラップが存在します。

片方の機器でAuto-Negotiationを選択し、もう片方の機器で固定で速度、duplexを指定すると、 速度は自動で合わせてくれるのですが、この速度が10Mbpsもしくは100Mbpsの場合、 duplexはAuto-Negotiationに失敗し、Auto-Negotiation側は安全のために半二重になってしまう、 という仕様になっています。

この状況になると、擬似的なコリジョンを大量に検知してしまい、速度が極端に低下する、という事象に陥ります。

ただし、1000Mbpsの場合はAuto-Negotiationに失敗した場合であっても全二重になります。1000Base規格はCSMA/CDをサポートしない仕様だからです。

コメント

タイトルとURLをコピーしました