目次
スパニングツリーの構成手順
スパニングツリープロトコルによって、ループしているトポロジからルートブリッジを中心としたツリー上のトポロジにします。そのための手順は、以下のようになります。
- ルートブリッジの選出
- ポートの役割(ルートポート、代表ポート、非代表ポート)の決定
- スパニングツリーの維持
例として、次の3台のレイヤ2スイッチがループ構成となっているネットワークトポロジで、スパニングツリーの構成を考えていきましょう。

ルートブリッジの選出
まず、スパニングツリーの中心となるスイッチであるルートブリッジを選出します。ルートブリッジは、ブリッジIDが最小のスイッチです。
スパニングツリーを有効にすると、スイッチは自分自身がルートブリッジと仮定して、コンフィグレーションBPDUを生成して送信します。
他のスイッチから受信したコンフィグレーションBPDUのブリッジIDが自身よりも小さければ、自分自身がルートブリッジであるという仮定が間違っていたことがわかります。そうすると、より小さいブリッジIDを持つスイッチをルートブリッジとして、自分自身がルートブリッジであるというコンフィグレーションBPDUの生成を停止します。
そして、ルートブリッジから受信したコンフィグレーションBPDUに基づいて、新しくコンフィグレーションBPDUを生成して送信します。こうして、スパニングツリーに参加するスイッチ同士で最も小さいブリッジIDを持つスイッチを認識して、ルートブリッジとして選出します。具体的に図のネットワーク構成について考えましょう。
まず、SW1、SW2、SW3は、自分自身をルートブリッジとしてコンフィグレーションBPDUを生成して送信します。自分自身がルートブリッジということはコンフィグレーションBPDUのルートIDとブリッジIDのフィールドに自身のブリッジIDを入れています。

SW2やSW3は、SW1から受信したコンフィグレーションBPDUを見ると、SW1はより小さいブリッジIDを持っていることがわかります。SW2、SW3は自分自身がルートブリッジであるという仮定が間違っていたことがわかり、SW1をルートブリッジとして認識します。SW2、SW3は自分自身をルートブリッジとするコンフィグレーションBPDUをもう生成しなくなります。

なお、2番目にブリッジIDが小さいスイッチはセカンダリルートブリッジと呼びます。現在考えているネットワーク構成では、SW2がセカンダリルートブリッジです。ブリッジIDによって、このあとの代表ポートが決まることもあるので、ルートブリッジだけでなく、セカンダリルートブリッジも明確にしておくとよいでしょう。
SW2、SW3はSW1から受信したコンフィグレーションBPDUを基にして、ブリッジIDやルートパスコスト、ポートIDなどのフィールドを書き換えたコンフィグレーションBPDUをさらに送信していきます。

