【実務・中級編】 RSTP(Rapid Spanning Tree Protocol:IEEE 802.1w)の高速収束メカニズム – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

STPはなぜ「遅い」と言われたのか?RSTP(IEEE 802.1w)がもたらした高速収束の裏側と実務的チューニング

ネットワークエンジニアの皆さん、日々のインフラ運用お疲れ様です。
レイヤ2ループを防ぐための「聖域」として長年君臨してきたSpanning Tree Protocol(STP:IEEE 802d)。しかし、現代のデータセンターや高可用性が求められる企業ネットワークにおいて、障害発生時に従来のSTPが引き起こす「30秒から50秒のブラックアウト」は、もはや許されない致命傷になり得ます。

Webアプリケーションが数秒のダウンタイムですらリトライストームや504 Gateway Timeoutを引き起こす現代において、L2の収束遅延はアプリケーション層の障害に直結します。

今回は、STPの呪縛を解き放ち、リンク断をわずか数秒(数発のHelloパケット間隔)で収束させる RSTP(Rapid Spanning Tree Protocol:IEEE 802.1w) の深淵へと皆さんをご案内します。教科書的な仕様の丸暗記ではなく、パケットがワイヤー上をどう駆け抜け、スイッチのASIC内部で何が起きているのかという「リアルな挙動」を紐解いていきましょう。

—

1. なぜSTPは遅かったのか? そしてRSTPは何を変えたのか

まずは、私たちが長年苦しめられてきたレガシーSTP(IEEE 802.1d)の罪深さを振り返る必要があります。

レガシーSTPが遅い最大の理由は、「タイマー依存の受動的なメカニズム」にありました。リンクに障害が発生した際、下位スイッチは上位からのBBP(Bridge Protocol Data Unit)の途絶を待ち(Max Age:デフォルト20秒)、その後、トポロジー変更を伝搬させながら、Listening(15秒)とLearning(15秒)という無慈悲な待機ステートを強制されました。合計で最大50秒。この間、ネットワークは沈黙します。

これに対し、RSTP(IEEE 802.1w)は以下のパラダイムシフトを起こしました。

1. 「待つ」から「合意(Agreement)を取る」へ: タイマーによる受動的な待ち時間を廃止し、スイッチ間の双方向ハンドシェイクによる能動的な同期を採用。
2. ポートロール(役割)の細分化: 従来の Blocking という曖昧なステートを解体し、明確な役割を定義。
3. トポロジー変更(TCN)の爆速化: ルートブリッジを起点としたフラッディングではなく、RSTPではエッジ(末端)での変更を即座に全域へ伝搬。

それでは、RSTPの肝となる「ポートロール」と「ポートステート」の進化を実務目線で整理しましょう。

—

2. RSTPの「ポートロール」と「ポートステート」の完全理解

RSTPでは、ポートの「役割(Role)」と「状態(State)」が完全に分離・整理されました。ここを混同すると、Ciscoの show spanning-tree の出力結果を見たときに頭が真っ白になります。

ポートロール(Role:論理的な役割)

  • Root Port (RP): ルートブリッジに最も近い、パスコストが最小のポート。
  • Designated Port (DP): セグメントにおいてBBPを送信(または担当)する責任を持つポート。
  • Alternate Port (AP): ルートポートの「バックアップ」。上位スイッチへの別経路であり、ルートポートが死んだら即座に昇格する(旧Non-DesignatedのBlocked状態に近い)。
  • Backup Port (BP): 同一スイッチ内の別ポートがセグメントのDesignatedになっている場合のバックアップ(主にハブ接続などの共有媒体向け。現代ではほぼ見かけません)。

ポートステート(State:パケット転送の可否)

RSTPでは、ポートの状態が以下の3つにシンプル化されました。

| ステート名 | BPDUの送信 | BPDUの受信 | MACアドレステーブルの学習 | データフレームの転送 |
| :— | :—: | :—: | :—: | :—: |
| Discarding | 可 | 可 | 不可 | 不可 |
| Learning | 可 | 可 | 可 | 不可 |
| Forwarding | 可 | 可 | 可 | 可 |

レガシーSTPにあった Listening や Blocking という言葉は消え、実質的に「データを通さない(Discarding)」か「通す(Forwarding)」か、その前の足場固めとしての「学習(Learning)」だけに削ぎ落とされています。

—

3. 瞬速の裏側:P2Pリンク間ハンドシェイク(Proposal / Agreement)の全貌

RSTPの高速収束の核心は、P2P(Point-to-Point)リンク間で行われる「Proposal(提案)とAgreement(合意)」のハンドシェイクにあります。

これがネットワーク上でどのように行われるのか、パケットのシーケンスを見てみましょう。

