LAN技術研究室(LANに関心がある人のために情報を提供しているサイト)

このページでは、スパニング・ツリー・プロトコルSTP)の基礎について初心者向けに解説しています。



LANの初歩

スパニング・ツリー・プロトコルSTP)の基礎

ブロードキャスト・フレームのループを作ってしまっているLANの例
ブロードキャストフレームループを作ってしまっているLANの例

上の図の青い中継装置はすべてスイッチです。
上の図のようにパソコンAがブロードキャストフレームを送信すると、図の赤い矢印ように流れてしまいます。
これだと送信したフレームが1周まわってループしてしまいます。そして、いつまでも巡回してしまいます。
もし、このようにスイッチブリッジループ状に繋がっている状態だと、このようなブロードキャストフレームが増加してネットワークを埋め尽くすブロードキャスト・ストームという現象を引き起こしてしまいます。
これを解決するためのプロトコルSTPです。
STPは、Spanning Tree Protocolの略で、スパニング・ツリー・プロトコルと読みます。
STPは、IEEE802.1Dとして標準化されています。
IEEEとは、米国電気電子技術者協会のことです。
STPは、OSI参照モデルにおけるデータリンク層レイヤ2)を対象とするリンク管理プロトコルです。
STPは、IEEE802.1Dに準拠したブリッジまたはスイッチで動作します。
STPでは、前述のような現象を引き起こさないようにするため、ループになっている経路を遮断し、LAN全体を以下のようにツリー状にします。

STPで改善したLANの例
STPで改善したLANの例

今度は、ブロードキャストフレームのループを作ってしまっているLANの例を再検討し、上の図のように3台のスイッチと番号が付いた3つのネットワークの構成を変えてみました。
LANの構成を上の図のように改善すれば、一つのMACフレームが同じ経路を2回以上通過することはなくなります。
番号が1のスイッチSTPではルートブリッジと言います。
なぜ、このようなLANを構成すると、スパニング・ツリーになるかと言いますと、以下の図に示したように木の根元から枝が生えているイメージになるからです。

ルートブリッジを根っ子にしたSTPの木構造の例
ルートブリッジを根っ子にしたSTPの木構造の例

こういう見方もできるので、ルートブリッジとなっているスイッチを根っ子にしたLANの論理的な構成がわかりやすいです。
これで、前のようなループ構造のLANの問題を解決できます。
ちなみに、スパニング・ツリーとは、広がる木というような意味です。
確かに上の図を見るとそんな感じですよね。

上に図を描きましたので、STPに対応したLANのイメージは掴めたと思います。
STPプロトコルなので、MACフレームの中に専用のヘッダーがあります。
このヘッダーを含むBPDUBridge Protocol Data Unitフレームスイッチ間で一定間隔をおいて送受信します。
通常2秒間隔です。
BPDUメッセージを運ぶMACフレームのフォーマットを以下の表に示しておきます。

BPDUメッセージを運ぶMACフレーム【単位:オクテット
終点MACアドレス【6】
始点MACアドレス【6】
MACフレームの長さ【2】
DSAP(42)【1】
SSAP(42)【1】
制御(42)【1】
BPDU【35または4】
パディング【8または39】
FCS【4】

一番上の薄い緑色の部分は、MACヘッダーで、続く薄い水色の部分がLLCヘッダーで、続くクリーム色の部分がBPDUヘッダーです。
LLCヘッダーの各フィールドにはすべて16進数で42が設定されます。
BPDUヘッダーには、BPDUメッセージの内容が設定されます。
BPDUメッセージには2種類あります。
その一つは、コンフィギュレーションBPDUメッセージ(Configuration BPDU message)、もう一つは、トポロジー変更通知BPDUメッセージ(Topology Change Notification BPDU message)です。
前者は、初期状態からツリー構造のLANを作るためにスイッチ間で相互通信される時に流れるメッセージです。
これに対して、後者は一度できあがったツリー構造のLANの変更を行いたい場合、流れるメッセージです。
続いてBPDUメッセージのフォーマットを以下の表に示しておきます。

トポロジー変更通知BPDUメッセージ【単位:オクテット(単位:ビット)】
プロトコル識別子・・・0【2(16)】
バージョン識別子・・・0【1(8)】
BPDUタイプ・・・1000 0000【1(8)】

コンフィギュレーションBPDUメッセージ【単位:オクテット(単位:ビット)】
プロトコル識別子・・・0【2(16)】
バージョン識別子・・・0【1(8)】
BPDUタイプ・・・0000 0000【1(8)】
フラグ【1(8)】
ルートブリッジ識別子【8(64)】

ルートブリッジ優先度【2(16)】
ルートブリッジMACアドレス【6(48)】
ルート・パス・コスト【4(32)】
ブリッジ識別子【8(64)】

