変更要約: 初版
3.3スパニングツリー(RSTP・MSTとガード機能)
数秒で収束するRSTPのポートロール(ルート/指定/代替/バックアップ)と状態、複数VLANを少数のインスタンスに束ねて拡張性を確保するMST、そしてトポロジを守るroot guard(優位BPDU受信でroot-inconsistent)とBPDU guard(PortFastポートでBPDU受信→err-disabled)を、実際の障害シナリオから理解します。
スパニングツリーは「ループを防ぐ」だけの機構ではなく、誰がルートブリッジになるかでトラフィックの流れ方そのものが決まる、実質的なパス選択の仕組みです。ENCORでは、収束の速いRSTPの動作、VLAN数が増えても破綻しないMSTの設計、そして運用者の意図しないスイッチが接続されたときにトポロジを守るガード機能が問われます。この節では「アクセスポートに私物のスイッチを繋がれた」「新設スイッチが誤ってルートを奪った」といった現実の事故を軸に、どの機能が何を検知して何をするのかを整理します。
3.3.1RSTPのロールと状態
- RSTP(802.1w)は旧STPの
listening/learning/forwarding/blockingをdiscarding/learning/forwardingの3状態に整理し、タイマ待ちではなくプロポーザル/アグリーメントというハンドシェイクで隣接と合意して即座に転送開始する。これにより収束は旧STPの30〜50秒から数秒に短縮される。 - ポートロールは4種類:ルートポート(ルートブリッジへ向かう最良の1本)、指定ポート(そのセグメントでルートに最も近い側=転送する)、代替ポート(Alternate)(ルートポートの代替経路を持ちブロッキング。ルートポート障害時に即座に昇格)、バックアップポート(Backup)(同一セグメントへの冗長リンク=ハブ経由など、指定ポートの予備)。
- 端末を繋ぐポートは
spanning-tree portfast(エッジポート) にして即座に転送状態にする。逆にエッジポートがBPDUを受信すると自動的に通常ポートに戻る——これは「端末しか繋がないはずの場所にスイッチが接続された」ことを示す重要な兆候である。ルート選出はブリッジID=優先度(既定32768・4096刻み)+MACアドレスが最小のスイッチが勝つ。
3.3.2MSTによる拡張性の確保
- CiscoのPVST+はVLANごとに独立したツリーを走らせるため、VLANが数百になるとBPDUの生成とCPU負荷が線形に増えて破綻する。MST(Multiple Spanning Tree・802.1s)は複数のVLANを1つのインスタンスに束ねることでツリーの数を必要最小限(例えば2〜4個)に抑え、負荷を劇的に下げつつVLAN単位ではなくインスタンス単位で経路を分けることができる。
- MSTの肝はリージョンの概念で、リージョン名・リビジョン番号・VLANとインスタンスのマッピングの3つが完全に一致するスイッチ群が1つのリージョンを形成する。1文字でも違えば別リージョンとみなされ、リージョン境界ではリージョン全体が1つの仮想ブリッジとして外部に見える。設定は
spanning-tree mst configuration配下でname/revision/instance 1 vlan 10-20と指定する。 - 典型的な設計は、インスタンス1に奇数VLAN・インスタンス2に偶数VLANを割り当て、それぞれ別のスイッチをルートにしてアップリンク2本を両方使い切る(ロードシェアリング)というもの。
show spanning-tree mst configurationでリージョン設定を、show spanning-tree mst 1でインスタンスごとのロール/状態を確認する。
3.3.3root guardとBPDU guard
- root guard(
spanning-tree guard root)はポート単位で有効にし、そのポートで優位BPDU(現在のルートより良いブリッジIDを持つBPDU)を受信すると、ポートをroot-inconsistent状態にして転送を止める。目的は「ここからルートブリッジが来てはいけない」という設計上の境界を強制することで、優位BPDUが止めば自動的に復旧する。 - BPDU guard(
spanning-tree bpduguard enableまたはグローバルのspanning-tree portfast bpduguard default)はPortFast(エッジ)ポートでBPDUを受信した時点で、BPDUの内容が優位かどうかに関係なくポートをerr-disabledにして落とす。端末しか繋がないはずの場所へのスイッチ接続を物理的に遮断するのが目的で、復旧は手動(shutdown/no shutdown)かerrdisable recovery cause bpduguardによる自動復旧設定が必要。 - 違いを一言で:root guardは優位BPDUだけに反応して
root-inconsistent(自動復旧・ポートは生きている)、BPDU guardはBPDUを1つでも受ければerr-disabled(手動復旧・ポートは落ちる)。関連してloop guardは「これまでBPDUを受信していたポートが受信しなくなった」場合にloop-inconsistentにして、単方向障害による誤フォワーディングを防ぐ。
「RSTPの代替ポートはルートポート障害時に即座に昇格」「MSTのリージョンは名前・リビジョン・VLANマッピングの3つが完全一致して初めて同一」「root guard=優位BPDUでroot-inconsistent・自動復旧」「BPDU guard=PortFastポートでBPDU受信→err-disabled・手動復旧」が頻出です。root-inconsistent と err-disabled のどちらの状態が出たかが、どの機能が発火したかの決定的な手がかりになります。
ある朝、あなたのもとに2件の障害報告が届きました。1件目は「営業部フロアの島の端末が突然すべてネットワークから切断された」、2件目は「データセンタのディストリビューションスイッチのアップリンクが1本、転送しなくなった」です。同じスパニングツリー起因でも、現れた状態が違えば原因も対処も違います。1件目でアクセススイッチのポートを見ると err-disabled になっており、ログには %SPANTREE-2-BLOCK_BPDUGUARD と記録されています。このポートは端末専用のPortFastポートで、そこにBPDUが届いたということはユーザが私物のスイッチ(あるいはハブ機能付き機器)を接続したことを意味します。BPDU guardは内容の優劣を問わずBPDUを1つでも受ければポートを落とす仕様なので、これは機能が意図どおり働いた結果であり、対処は「BPDU guardを外す」ではなく接続された機器を撤去し、shutdown/no shutdown(または errdisable recovery cause bpduguard による自動復旧)でポートを戻すことです。ここで安易にBPDU guardを無効化すると、次は本当にループが発生してフロア全体が落ちます。2件目でディストリビューションスイッチのポートを見ると、状態は err-disabled ではなく BKN* かつ show spanning-tree inconsistentports に Root Inconsistent と表示されていました。これはBPDU guardではなくroot guardの発火で、そのポートの先から現行ルートより優位なブリッジIDのBPDUが届いたことを示します。原因を追うと、検証用に持ち込まれたスイッチが優先度4096で設定されたまま接続され、ルートブリッジを奪おうとしていたことが判明しました。root guardが無ければ、キャンパスのルートが検証用スイッチに移り、全トラフィックが低速な経路に迂回して広範囲の性能劣化を招いていたはずです。対処は優位BPDUの発生源を取り除くことで、優位BPDUが止まればroot-inconsistentは自動的に解除され、手動復旧は不要です。この2件の対比が示すのは、err-disabledならBPDU guard(=BPDUを受けてはいけない場所で受けた)、root-inconsistentならroot guard(=ルートが来てはいけない方向から優位BPDUが来た)という、状態名から原因へ一直線に辿る診断の型です。
| 機能 | 発火条件 | 結果の状態 | 復旧 |
|---|---|---|---|
| root guard | 優位BPDU(現ルートより良いBID)を受信 | `root-inconsistent`(転送停止・ポートは生存) | 優位BPDUが止まれば自動 |
| BPDU guard | PortFastポートでBPDUを受信(優劣不問) | `err-disabled`(ポートダウン) | 手動または`errdisable recovery` |
| loop guard | 受信していたBPDUが途絶える(単方向障害) | `loop-inconsistent` | BPDU受信再開で自動 |
| PortFast(エッジ) | 端末接続ポートで即時転送 | BPDU受信で通常ポートへ復帰 | 該当なし |
ひっかけ: 「root guardとBPDU guardはどちらもBPDUを受けたポートをerr-disabledにする」は誤りです——root guardは優位BPDUのときだけroot-inconsistent(自動復旧)で、ポートは落ちません。また「MSTはVLAN番号が同じなら自動的に同じインスタンスになる」も誤り=リージョン名・リビジョン番号・VLANマッピングの3つが完全一致しなければ別リージョン扱いとなり、意図した経路分散になりません。
3.3.4この節のまとめ
- RSTPは3状態+プロポーザル/アグリーメントで数秒収束し、代替ポートはルートポート障害時に即座に昇格する
- MSTは複数VLANを少数インスタンスに束ねて負荷を抑える。リージョン名・リビジョン・VLANマッピングの完全一致が同一リージョンの条件
- root guardは優位BPDUで
root-inconsistent(自動復旧)、BPDU guardはPortFastポートのBPDU受信でerr-disabled(手動復旧)。状態名が原因を教える
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. アクセススイッチの端末接続ポート(PortFast設定済み)が突然 `err-disabled` になり、ログに `%SPANTREE-2-BLOCK_BPDUGUARD` が記録された。このポートには本来PCのみが接続されるはずである。最も適切な対処はどれか。
Q2. ディストリビューションスイッチのアップリンクポートが転送を停止し、`show spanning-tree inconsistentports` に `Root Inconsistent` と表示されている。ポートは `err-disabled` にはなっていない。この状況の原因として最も適切なものはどれか。
Q3. キャンパスに400のVLANがあり、PVST+ではスイッチのCPU負荷が高い。MSTへ移行し、奇数VLANと偶数VLANを別インスタンスに割り当てて2本のアップリンクを両方使い切りたい。移行時に必ず満たすべき条件はどれか。