ポートの役割(ルートポート、代表ポート、非代表ポート)の決定
ルートブリッジを選出すると、ルートブリッジまでの最短経路を判断するために各ポートの役割を決定します。ポートの役割として、3つあります。
- ルートポート(RP:Root Port)
- 代表ポート(DP:Designated Port)
- 非代表ポート(NDP:Non Designated Port)
ルートポートは、ルートブリッジ以外のスイッチからルートブリッジまでの最短経路のポートです。ルートブリッジにはルートポートはありません。ルートブリッジ以外のスイッチで1つのルートポートが決まります。
代表ポートは、スイッチ間のリンクのうちルートブリッジまでの最短経路のポートです。スイッチ間は基本的に1対1で接続されるので、リンクを構成するポートは2つです。リンクを構成する2つのポートのうちどちらがルートブリッジに近いかを考えて代表ポートを決定します。また、代表ポートを持っているスイッチを代表ブリッジと呼びます。
ルートポートと代表ポートはルートブリッジまでの最短経路のポートになるで、イーサネットフレームを転送できるフォワーディング状態になります。ルートポートでも代表ポートでもないポートが非代表ポートです。非代表ポートはルートブリッジへの迂回経路となるので、通常時はイーサネットフレームを転送しないブロッキング状態です。
ルートポートや代表ポートを決めるには、コンフィグレーションBPDUの以下のフィールドの値を見ていきます。
- ルートパスコスト
- ブリッジID
- ポートID
ルートパスコストは、スイッチからルートブリッジまでの累計のパスコストです。各スイッチのルートポートのコストをどんどん足しあわせていくことで、ルートブリッジから各スイッチまでの距離を計測しています。ブリッジIDはコンフィグレーションBPDUを送信するスイッチのブリッジIDで、ポートIDはコンフィグレーションBPDUを送信するポートのポートIDです。いずれも小さい値が優先されます。ポートIDは、ポートプライオリティとポート番号から構成されています。
ルートポートを決めるには、ルートパスコストをもとにして各ポートのパスコストを考えます。各ポートで受信したコンフィグレーションBPDUのルートパスコストに受信したポートのコストを足し合わせることで各ポートからルートブリッジまでの累計のコストを考えます。
ルートブリッジであるSW1にはルートポートはなく、SW2とSW3のルートポートを決定します。ルートブリッジであるSW1がコンフィグレーションBPDUを送信します。ルートIDとブリッジIDはともに100(SW1)です。ルートブリッジ自身なので、距離つまりルートパスコストは「0」です。SW2、SW3はポート1でコンフィグレーションBPDUを受信します。受信したポート1のコストは4なので、SW2 ポート1のパスコストは4です。同様にSW3 ポート1のパスコストも4です。
SW2、SW3はSW1から受信したコンフィグレーションBPDUをもとにコンフィグレーションBPDUを生成します。ルートIDのフィールドはそのままですが、ブリッジIDのフィールドは自身のブリッジIDに書き換えます。そして、ルートパスコストはコンフィグレーションBPDUを受信したポートのパスコストを足します。1Gbpsのポートなのでパスコストは「4」となります。また、ポートIDのフィールドも書き換えます。

SW2に注目すると、SW1から直接受信したコンフィグレーションBPDUとSW3を経由してきて受信したコンフィグレーションBPDUの2つあります。BPDUのルートパスコストと受信したポートのコストを見ると、SW2のポート1とポート2がルートブリッジまでどれぐらいの距離があるのかがわかります。SW2のポート1は「4」で、ポート2は「8」です。パスコストからSW2のルートポートはポート1に決まります。SW3でも同様に考えて、SW3のルートポートはポート1です。

関連記事
ポートIDによってルートポートが決まる具体的な例について、以下の記事で解説しています。
そして、代表ポートを決定する基準は、以下の優先度で見ていきます。
- ルートパスコスト
- ブリッジID
- ポートID
代表ポートは各リンクのルートブリッジへの最短のポートであるため、ルートブリッジのポートは必ず代表ポートです。つまり、SW1-SW2間のリンクでSW1のポート1、SW1-SW3間のリンクでポート2は代表ポートです。あとは、SW2-SW3間のリンクでの代表ポートを考えるだけです。SW2-SW3間のリンクは、SW2 ポート2とSW3ポート2で構成されています。
まず、SW2とSW3のどちらがルートブリッジに近いかを考えます。コンフィグレーションBPDUのルートパスコストの値を見ると、SW2もSW3も同じです。つまり、SW2もSW3もルートブリッジまでの近さは同じです。そのあとは、ブリッジIDを比較します。ルートパスコストが同じ場合は、ブリッジIDが小さいスイッチの方がルートブリッジにより近いとみなします。SW2のブリッジIDの方が小さいので、SW2-SW3間のリンクにおいてはSW2 ポート2が代表ポートです。また、代表ポートを持つスイッチはそのリンクの代表ブリッジとなります。

そして、ルートポートでもなく代表ポートでもないSW3 ポート2が非代表ポートとしてブロッキング状態になります。最終的なスパニングツリーの状態は次の図のようになります。