ブリッジ優先度【2(16)】
ブリッジMACアドレス【6(48)】
ポート識別子【2(16)】

ポート優先度(4ビット)ポート番号(12ビット)
メッセージ年齢(message age)【2(16)】
最大年齢(maximum age)【2(16)】
ハロー時間(hello time)【2(16)】
転送遅延(forward delay)【2(16)】

プロトコル識別子とバージョン識別子には必ずゼロが設定されます。

BPDUタイプには、トポロジー変更通知BPDUメッセージか、コンフィギュレーションBPDUメッセージの何れかを示すフラグがMSBMost Significant Bit)に設定されるので、このビットを見れば、どちらのメッセージかがわかります。
MSBとは、最上位ビットのことを言います。つまり、一番左のビット(上の表の赤い字のビット)です。
このビットが1だとトポロジー変更通知BPDUメッセージで、0だとコンフィギュレーションBPDUメッセージです。
ちなみに、LSBLeast Significant Bit)は最下位ビットのことを言います。
トポロジー変更通知BPDUメッセージでは、このBPDUタイプ・フィールドまでしかありません。
この後のフィールドは、コンフィギュレーションBPDUメッセージにしかありません。

ルートブリッジ識別子は、ルートブリッジ優先度とルートブリッジを識別するためのMACアドレスから構成されています。

ルートブリッジ識別子の下にルート・パス・コストRoot Path Cost)があります。
ルートブリッジへ通じているパスがたくさんある場合、最短距離のパスを残して、それ以外のパスをブロックさせることでループになっている経路を遮断し、通過するフレームループしてしまうネットワークの問題を回避する必要があります。
ちょっと、ディスク上のルートディレクトリーから辿って目的のファイルがあるところまでのパスとイメージが似ていますね。
ファイルの所在を表す一連の文字列をパスと言いますが、STPの木構造では、パスは幹や枝に相当します。
たくさんあるパスから最短距離のパスを見つけるために判断のよりどころとしている基準値がありまして、これをコストと言います。
最短距離のパスとは、最もコストが小さいパスを言います。
ルートブリッジという根っこから幹や枝を辿っていくと、LANに何台もスイッチが繋がっていれば、いくつもブリッジを通過していくことになります。
途中通過する一つ一つのブリッジの各ポートには、パス・コストPath Cost)が設定されていて、これらのパス・コストを合計したものをルート・パス・コストと言います。
ルートブリッジは根っこに相当するので、このブリッジコスト値はゼロにします。
ルートブリッジから辿って各ブリッジを通過するたびにコストを加算していきます。

ブリッジ識別子は、ブリッジ優先度と送信元のブリッジを識別するためのMACアドレスから構成されています。
ブリッジ識別子は、ブリッジ優先度とMACアドレスが連続したビット列として識別され、ブリッジ識別子が一番小さいスイッチルートブリッジになります。
ブリッジ優先度が同じスイッチが存在した場合は、ブリッジ識別子に含まれるMACアドレスが小さい値のスイッチルートブリッジになります。

ポート識別子は、ポート優先度とポート番号から構成されています。
ポート優先度に関しては、値が小さいほど高い優先度となり、スイッチのメーカーや製品によっては、デフォルト値(初期値)が決まっている場合があります。
ポート番号は、送信元のブリッジに割り当てられたポートを識別するための番号です。

メッセージ年齢は、ルートブリッジか送信されたBPDUメッセージの寿命を示します。
IPヘッダーにあるTTLのようなフィールドです。
最大年齢は、BPDUメッセージの寿命を示し、6〜40までの値を設定できます。
スイッチは、何台も繋げて運用することができますが、最大年齢の値の数だけスイッチを繋げることができます。
もし、最低値の6に設定したとしたら、ルートブリッジとなっているスイッチを除いた数の6台までということになり、BPDUメッセージは6台目のスイッチで破棄され、7代目以降のスイッチにはを送信できないので、BPDUメッセージが届かないネットワークではまたフレームループしてしまう状態に陥ります。
ハロー時間は、BPDUメッセージの送信間隔です。
転送遅延は、ブリッジの状態が遷移するまでの時間を指します。

BPDUメッセージのフォーマットについては以上とします。

さて、今度はSTPを実装したスイッチの機能面、STPができるまでの流れ、及び、障害対策に関して説明します。
上の「ブロードキャストフレームループを作ってしまっているLANの例」の図をまた御覧下さい。
この図のネットワークでは、フレームが赤い線の矢印の方向にぐるぐるループして(回って)しまいます。
そこで、以下の図で示した赤い丸の部分のポートをブロックして、フレームが1番のスイッチに流れないようにします。

STPで改善し、閉鎖ポートを示したLANの例
STPで改善し、閉鎖ポートを示したLANの例

