
ブリッジの輪
学習機能付きブリッジのところでも説明したように、利用者に存在を意識させないブリッジの基本設計方針は、
できるかぎり自動的に、ということです。
スパニングツリーのアルゴリズムは、ネットワークトポロジーが輪になることを防ぐ方法です。

パケットがあるネットワーク上の任意の地点Aから、同じネットワーク上の任意の地点Bへ、
一つ以上の道を通って送られると、輪という状態が発生します。
ここでは、図のようなネットワークを考えてみることにします。
ステーションAは上半分のネットワークに、ステーションBは下半分のネットワークに接続されています。
ブリッジ1もブリッジ2も、上半分のネットワークと下半分のネットワークに接続されています。
ステーションAからステーションBへのパケットは、ブリッジ1またはブリッジ2を経由することができるので、輪ができます。
ネットワーク管理者はこのような状態を絶対に起こらさないようにしなければなりませんが、これを達成するのは難しいことです。
ネットワーク管理者が、時間と労力をつぎ込んでも、人為的なミスは起こりうることです。
スパニングツリーを使えば、管理者はこのようなことにわずらわされなくて済みます。
さらに詳しく説明しましょう。
スパニングツリーが必要なわけ
なぜスパニングツリーが必要なのでしょうか? なぜブリッジが輪になるとそんなにまずいのでしょうか?
これらは本質的には同じ質問です。この質問に答えるために、ネットワークが輪になったら、何が起こるのかを見てみましょう。
これまでのブリッジについての説明を理解していることを前提に話しを進めます。
図のようなネットワークを考えてみましょう。

学習機能付きブリッジのところで見たように、ブリッジが起動された最初の状態では、テーブルに情報はりません。
ステーションAがステーションBにパケットを送ると、何が起こるのかを観察してみましょう。
パケットはケーブルを伝わって行き、ブリッジに到達します。ブリッジは無差別に聞いているので、パケットを捕らえます。(下図)

ブリッジは両方とも、自分のテーブルにステーションAのアドレスを組み入れるので、現在のテーブルの状態は以下の表のようになります。
ブリッジ 1 |
|
ブリッジ 2 |
|
ステーション |
発信元側ポート |
ステーション |
発信元側ポート |
A |
上側ポート |
A |
上側ポート |
ブリッジは2台ともまだステーションBがどこにあるのかを知らないので、
2台のブリッジそのパケットが来たポート以外のすべてのポートにパケットを転送します。
この例では、ブリッジには2つしかポートがないので、転送すべきポートは下側である、ということです。
2台のブリッジは送るべきパケットを下側ポート用のキューに入れ、メディアアクセスの方法に従い( CSMA/CD や TokenRing )転送します。
どちらかが先に下側のセグメントにパケットを転送します。
それがブリッジ1だとしましょう。つまり、ブリッジ1が下図のように下側のセグメントにパケットを転送します。

だんだん興味深くなってきます。下側に位置するステーションBがパケットを受取ります。
ところが、ブリッジ2も同じようにパケットを受取ります。ブリッジの方は無差別に聞いています。
ブリッジが、利用者に存在を意識させないブリッジであることを思い出しましょう。
ブリッジ2がパケットを受取ったとき、ブリッジ2はそのパケットがブリッジ1から来たのか、
ステーションAから来たのか、知る方法はありません。
ブリッジ2は、「ステーションAは下側のセグメントに移動した」と認識し、自分のテーブルを忠実に更新します。
ステーションAから来たパケットがブリッジ2の下側ポート上に見えるのに、ブリッジ2は他にどのようにこれを解釈できるでしょうか。
このようにして輪ができます。しかし、ブリッジにはそのことがわかりません。
このときのテーブル状態は下表です。
ブリッジ 1 |
|
ブリッジ 2 |
|
ステーション |
発信元側ポート |
ステーション |
発信元側ポート |
A |
上側ポート |
A |
下側ポート |
見ての通り輪になってしまい、トラブルを引き起こしています。片方のブリッジのテーブルがおかしくなりました。
事態はさらに悪くなります。ブリッジ2は、下側のステーションB宛てのパケットのコピーを図のように送り出します。
ブリッジ1までステーションAを下側からと見て、テーブルを更新します。
ブリッジ1はステーションBがどこにあるかわからず、上側のネットワークにパケットを転送します。

そのときのテーブルの状態は以下です。
ブリッジ 1 |
|
ブリッジ 2 |
|
ステーション |
発信元側ポート |
ステーション |
発信元側ポート |
A |
下側ポート |
A |
下側ポート |
ステーションBもまた、混乱してしまいます。ステーションAから同じパケットが2回来たように見えます。
返事の仕方を知っているものがいなくなります。この過程は、パケット循環の始まりでしかありません。
2台のブリッジはステーションAからのパケットを見て、反対側にパケットを転送します。
(そのパケットは、本当のところはもう一方のブリッジから来ているものなのですが。)
最悪、ネットワークが、この繰り返されるパケットの転送で使えなくなるまで、
ブリッジは新しいパケットを作り続けるのです。
ステーションBがどこにあっても、ブリッジがこの輪の中に何台あっても、
ブリッジにいくつのポートがあっても、関係はありません。
この現象は、ブリッジの輪が作られれば、必ず発生するのです。
まとめると、ブリッジの輪は、ブリッジを魅力的なものにしている、利用者に存在を意識させないという機能から発生する障害なのです。
ブリッジはそのパケットが、他のブリッジから転送されてきたということを知らないので、
反対側のポートに転送し、さらにもっとパケットを作り、転送し、作り、、、ということが起こるのです。
これが論理的木構造のアルゴリズムが必要なわけです。このアルゴリズムによって、この現象が回避されます。