garbagetown

個人の日記です

HubHubHub

昨日、友人と北千住「大はし」に行って、キンミヤを飲みながら「リピータハブを多段構成にするとコリジョンが発生するのでダメらしい」という、酒の席にあるまじき会話をしていたのですが、二人して完全に酔っ払っており、どうしても理由が分からなかったので調べてみました。
いつもどおり健全な訪問者各位にはどうでもいい話題で恐縮ですが、以下、現段階で理解した内容を記述します。

発生条件

  • リピータハブを多段接続する
  • 各ハブ間のケーブル長が規格範囲を超えている

原因

リピータハブは、他のノードからパケットを受け取ると、受信ポート以外のポートに接続された全てのノードにパケットを流そうとします。
このとき、同時に他のノードもパケットを流そうとしていると、経路上でコリジョン(衝突)が発生してしまうため、通常は CSMA/CD*1 という仕組みを使って制御します。すなわち、自分がパケットを送出する前に、他のノードがパケットを流していないかどうかを確認し、もし他のノードがパケット流していたら少し待つ、流していなければ自分が流す、と取り決める事で衝突を回避します。
ところが、リピータハブ間のケーブル長が上記規格範囲を超えている場合、他のノードが流したパケットが自分のところに届く前に自分がパケットを流し終えてしまうという事態が発生し得ます。この場合、双方の送出したパケットが経路上で衝突し、正しく通信する事ができません。

対策

上記発生条件を満たさないようネットワークを構成します。
スイッチングハブは、パケットの MAC アドレスを判断して経路制御を行うので、多段に接続しても問題はありません。
また、リピータハブを使用する場合でも、各ハブ間のケーブル長を上記規格範囲内に収めれば CSMA/CD により衝突は回避できます。ただし、各ノードは、他のノードがパケットを流している間は少し待たなければいけないので、スイッチングハブを使用した場合と比較するとスループットが低下します。

以上です。上記記述内容に誤り等ある場合は、ご指摘の程、宜しくお願い致します。

*1:Carrier Sense Multiple Access with Collision Detection の略。搬送波感知多重アクセス/衝突検出方式。