スパニングツリーのトポロジー
スパニングツリーの構成方法には大きく2つの考え方があります。
1つはネットワーク全体で1つのトポロジーを形成する CST(Common Spanning Tree)、もう1つはVLANごとに個別のトポロジーを構成できる PVST+(Per-VLAN Spanning Tree Plus) です。
CST(Common Spanning Tree)
CSTは、VLANがいくつ存在していてもスパニングツリーは1つだけ作られる仕組みです。つまり、VLANごとに別々のルートブリッジを設定することはできません。
例えば、VLAN10のホストAとVLAN20のホストBがいても、トラフィックは共通のフォワーディングパスを通ります。もしそのリンクに障害が起きた場合は、バックアップリンクがSTPによってフォワーディング状態へ切り替わりますが、平常時には利用されません。
CSTが標準化された当初(IEEE 802.1D制定時)は、VLANという概念自体がなかったため、当時のスイッチはCSTしかサポートしていませんでした。
PVST+(Per-VLAN Spanning Tree Plus)
PVST+はCisco独自に拡張された仕組みで、VLANごとに独立したSTPを構成できます。そのため、VLANごとにルートブリッジを分けて設定し、ロードバランシングを行うことが可能です。
例えば、SWAをVLAN10のルートブリッジ、SWBをVLAN20のルートブリッジにすることで、VLANごとに異なる通信経路を選ばせることができます。このようにすることで、あるVLANの通信はSWA経由、別のVLANの通信はSWB経由といった分散が実現します。
また、1つの物理ポートでもVLANごとにルートポートや指定ポートの役割を変えられる点が特徴です。つまり同じインターフェースでも、VLAN10ではルートポート、VLAN20では非指定ポートといった具合に異なる役割を持つことができます。
PVST+における拡張システムID
CSTの時代は、ブリッジIDは「ブリッジプライオリティ」と「MACアドレス」の組み合わせで構成されていました。デフォルトのプライオリティ値は 32768 です。
一方、PVST+では「ブリッジプライオリティ」「拡張システムID」「MACアドレス」の3要素でブリッジIDを構成します。ここで追加された拡張システムIDには「VLAN ID」の情報が格納されます。これにより、VLANごとに異なるブリッジIDを持てる仕組みになっています。
ただし、拡張システムIDの導入によってブリッジプライオリティの値を細かく設定できなくなり、4096刻みでしか指定できなくなりました。
例えば、
- VLAN1の場合:ブリッジプライオリティ 32768 + VLAN ID 1 = 32769
- VLAN10の場合:ブリッジプライオリティ 32768 + VLAN ID 10 = 32778
このようにして、VLANごとに異なるプライオリティ値を持つことができます。
STPの設定(PVST+の設定)
Catalystスイッチでは、スパニングツリーはデフォルトで有効になっています。そのため基本的には追加の設定は不要ですが、無効化していた場合やルートブリッジを意図的に決めたい場合には、明示的に設定を行うことがあります。ここでは、試験で問われやすい 有効化・無効化の設定 と ブリッジプライオリティの調整 について整理していきます。
スパニングツリーの有効化と無効化
STPはVLANごとに有効・無効を切り替えることができます。
- 有効化する場合
(config)# spanning-tree vlan vlan-id
例:VLAN10で有効化する場合
(config)# spanning-tree vlan 10
- 無効化する場合
(config)# no spanning-tree vlan vlan-id
例:VLAN10で無効化する場合
(config)# no spanning-tree vlan 10
ここは「VLAN単位で制御できる」という点を必ず押さえてください。
ブリッジプライオリティの設定
PVST+ではVLANごとにルートブリッジを選べるため、ブリッジプライオリティをVLANごとに設定します。
(config)# spanning-tree vlan vlan-id priority priority
- VLAN ID:1 ~ 4094
- プライオリティ値:0 ~ 61440(4096刻みで設定可能)
例:VLAN10のプライオリティを4096にする場合
(config)# spanning-tree vlan 10 priority 4096
よくある設計は、
- ルートブリッジにしたいスイッチ → プライオリティ 0
- セカンダリールートブリッジにしたいスイッチ → プライオリティ 4096
という形です。セカンダリールートブリッジは、ルートブリッジがダウンしたときに代わりを務める候補になります。
ダイナミックなルートブリッジ設定
Ciscoスイッチには、プライオリティを自動調整してルートブリッジにするコマンドも用意されています。
- プライマリールートに設定する場合
(config)# spanning-tree vlan vlan-id root primary
このコマンドを設定すると、そのスイッチは既存のルートブリッジより小さいプライオリティ値を自動的に選びます。例えば既存が32768なら、自動的に24576が設定され、強制的にルートブリッジになります。
- セカンダリールートに設定する場合
(config)# spanning-tree vlan vlan-id root secondary
こちらを実行すると、そのスイッチのプライオリティは28672に設定されます。ただし、この値は固定であり、他のスイッチの設定状況によっては本当にセカンダリールートになれる保証はありません。そのため「実運用では非推奨」と覚えておくとよいです。
実践的な設計のポイント
最も確実な方法は、ルートブリッジとセカンダリールートブリッジを明示的に設定することです。
- VLANごとに「ルート=0」「セカンダリ=4096」と決める
- すべてのリンクの帯域幅が同じ場合、最終的な判定はブリッジID(MACアドレスやポートID)に依存する
こうしておけば、障害が発生したときに予測どおりの切り替えが行われ、安定したSTPの運用ができます。
試験でも「root primary / root secondary コマンドの動作」と「明示的な priority 設定の違い」を区別して問われることがあるため注意してください。
STP(PVST+):スパニングツリーのステータス確認
Catalystスイッチでスパニングツリーの状態を確認するときには、次のコマンドを使います。
# show spanning-tree
このコマンドで表示される情報を読み解くことで、どのスイッチがルートブリッジなのか、各ポートがどんな役割を担っているのかを確認できます。試験では出力結果の一部を示されて「このスイッチはルートブリッジか?」といった設問が出されることがあるので、見方を整理しておくことが重要です。
以下では、SWAがVLAN1においてルートブリッジとなっている例を基に解説します。
出力項目の見方
① VLAN ID
表示されている情報がどのVLANに関するものかを示します。ここでは VLAN1 の情報です。
② STPモード
ieee は PVST+(従来のSTP)、rstp は Rapid-PVST を意味します。
③ ルートブリッジのプライオリティ値
「ブリッジプライオリティ + VLAN ID」の合計で表示されます。例えばプライオリティが0でVLAN1なら「1」と表示されます。
④ ルートブリッジのMACアドレス
ネットワーク内で選ばれたルートブリッジのMACが表示されます。自分がルートなら自分のMACが出ます。
⑤ このスイッチがルートかどうか
「This bridge is the root」と表示されていれば、そのスイッチ自身がルートブリッジです。
⑥ ルートブリッジがアドバタイズする各種タイマー
Helloタイム(デフォルト2秒)、Forward Delay(15秒)、Max Age(20秒)などが確認できます。
⑦ 自分自身のブリッジプライオリティ
プライオリティ値とVLAN IDの合計です。
⑧ 自分自身のMACアドレス
スイッチ固有のMACアドレスが表示されます。
⑨ 自分自身に設定されているタイマー値
⑥の値と同じになることが多いですが、設定によっては異なる場合があります。
⑩ MACアドレスエージングタイム
学習したMACアドレスを保持する時間。デフォルトは300秒です。
⑪ ポートの役割(Role)
Root = ルートポート、Desg = 指定ポート、Altn = 非指定ポート(代替ポート)。
⑫ ポートのステータス(State)
FWD = フォワーディング状態、BLK = ブロッキング状態。
⑬ ポートコスト
リンク速度に応じて自動計算されます。例:10Gbps=2、1Gbps=4、100Mbps=19、10Mbps=100。
⑭ ポートID
「ポートプライオリティ(デフォルト128)」と「ポート番号」を組み合わせたものです。
⑮ ポートタイプ
P2p はスイッチ間接続、Edge P2p はPortFastが有効なエッジポート。
⑯ ルートパスコスト
そのポートからルートブリッジまでの合計コスト値です。
⑰ ルートポートの識別子
Catalyst内部の物理ポート番号で、装置によって異なる番号が表示されます。
STP(PVST+):コンバージェンスの高速化
従来のIEEE 802.1D STPでは、障害発生やリンク接続時に最大50秒もの通信断が発生してしまうのが大きな課題でした。この時間は ブロッキング → リスニング(20秒) → ラーニング(15秒) → フォワーディング(15秒) という遷移プロセスに由来します。
Ciscoはこの問題を解消するため、いくつかの高速化機能を追加しました。その代表が PortFast / UplinkFast / BackboneFast の3つです。現在では改良版のRSTP(Rapid PVST+)が主流であり、特にUplinkFastやBackboneFastはあまり使われませんが、試験範囲としては理解しておく必要があります。一方で、PortFastは今でも現場で多用されています。
PortFast
通常のポートは通信を始めるまでに学習フェーズを経るため、PCやサーバを接続するとすぐには通信ができません。PortFastを設定すると、ポートはすぐにフォワーディング状態に移行し、PC起動直後から通信可能になります。
設定方法は以下の2種類です。
- 特定のインターフェースに適用(推奨)
(config-if)# spanning-tree portfast
- 全てのアクセスポートに一括適用(非推奨)
(config)# spanning-tree portfast default
注意点として、PortFastをスイッチ間リンクなどに誤って設定するとループを引き起こす危険があります。そのため「ホスト接続のアクセスポート専用」と覚えておきましょう。
設定時には警告メッセージが表示されますが、PCやサーバ接続ポートであれば問題ありません。
UplinkFast
UplinkFastは、非ルートブリッジでルートポートが障害により使えなくなったとき、ブロッキング状態にあった別のポートを即座にフォワーディングへ切り替える機能です。これにより収束が5秒以内に短縮されます。
設定は簡単で、次の1行を投入します。
(config)# spanning-tree uplinkfast
ただし、この機能は「ルートポートと非指定ポートを持つ非ルートブリッジ」に対してのみ有効です。ルートブリッジやセカンダリールートブリッジには不要です。
BackboneFast
BackboneFastは「間接リンクの障害」発生時に収束を速めるための機能です。通常はMaxAge(20秒)を待ってから再計算に入るため収束まで50秒かかりますが、BackboneFastを有効にするとMaxAgeの待ち時間を短縮し、30秒で収束可能になります。
設定は以下です。
(config)# spanning-tree backbonefast
この機能は ネットワーク内の全スイッチに設定が必要 です。
動作の流れを簡単に整理すると、次のようになります。
- 間接リンク(ルートブリッジと別のブリッジ間)が切断される。
- BPDUを受信できなくなったスイッチが、自分をルートとするBPDU(下位BPDU)を送信する。
- それを受け取ったスイッチが「ルートリンククエリ(RLQ)」を送信し、本物のルートの存在を確認する。
- ルートブリッジが「RLQ Ack」を返す。
- 応答を受けたスイッチは「ルートは生きているがトポロジーに変化あり」と判断し、MaxAgeを待たずに再計算を開始する。
- これにより、非指定ポートが30秒で指定ポートへ昇格し、経路が切り替わる。