スパニングツリープロトコル(STP·RSTP·MSTP)
1. 概要
A. 定義
スパニングツリープロトコル(STP, Spanning Tree Protocol) とは、物理的にループ(loop)が存在するL2イーサネットスイッチ網において、一部のポートを論理的に遮断(blocking)することで、ただ一つのループのないツリートポロジを自動的に計算・維持するIEEE 802.1D 標準プロトコルである。グラフ理論の全域木(spanning tree)の概念をネットワークに適用し、すべてのスイッチが接続されつつ閉路のない経路集合を作ることで、L2ループによるブロードキャストの暴走を根本から遮断する。
B. 登場背景と必要性
イーサネットは可用性のためにスイッチ間の回線を二重・三重に接続するが、L2フレームにはIPパケットのTTLのような寿命フィールドがない。したがってループが存在すると、ブロードキャストや宛先不明ユニキャストのフレームが際限なく循環し指数関数的に増殖するブロードキャストストーム(broadcast storm) が発生する。同時に、同一フレームが複数の経路から戻ってきてMACアドレステーブルが揺れ動くMACフラッピング(flapping) が起こり、スイッチのCPU・帯域が数秒で麻痺する。
実際、たった一本の誤接続ケーブルが全社ネットワークをダウンさせる障害事例が繰り返されたことで、1990年にRadia Perlmanが考案したSTPがIEEE 802.1Dとして標準化され、イーサネットL2冗長化の事実上の前提条件となった。たとえばアクセススイッチ2台をディストリビューションスイッチ2台にそれぞれ交差接続した平凡な冗長構成でさえ、STPがなければ4本のリンクが一つの閉回路を成し、それ自体がストームの種となる。STPはこうしたトポロジで4本のうち1本を自動的に休止させ、平常時のループフリーを保証する。
標準の変遷も押さえておく価値がある。最初の802.1D(1990)が基本STPを定義し、高速収束のためのRSTPが802.1w(2001)として分離標準化された後802.1D-2004に再統合され、VLANごとの複数ツリーのためのMSTPは802.1s(2002)として登場した後802.1Qに吸収された。したがって今日「802.1D」といえば大抵はRSTPを含む2004年版を指し、新規機器は基本的にRSTP以上の動作を既定で備える。
STPの本質は、物理的冗長(可用性)と論理的ループフリー(安定性)という相反する要求を調停することにある。障害に備えて回線は重複して敷設するが、平常時にはその一部を遮断してツリーを維持し、アクティブ経路が切れると遮断していたポートを再び生かして迂回経路へ切り替える。すなわちSTPは「予備の経路を普段は休ませておき、必要なときに起こす」自己修復型のL2トポロジ管理メカニズムであり、この収束速度と帯域効率を改善してきた歴史こそがSTP → RSTP → MSTPの進化過程である。
2. 全体構造 — ブリッジトポロジとルート中心ツリー
flowchart TB
R["ルートブリッジ<br/>(最小Bridge ID)"]
B2["スイッチB"]
B3["スイッチC"]
B4["スイッチD"]
R ---|"指定ポート(DP)"| B2
R ---|"指定ポート(DP)"| B3
B2 ---|"ルートポート(RP)"| R
B3 ---|"ルートポート(RP)"| R
B2 --- B4
B3 --- B4
B4 ---|"ルートポート(RP)"| B2
B4 -. "遮断ポート(Blocking)<br/>ループ除去" .- B3
style R fill:#fef3e8,stroke:#ed8f2f,stroke-width:3px
style B4 fill:#e8f0fe,stroke:#2f6fed
STPがツリーを立てる基準点はルートブリッジ(Root Bridge) である。すべてのスイッチは互いにBPDU(Bridge Protocol Data Unit) という制御フレームを2秒ごと(Hello)に交換し、その中に収められたBridge ID(2バイトの優先度 + 6バイトのMACアドレス、計8バイト)を比較して、最も小さい値を持つスイッチを網全体の唯一のルートとして選出する。優先度の既定値は32768であり、値が同じ場合はMACアドレスの小さい側が勝つ。
ルートはツリーの頂点であり、すべての経路計算の原点となるため、実務ではコア・ディストリビューション層の安定したスイッチに優先度を低く(例:4096)手動設定し、意図したスイッチが必ずルートになるよう固定するのが原則である。ルートを指定しないと、工場出荷状態のMACが最も低い老朽機器が偶然ルートになり、トラフィックが遅い隅のスイッチへ集中する非効率がしばしば生じる。
ルートが定まると、残りの非ルートスイッチは自分からルートまでの累積経路コスト(Path Cost) が最も低いポート一つをルートポート(Root Port) として選ぶ。経路コストはリンク速度の逆数の概念で、IEEE標準値(short方式)では10Mbps=100、100Mbps=19、1Gbps=4、10Gbps=2であり、遅い回線ほどコストが大きくツリーから排除されやすい。10G以上が一般化するにつれて16ビットでは区別が難しくなり、1Gbps=20000・10Gbps=2000のようにより広い範囲を使う32ビットのlong方式も並行して標準化された。
各LANセグメントごとには、ルートまでのコストが最も低いスイッチがそのセグメントを代表する指定ポート(Designated Port) を持ち、ルートポートでも指定ポートでもない残りのポートは遮断(Blocking) されフレームを中継しない。まさにこの遮断ポートが物理的ループを断ち切ってツリーを完成させる。重要な点は、遮断ポートも死んでいるのではなくBPDUは受信し続けてツリーを監視し、アクティブ経路が切れると即座に昇格して迂回路になることである。
主な構成要素を整理すると次のとおりである。
| 要素 | 役割 | 備考 |
|---|---|---|
| BPDU | スイッチ間でトポロジ情報を交換するフレーム | Configuration BPDU·TCN BPDU、Hello 2秒 |
| Bridge ID | ルート選出の基準(優先度+MAC) | 小さいほど優先、既定優先度32768 |
| ルートブリッジ | ツリーの頂点、経路計算の原点 | 網全体に1個 |
| ルートポート(RP) | ルートへ向かう最小コストのポート | 非ルートスイッチごとに1個 |
| 指定ポート(DP) | セグメント代表ポート(フレーム中継) | セグメントごとに1個 |
| 遮断ポート | ループ除去のため中継を停止 | アクティブ経路障害時に再活性化 |
BPDUは役割によって2種類に分かれる。平常時にルートがHello周期ごとに下方へ伝播するConfiguration BPDUは、ルートID・経路コスト・送信Bridge ID・タイマ値を載せてツリーを維持する。一方、あるスイッチのポート状態が変わると(リンクダウン・アップ)、そのスイッチはルート方向へTCN(Topology Change Notification)BPDUを上げて送り、ルートはこれを受けてTCフラグを立てたConfiguration BPDUを網全体へ下ろす。
このトポロジ変更通知が重要なのは、MAC学習情報の一貫性のためである。TCを受信したスイッチは、MACアドレステーブルのエージングタイマを既定の300秒からForward Delay(15秒)へ短縮し、旧経路に紐づいた古いMAC学習情報を速やかに空にして新トポロジに合わせて再学習させる。このTC伝播範囲が広いほど再学習に伴う一時的なフラッディングが大きくなるため、L2ドメインを小さく保つことが運用安定性の要である。
3. 収束過程とポート状態遷移
stateDiagram-v2
[*] --> Blocking: port UP
Blocking --> Listening: selected as designated/root port
Listening --> Learning: Forward Delay 15s
Learning --> Forwarding: Forward Delay 15s
Forwarding --> Blocking: topology change or loop detected
note right of Listening: processes BPDUs only, no frame/MAC learning
note right of Learning: begins MAC learning, frame forwarding not yet
STPの収束は四段階の決定を経る。
A. ルートブリッジ選出. ポートが上がると、すべてのスイッチは自分をルートと仮定したBPDUを送出するが、より小さいBridge IDを聞くとその側をルートと認め、自分のBPDU伝播を止める。数回の交換で網全体が単一ルートに合意し、この過程で最初の優先度設定ミスが最も多い事故原因であるため、設計段階でルート・バックアップルートの優先度を明示的に指定しなければならない。バックアップルートにはルートより一段低い優先度(例:8192)を与え、ルート障害時に予測可能なスイッチが引き継ぐよう設計する。
B. ルートポート選出. 各非ルートスイッチは受信したBPDUに自分のポートコストを加えてルートまでの累積コストを計算し、最小コストのポートをルートポートに定める。コストが同率なら送信側のBridge ID、次にポートID(優先度+ポート番号)で決める。たとえば接続スイッチが1Gbps直結(コスト4)と100Mbps迂回(コスト19)を併せ持つなら、1Gbps側がルートポートになり100Mbps側は待機へ回される。
C. 指定ポート選出. 2台のスイッチが噛み合うセグメントでは、ルートまでのコストが低い側が指定ポートを持ち、コストが同じならBridge IDの小さい側が勝つ。ルートポートにも指定ポートにもなれなかったポートは遮断されツリーから除外される。結果として、すべてのセグメントにちょうど一つの指定ポートが存在し、すべての非ルートスイッチにちょうど一つのルートポートが存在するのが正しい収束状態である。
D. ポート状態遷移とタイマ. 従来のSTPはポートをBlocking → Listening → Learning → Forwardingの順に遷移させるが、Listening・LearningにそれぞれForward Delay 15秒を要し、遮断ポートが障害を検知するのにMax Age 20秒かかるため、最悪の場合30〜50秒のサービス断が発生する。この「分単位に近い」収束遅延はVoIP・リアルタイムサービスで致命的であるため、ポート状態をDiscarding・Learning・Forwardingの3段階に縮小し、提案/同意(Proposal/Agreement)ハンドシェイクで即時に切り替えるRSTP(802.1w) が登場し、1秒以内の収束を達成した。
従来のSTPが使う既定タイマと、それによる収束遅延を整理すると次のとおりである。これらのタイマはルートがBPDUで伝播するため網全体がルートの値に従い、むやみに縮めると伝播遅延の大きい網で誤検知・不安定を招くため、安易に調整しないのが原則である。
| タイマ | 既定値 | 意味 | 影響 |
|---|---|---|---|
| Hello Time | 2秒 | BPDU送信周期 | 障害検知の感度 |
| Max Age | 20秒 | BPDU未受信時の情報破棄待ち | 間接障害の検知 |
| Forward Delay | 15秒 | Listening·Learning各段階の滞在 | 遷移遅延の主因 |
| 収束(直接障害) | 約30秒 | Listening 15 + Learning 15 | 2段階遷移 |
| 収束(間接障害) | 約50秒 | Max Age 20 + 30 | 遮断ポート昇格 |
RSTPの高速な切り替えは単なるタイマ短縮ではなく、ポート役割の細分化に基づく。RSTPは既存のRP/DPのほか、即時昇格可能な待機役割としてAlternateポート(ルートへの代替経路)とBackupポート(同一セグメントの予備)を明示的に保持する。そのためルートポートが切れるとタイマを待たずにAlternateをそのままForwardingへ上げ、事実上ほぼ無断の切り替えを実現する。ポート役割と状態の対応を従来のSTPと比較すると次のとおりである。
| 区分 | 従来のSTP | RSTP |
|---|---|---|
| 状態数 | 5(Disabled含む) | 3 |
| アクティブ状態 | Blocking/Listening/Learning/Forwarding | Discarding/Learning/Forwarding |
| 待機役割 | なし(Blockingと総称) | Alternate·Backupを明示 |
| 切替方式 | タイマ満了 | Proposal/Agreementハンドシェイク |
| エッジポート | 別機能(PortFast) | 標準内蔵(Edge Port) |
4. STP·RSTP·MSTPの比較
三つの標準の違いは単なるバージョンアップではなく、「収束速度」と「VLAN拡張性」という二つの軸で異なる問題を解いた結果である。RSTPは切替速度を、MSTPは大規模VLAN環境の制御負荷を狙う。
| 区分 | STP(802.1D) | RSTP(802.1w) | MSTP(802.1s) |
|---|---|---|---|
| 収束時間 | 30〜50秒 | 1秒以内 | 1秒以内(RSTPベース) |
| ポート状態 | 5段階 | 3段階(Discarding/Learning/Forwarding) | 3段階 |
| ポート役割 | RP/DP | RP/DP/Alternate/Backup | RP/DP/Alternate/Backup |
| VLAN処理 | 全体で単一ツリー(CST) | 単一ツリー | 多数VLAN→少数インスタンス(MSTI) |
| 主な用途 | レガシー | 小・中規模 | 数百VLANの大規模キャンパス |
従来のSTPは網全体にツリーを一つ(CST)だけ置き、すべてのVLANが同一経路を使うため、遮断された冗長リンクが平常時まったく活用されず帯域の半分近くを浪費するという構造的限界があった。CiscoのPVST+はVLANごとにツリーを別々に回して負荷を分散したが、VLANが数百個になればそのぶんBPDU・CPU負担が爆発した。
MSTP(802.1s) は複数のVLANを少数のMSTインスタンス(MSTI) に束ね、たとえばVLAN 1〜500をインスタンス1(ルート=スイッチA)、501〜1000をインスタンス2(ルート=スイッチB)に分けて、二つのツリーで冗長リンクを両側とも活性化しつつ制御オーバーヘッドをインスタンス数ぶんに抑える。このように「速度はRSTP、拡張性はMSTP」と役割が分担され、実務では大抵Rapid-PVST+またはMSTPを既定で採用する。ただしMSTPは同じMSTリージョン(region) に属するにはリージョン名・リビジョン・VLANインスタンスマッピングがすべてのスイッチで完全に一致しなければならないため、マッピング不一致でリージョンが割れると意図に反して単一ツリーへ戻る落とし穴がある。
具体的な事例として、ある大学キャンパスが建物10棟をそれぞれ2台のディストリビューションスイッチで二重接続し、VLAN 600個を運用する状況を見てみよう。従来のSTP(CST)だけを使うと、建物ごとに二重リンクのうち一本(計10本)が常時遮断され、数十Gbpsの冗長帯域が眠ることになる。これをMSTPに変えてVLAN 1〜300をインスタンス1(ルート=ディストリビューションA)、301〜600をインスタンス2(ルート=ディストリビューションB)に分離すると、インスタンス1で遮断されていたリンクがインスタンス2では活性経路となり、二本の上りリンクをいずれも使用するようになる。結果として利用可能帯域が実質2倍になり、ディストリビューションスイッチ1台が死んでも別インスタンスのトラフィックはそのまま流れる。一方、PVST+でVLAN 600個のツリーをそれぞれ回していたなら、BPDU・演算負荷が600倍となりスイッチCPUが限界に突き当たったであろう。まさにこの点がMSTPが大規模キャンパスで選ばれる実務的理由である。
安定運用のための保護機能も併せて理解しなければならない。端末がつながるアクセスポートはPortFastでListening/Learningを飛ばして即座にForwardingさせるが、そうしたポートがBPDUを受け取ると(スイッチが誤接続された状況)、BPDU Guardがポートを即座に遮断(err-disable)してループを予防する。また、外部からより低いBridge IDのBPDUが入ってルートが奪取されるのを防ぐRoot Guard、単方向リンク障害で遮断ポートがBPDUを受け取れず誤ってForwardingになるのを防ぐLoop Guard·UDLDが代表的である。これらの保護機能なしに運用されるL2網は事実上の時限爆弾に近い。
5. 深化 — データセンターにおけるSTPの衰退とL3ファブリック·VXLAN-EVPNへの移行
STPはキャンパス・支社網では依然として現役だが、東西(East-West)トラフィックが支配的な現代のデータセンターでは急速に追いやられている。根本原因は、①冗長リンクの半分を遮断して帯域を浪費し、②単一ルート中心の構造ゆえトラフィックがコアへ集中し、③トポロジ変更時に収束中のサービスが揺れるブラスト半径(blast radius) の問題があるためである。一つのL2ドメインが大きくなるほど一度のトポロジ変更が全体へ伝播し、障害の影響範囲を閉じ込めにくいことが運用上最大の負担であった。
これに対し業界は、L2マルチパスをL2の中で解決しようとするTRILL(RFC 6325) とSPB(802.1aq) を過渡的に試みたが、結局は「L2を小さく閉じ込め、L3で拡張する」という方向へ収束した。TRILL・SPBはSTPの単一ツリーの限界をIS-ISベースの最短経路多重化で克服したが、既存機器の互換性とエコシステムの不足で主流にはなれなかった。
今日の標準設計は、リーフ-スパイン(Clos)ファブリックを純粋にL3で構成し、すべてのリンクをECMPで同時に活性化したうえで、テナントに必要なL2接続性はVXLANオーバーレイで、その制御はBGP EVPNコントロールプレーンで提供することである。この構造ではSTPが遮断していた冗長経路をすべてフォワーディングに使うため利用可能帯域が2倍になり、障害収束もルーティングプロトコル(数十ms〜数百ms)で処理される。
サーバの二重接続(dual-homing)も、STP遮断の代わりにMLAG/vPCで二台の上位スイッチを一つのように束ねて両方のリンクを使う。ただしMLAG環境でも二台のピアスイッチの間には依然としてSTP(またはEVPNの重複防止メカニズム)が最後の安全網として回り、コントロールプレーン障害でピアが分離(split-brain)したときにループが形成される最悪の状況を防ぐ。すなわち現代の設計でもSTPは「主経路の制御者」から「ループに対する最終的な安全装置」へと役割を変えて残存する。
まとめると、STPは消え去ったのではなく、適用領域が「小さなL2ドメイン・キャンパス」へ縮小し、データセンターの多経路の課題はL3ルーティングとオーバーレイが引き継いだのである。技術士の答案では、この「L2 STP → L3ファブリック + オーバーレイ」の移行の文脈と、それでもSTPが安全網として残る点を併せて述べることが最新動向の反映に有効である。
6. 考慮事項および示唆(技術士の観点)
- ルート設計の明示的固定:ルート・バックアップルートの優先度を必ず手動指定(例:4096/8192)し、PortFast·BPDU Guardをアクセスポートの標準とすべきである。自動選出に委ねると、MACが最も低い老朽スイッチがルートになり、トラフィックが絡まる事故が多い。
- 収束速度とサービス水準のトレードオフ:リアルタイムサービスがあれば従来のSTP(30〜50秒)は不適であるためRSTP/Rapid-PVST+を既定化すべきだが、保護機能(Loop Guard·UDLD)未適用時には高速収束がかえってループを速く拡散させうることも併せて考慮する。
- 帯域効率 vs 運用の複雑さ:MSTP·PVST+で冗長リンクを生かせば帯域は増えるが、VLANインスタンスマッピングやリージョン境界の設定が複雑になる。VLAN数・組織規模に合わせて単一ツリーと複数インスタンスを選択的に適用すべきである。
- アーキテクチャ移行戦略:新規データセンターはSTP依存のL2拡張ではなくL3リーフ-スパイン + VXLAN-EVPNを既定案として検討し、既存のL2網はドメインを分割(小さなL2 + L3分離)してブラスト半径を減らす段階的移行が望ましい。
- セキュリティ脅威への対応:攻撃者が低いBridge IDの偽造BPDUを注入してルートを奪取すると、トラフィックを自分へ引き込んで盗聴(MITM)できるため、Root Guard·BPDU Guard·BPDU Filterを境界ポートに強制し、ユーザポートでのBPDU受信を根本から遮断することをセキュリティの基準線とすべきである。
- 連携技術の観点:STPの理解はVXLAN·EVPN·MLAG·SDN(OpenFlowベースの集中型L2制御)·マイクロセグメンテーションの設計の前提となるため、単一のプロトコルではなくL2可用性設計の出発点として学ぶべきである。
参考資料
- IEEE 802.1D-2004, "Media Access Control (MAC) Bridges", https://standards.ieee.org/standard/802_1D-2004.html
- IEEE 802.1Q-2018 (MSTPを含む), https://standards.ieee.org/standard/802_1Q-2018.html
- IETF RFC 6325, "Routing Bridges (RBridges): Base Protocol (TRILL)", https://www.rfc-editor.org/rfc/rfc6325
- IETF RFC 7432, "BGP MPLS-Based Ethernet VPN (EVPN)", https://www.rfc-editor.org/rfc/rfc7432
一言まとめ: STP(802.1D)はL2イーサネットのループを防ぐためルートブリッジ中心のループフリーなツリーを自動計算し予備ポートを遮断するプロトコルであり、遅い収束(30〜50秒)と帯域浪費をRSTP(802.1w、1秒以内)·MSTP(802.1s、複数インスタンス)が改善し、東西トラフィック中心の現代データセンターではL3リーフ-スパインファブリックとVXLAN-EVPN·MLAGへとその役割が再編されつつある。