Step2:
ポートのステータス

図3●ポートの状態(ステータス)
リンクアップしてから,三つの状態を経てパケットが転送可能なフォワーディング状態になる。この間(30秒)は通信できない。
図4●典型的なリンク障害の迂回パターン
障害が起こったときに,ブロッキング状態をフォワーディング状態に変えれば通信を維持できる。

 スパニングツリーが安定するまでには比較的長い時間が必要だ。ツリーが完成する前にパケットを転送すると,ループする可能性が高い。このため,リンクアップしてからパケットが転送できるようになるまでには,いくつかの状態(ステータス)をクリアしないといけない仕様になっている(図3[拡大表示])。

 まず,ポートはブロッキングという状態からスタートする。スイッチが起動直後の場合はルートブリッジが誰なのかまだ分からない。たとえリンクアップしていてもこの状態にForward Delayだけとどまり,ルートブリッジが誰なのかを判断する。リンクが切れるなど障害発生時(スイッチの起動直後ではない場合)であれば,ルートブリッジの情報は既に知っているので,リンクアップと同時にリスニングという状態に入る。

 リスニングでは,受信したBPDUの情報から,このポートをブロックすべきかを判断する。この状態にはForward Delayだけとどまる。ブロックすべきだという明示的な情報がなければラーニングという状態へ移る。

 ラーニング状態は,ポートの役割が安定するまでの待ち時間である。ラーニングの間もパケットは転送しない。自分のポート配下にどのようなMACアドレスの端末がいるのかを学習して転送の準備をする。この状態にもForward Delayだけとどまり,フォワーディング状態へ移る。

 フォワーディング状態はパケット転送が可能な状態である。結局ブロッキング状態からこの状態になるまでにはFoward Delayという時間を2回クリアしなければならない。つまり,リンクアップしてから(デフォルトで)30秒間はまったく通信できないというわけだ。例えば,ポートがリンクダウンするとスパニングツリーのポート状態はブロッキングに戻ってしまうため,ケーブルを差し替えたりするとそれだけで通信は30秒間途絶えてしまう。従ってパソコンやプリンタが直接繋がるようなポートではスパニングツリーを止めた方が快適である。

 リンクアップと同時にスパニングツリーのステータスをフォワーディング状態にする機能を持つ製品がある。例えば,CiscoのCatalystスイッチではそのような機能を「Port Fast」と呼んでいる。Catalystスイッチはデフォルトでスパニングツリーが有効になっているので,端末がつながるポートにはPort Fastを設定した方がよいだろう。

 スパニングツリーでは,定期的に来るはずのBPDUがMax Age(デフォルト20秒)途絶えると,障害と判定する。障害には,装置そのものがダウンするノード障害と,特定のリンクだけがダウンするリンク障害がある。

 最悪のケースはルートブリッジのノード障害だ。その場合,ネットワークからルートブリッジがいなくなってしまうため,Max Age期間後にすべてのスイッチが一斉に「自分がルートブリッジだ」と思い込む時点から再スタートする。ただし起動直後とは異なり他にルートブリッジがいないことが保証されていることになるため,ブロッキング状態でルートブリッジが誰かを判断するためにForward Delay秒間待つことなく,すぐにリスニング状態になる。新しいルートブリッジを選出し,新たなツリーが完成するまでには,障害発生からデフォルトで50秒程度必要だ。この時間は次の式により求められる。

Max Age + (Forward Delay)×2

 すべての通信が50秒間途絶えるわけではないが,ルートブリッジはネットワークの中心的なスイッチが担うのが普通なので,影響範囲は非常に大きい。

 特定のリンク障害の場合,ルートブリッジが消えてしまうわけではないが,この場合も障害を迂回するまでにはデフォルトで50秒必要である。

 しかし,図4[拡大表示]のような典型的な冗長構成の場合には,ブロッキングとなっているポートをフォワーディングに変えるだけで済む。 このような型にはまったパターンでは,スパニングツリーのルールを無視してブロッキングからすぐにフォワーディングに変更した方が良好な結果が得られる。CiscoのCatalystシリーズではこのような動作を「Uplink Fast」と呼ぶ。アップリンクを冗長構成にして上位スイッチに向かって2本出しているような場合にはUplink Fastを利用するとよい。