[Switch A (Root/DP)]                [Switch B (Non-Root/AP)]
       |                                       |
       |--- 1. Proposal (BPDUs) -------------->|  (Switch Bはルートポートを選定中)
       |                                       |  (Switch Bは既存のDPを一時的にDiscardingへ落とし、
       |                                       |   ループの危険性を排除する = 同期(Sync))
       |<-- 2. Agreement ----------------------|  (準備完了の合意を返す)
       |                                       |
       v                                       v
 (即座に Forwarding へ移行)              (即座に Forwarding へ移行)

実際のハンドシェイクのステップ

1. プロポーザルの発射: 新しくリンクアップした、あるいはトポロジーが変化したDesignatedポート(Switch A)は、Proposal フラグが立ったBPDUを対向(Switch B)に送ります。
2. 同期(Sync)の発生: Proposal を受け取ったSwitch Bは、「お、ルートが変わったな」と判断します。この時、ループを防ぐために、Switch Bの他のすべての非エッジポートを一時的に Discarding ステートに落とします(これがSyncのプロセスです)。
3. アグリーメントの返却: 同期が完了し、ループの懸念が完全に払拭されたことを確認したSwitch Bは、Agreement フラグを立てたBPDUをSwitch Aに送り返します。
4. ミリ秒単位のトランジション: Switch Aはこの Agreement を受け取った瞬間、自身のポートを Forwarding に遷移させます。Switch Bも同様に Root Port を Forwarding に引き上げます。

この一連のやり取りはタイマーを一切待ちません。BPDUの往復(通常数ミリ秒〜十数ミリ秒)だけで完了するため、体感ほぼノーディレイでリンクが確立します。

—

4. 実務で必須!Cisco Catalyst / Nexus におけるRSTP設定と現場のTIPS

それでは、実際のネットワーク機器での設定例を見ていきましょう。
Cisco IOS/IOS-XE環境を想定した、実務でそのまま使える構成です。

[Core Switch] ----(Trunk / P2P)---- [Access Switch]

コアスイッチ(Root Bridge候補)の設定例

! グローバルコンフィギュレーションモード
configure terminal

! スパニングツリーのモードをRSTP(IEEE 802.1wベースのRapid PVST+)に設定
spanning-tree mode rapid-pvst

! このスイッチを強烈にルートブリッジへ誘導する(プライオリティを 0 に)
spanning-tree vlan 1-4096 root primary

! エンドデバイス(PCやサーバー)が接続されるポートはPortFastを有効化
! ※RSTPではEdge Portとして機能し、ハンドシェイクをバイパスして即座にForwardingになる
interface range GigabitEthernet 0/1 - 24
  spanning-tree portfast
  spanning-tree portfast bpduguard default
end

アクセスイッチ側の設定例と実務Tips

configure terminal

spanning-tree mode rapid-pvst

! アップリンクポート(コアスイッチ側)の物理リンクが確実にP2Pとして動作しているか確認
! 通常、全二重(Full-Duplex)のギガビット以上であれば自動判定される
interface GigabitEthernet 0/24
  description === Uplink to Core Switch ===
  switchport mode trunk
  ! 万が一、対向がレガシーSTPやハブの場合に挙動が落ちるのを防ぐため、明示的にP2Pを指定することも可能
  spanning-tree link-type point-to-point
end

💡 現場のシニアからの実践Tips:トラブルシューティングの勘所

1. 「デュプレックスミスマッチ」はRSTPの天敵
もし片側のポートが何らかの理由で Half-Duplex に落ちたり、メディアコンバーターの不調でリンクタイプが Shared(共有媒体)と誤認識されると、RSTPの強力な Proposal/Agreement 機構が働きません。結果として、レガシーSTP並みの遅延(30秒待ち)に格下げされます。「あれ?RSTPなのに収束が遅いぞ?」と思ったら、まず show spanning-tree interface <interface> で物理リンクのステータス(P2Pか Sharedか、Full-Duplexか)を確認してください。

2. BPDU Guardの常時有効化
エンドユーザーのPCやアクセスポイントが接続されるポート(PortFast / Edge Port)には、必ず bpduguard を有効にしましょう。万が一、ユーザーが勝手に小型スイッチを持ち込んでループを作った場合、そのポートからBPDUを受信した瞬間にポートを err-disabled に落とし、ネットワーク全体の崩壊を防げます。

—

5. まとめ

RSTP(IEEE 802.1w)は、単に「STPのスピードが速くなった上位互換」ではありません。「タイマー依存のパッシブなプロトコルから、メッセージ交換によるアクティブな合意形成プロトコルへの脱皮」です。

インフラエンジニアとして、L2の足元がどのように固まっているかを理解しているか否かは、大規模障害時の切り分けスピードに直結します。「なぜこのポートはDiscardingなんだ?」「なぜProposalが返ってこない?」――パケットの挙動を脳内でトレースできるシニアエンジニアを目指し、今日の検証環境でぜひ show spanning-tree の出力を深く読み込んでみてください。

それでは、次のパケットの旅でお会いしましょう!

コメント

タイトルとURLをコピーしました