これでフレームがぐるぐる回ることはありません。
スイッチ同士は、互いにBPDUというプロトコルに従って、BPDUメッセージのやりとりをし、それぞれのスイッチが持つ情報を互いに交換し合います。
それぞれのスイッチは、相手から来た情報を基にブリッジ優先度と使用するポートを決めます。
ブロックする必要があるポートは、どこかと通信できないように閉鎖します。
ルートブリッジを決めるには、ブリッジ識別子を使用します。
ルートブリッジが決まれば、ルートポートや運用できる有効なポートを決定していくことができます。
これら以外のポートは、無効なポートなのでブロックします。
ブロックされるポートを決めるには、パス・コストを使用します。
ルートブリッジになれなかったスイッチでは、ルートブリッジまで最短パスフレームを送れるポートを決めます。
このポートをルートポートと呼びます。
最短パスは、パス・コストで決めます。
パス・コストの値が小さいポートがルートポートになります。
パス・コストで判断できない場合は、ブリッジ識別子やポート優先度などを使用します。
次に、通信可能な有効なポート(ルートポートでもブロックされたポートでもないポート)を決めます。
このようなポートは、物理セグメントからルートブリッジまで最短パスフレームを送れるポートになります。
これらの何れでもないポートは、ブロックされる対象となるポートです。
こうして、スパニング・ツリーができあがります。
STPは、通常使用するルートとは異なるルートを障害用に代替ルートとして使用します。
STPは、LANの障害を検出することもできます。
通常使用するルートの障害時には、この代替ルートに切り替えて運用を続行することになります。
自動的に新しい経路に切り替わるのに、経路の再計算が必要となるため、復旧に30秒以上かかるというのがちょっと問題です。
こうして、STPスパニング・ツリーが倒れないように維持しようとします。
その後、スイッチ同士は、定期的に相互通信を行ってLANが正常に動作し、障害がないかどうかを確認しています。
もし、障害を検出すると、スパニング・ツリーを再構成し、ブロックされていたポートでの通信を可能にし、運用を続行します。
このように、ネットワーク冗長性Redundancy)を加えることで信頼性を高めています。
ネットワークの場合、あえて冗長性を加える(冗長構成にする)ことで信頼性を高めますが、元々冗長性とは無駄が多い性質を言います。
従って、ネットワークの場合は、あえて無駄を増やすわけですが、ネットワークの場合は現実的に見て無駄がある方が安心できることになるので、STPの場合は、あえて普段使わない代替ルートを用意しておきます。

さて、次はポートステータスについて説明します。
STPでは、5つのポートステータスがあり、このステータスを調べればポートの状態がわかるようになっています。

  1. (1) フォワーディング


  2. 一般のフレームBPDUフレームもポートを通過できるようになっている状態をフォワーディングと呼びます。

  3. (2) リスニング


  4. リスニングのポートステータスでは、一般のフレームの送受信は行いません。
    しかし、BPDUフレームの送受信は行われます。

  5. (3) ブロッキング


  6. ブロッキングのポートステータスは、ループ状態の回避のために、一般のフレームの送受信を行わない状態を意味します。
    障害を検出するためのBPDUフレームだけは受信します。

  7. (4) ラーニング


  8. ラーニングのポートステータスは、MACアドレスの学習のために、一般のフレームの受信を行える状態を示しています。
    受信したフレームは、転送されずに破棄されます。
    BPDUフレームの送受信は普通に行われます。

  9. (5) ディスエイブル


  10. 一般のフレームだけではなく、BPDUフレームも遮断するステータスで、管理者が意図的にポートの閉鎖を行った場合にこの状態になります。
    ディスエイブルとは、ポートの使用不可能を意味しています。

これでSTPの仕組みに関する解説は終わりとします。

ところで、STPはどのようなスイッチに実装されているのでしょうか。
STPは、レイヤ2以上のスイッチで対応していますが、低価格なスイッチングハブでは対応していない機種も多くありますので、購入の際は製品仕様をよく見て検討する必要があります。
5000円くらいのスイッチングハブがありますが、こんなのではまず対応していないです。
5万円以上くらいのインテリジェントハブでも買わないと、STPには対応していません。
このくらいの価格の機種なら、ミラーリングポートも付いていますし、SNMPVLANにも対応しています。

STPに関する解説はこれでおしまいとしたいのですが、最新の情報としてRSTPRapid STP)という新しいSTPの技術が登場しました。
前の方で、自動的に新しい経路に切り替わるのに、経路の再計算が必要となるため、復旧に30秒以上かかるのが以前のSTPでは問題であることを述べましたが、このRSTPを利用すれば、経路再計算が数秒に縮まります。
このRSTPRapid STP)は、IEEE802.1wとして標準化され、代替経路切り替えの高速化のために作られました。


ページトップ
サイトマップ(LAN技術研究室の案内図)
ネットワーク技術用語集へ行く
LAN技術研究室のトップページ




© 2007 Toyozi Masuda All rights reserved.