こうして最終的なスパニングツリーの状態が決まることを「コンバージェンス(収束)する」と呼びます。
スパニングツリーのポートの役割のポイント
以上のような、スパニングツリーのポートの役割を簡単に判断するためのポイントをまとめます。
- ルートブリッジのポートはすべて代表ポート
- ホストやサーバなどループしない部分のポートは代表ポート
- ルートポートの対向ポートは代表ポート
- ルートブリッジに直接接続されているポートはルートポート
- 3台のループ構成では、ルートブリッジでもセカンダリルートブリッジでもないスイッチにブロッキング状態のポートがあらわれる。セカンダリルートブリッジ側のポートが非代表ポート(スイッチ間のリンクはすべて同じ帯域幅のとき)

スパニングツリーの維持
スパニングツリーが完成したあとは、その構成に変更がないかどうかを確認します。スパニングツリーの維持でもコンフィグレーションBPDUを利用します。ルートブリッジは定期的にコンフィグレーションBPDUを送信しています。ルートブリッジ以外のスイッチは定期的にコンフィグレーションBPDUを受信することで、スパニングツリーの構成に変更がないことを確認しています。
ルートブリッジがコンフィグレーションBPDUを送信するということは、代表ポートからコンフィグレーションBPDUが送信されることになります。そして、ルートポートでコンフィグレーションBPDUを受信します。代表ポートはコンフィグレーションBPDUを送信するポートで、ルートポートはコンフィグレーションBPDUを受信するポートであるともいえます。まだ、非代表ポートもコンフィグレーションBPDUを受信するポートです。

レイヤ2スイッチの仕組み
- レイヤ2スイッチの概要 ~ひとつのネットワークを作る~
- レイヤ2スイッチの動作 ~MACアドレスに基づいて転送~
- 演習:レイヤ2スイッチの動作[Cisco]
- コリジョンドメインとブロードキャストドメイン
- レイヤ2スイッチの転送方式
- 全二重通信 ~送信も受信も同時に~
- オートネゴシエーション ~両端のポートの一番いい速度/モードにする~
- Cisco 全二重/半二重の不一致(duplex mismatch)
- ポートセキュリティ ~つながっているPCは正規のPCですか?~
- Cisco ポートセキュリティの設定
- Ciscoポートセキュリティの設定例
- SPAN ~ネットワークのモニタリング~
- スパニングツリーの概要 ~イーサネットフレームの転送経路を冗長化~
- BPDU ~スパニングツリーの制御情報~
- スパニングツリーの仕組み ~ルートブリッジを中心とした転送経路を決める~
- スパニングツリー ポートIDでルートポートが決まるとき
- スパニングツリーのポートの状態 ~ブロッキング/リスニング/ラーニング/フォワーディング~
- TCN BPDUによるトポロジ変更通知
- PVST ~VLANごとにスパニングツリーを考える~
- スパニングツリー(PVST)の設定と確認
- PortFast ~すぐにフォワーディング状態にする~
- スパニングツリーの設定例
- RSTP ~高速なスパニングツリー~
- RSTPの設定例
- ルートガード
- BPDUガード/BPDUフィルタ
- PoE ~UTPケーブルで電源供給~
- イーサチャネルの概要 ~複数のイーサネットリンクをまとめる~
- イーサチャネルの負荷分散 ~単純に帯域幅が増えるわけではない~
- L2イーサチャネルの設定 ~スイッチポートをまとめる~
- L3イーサチャネル ~ルーテッドポートをまとめる~
- イーサチャネルの設定例 L3イーサチャネルとL2イーサチャネルの接続
- LACP/PAgPのshowコマンド
- [Juniper-Cisco相互接続] L2リンクアグリゲーションの設定例
- [Juniper-Cisco相互接続] L3リンクアグリゲーションの設定例
- ストームコントロール