この記事は、 「ネットワーク中級編|構築・検証・障害切り分けを身につける」 の第37回です。
前回の「VLAN障害の切り分け」では、 VLANの存在、アクセスポート、トランクポート、Allowed VLANなどを確認しました。 今回は、冗長なレイヤー2ネットワークで通信経路を制御する STPの障害切り分けを学びます。
STP障害の切り分け|ルートブリッジ・ポート状態・L2ループを確認する
STP障害では、「ポートがBlockingだから異常」と判断してはいけません。 冗長構成では、一部の経路を意図的に使用しないことでL2ループを防いでいます。 Root Bridge、Port Role、Port State、Path Cost、Topology Changeを順番に確認し、 現在のSTPトポロジーが設計どおりかを判断できるようになりましょう。
STPの障害では、完全な通信断だけでなく、 通信が断続的に遅くなる、MACアドレスの学習先が頻繁に変わる、 スイッチのCPU使用率が高くなる、といった症状が発生することがあります。
大切なのは、 「Blockingしているポートを探す」のではなく、 「なぜ現在のRole・Stateになっているのか」を確認すること です。
この記事を読み終えるとできること
- STP障害の基本的な確認順序を説明できる
- Root Bridgeが設計どおりか判断できる
- Root・Designated・Alternate Portを読み取れる
- Path Costと経路選択の関係を確認できる
- Topology Changeの発生方向を追跡できる
- L2ループを疑う代表的な兆候を確認できる
STP障害とは何か
STP障害の切り分けとは、 Root Bridgeを基準に現在のL2トポロジーを確認し、 設計した通信経路との差分を見つけることです。
スイッチを冗長化すると、物理的には複数の通信経路が存在します。 しかし、すべてのリンクを同時にForwardingすると、 Ethernetフレームがループする可能性があります。
STPはRoot Bridgeを基準に論理的なツリー構造を作り、 必要なポートをForwarding、 冗長経路をBlockingまたはDiscarding状態にすることでL2ループを防ぎます。
Blocking/Discarding=障害ではありません。
正常な冗長構成でも、 STPによって一部のポートが通信へ使用されない状態になります。
正常なSTP構成を確認する
障害を判断するには、 まず正常時のRoot BridgeとポートRoleを理解しておく必要があります。
3台のスイッチを接続したSTP構成
Root Bridge
STPトポロジーの基準となるスイッチです。 Root Bridgeでは、各接続セグメント側のポートが Designated PortとしてForwardingになります。
Root Port
Root Bridgeではないスイッチが、 Root Bridgeへ到達するために使用する最適なポートです。
Designated Port
各セグメントでRoot Bridge方向へフレームを転送する代表ポートです。
Alternate Port
Root Portの代替となる冗長経路です。 通常時はRSTPではDiscarding状態になり、 現用経路に障害が発生した場合の代替経路として待機します。
障害切り分けの基準はRoot Bridgeです。
Root Bridgeが分からない状態で、 「どのポートが正しいか」を判断することはできません。
STP障害で発生する代表的な症状
経路が使えない
本来Forwardingになるべき経路が利用できず、 同一VLAN内の通信ができない場合があります。
通信が断続する
リンク状態が繰り返し変化し、 STPトポロジーが頻繁に再計算される場合があります。
ネットワークが遅い
L2ループなどによってブロードキャストが大量に流れ、 帯域や機器負荷が増加する場合があります。
ポートが使用できない
BPDU GuardやRoot Guardなどの保護機能によって、 ポートが停止またはBlockingされる場合があります。
同一VLAN内の通信障害だからといって、 必ずSTPが原因とは限りません。
物理リンク、VLAN、Trunkに問題がないことを確認したうえで、 STPトポロジーを確認します。
STP障害の確認順序
- 影響しているVLANと通信範囲を確認する 特定VLANだけなのか、複数VLANへ影響しているのかを確認します。
- Root Bridgeを確認する 設計上のRoot Bridgeと実際のRoot IDが一致するか確認します。
- Port RoleとStateを確認する Root、Designated、Alternateと、 Forwarding/Discardingの状態を確認します。
- Path Costを確認する 想定外の経路が選ばれている場合、 Root Path Costやポート単位のCostを確認します。
- Topology Changeを確認する 短時間にSTPトポロジーの変更が繰り返されていないか確認します。
- STP保護機能やL2ループを確認する err-disabled、inconsistent、MACアドレス移動、 ブロードキャスト増加などを確認します。
代表的な確認コマンド
Cisco IOS/IOS XE系の機器を例に、 STP障害時によく確認するコマンドを整理します。
STP全体の確認
VLANごとのRoot Bridge、Root Cost、 Port Role、Port Stateなどを確認します。
特定VLANの確認
障害対象VLANに絞ってSTP情報を確認できます。
Root Bridgeの一覧確認
VLANごとのRoot ID、Root Cost、Root Portを確認するときに便利です。
Topology Changeの詳細
Topology Changeの回数や、 どのインターフェース方向から変更を受信したかを確認します。
保護機能によるBlocking
Root GuardやLoop Guardなどによって inconsistent状態となっているポートを確認します。
ログの確認
リンクUp/Down、BPDU Guard、 MACアドレス移動などのログを確認します。
MACアドレステーブルの確認
L2ループを疑う場合は、 同じMACアドレスの学習先が頻繁に変化していないか確認します。
show spanning-treeの出力を読む
SW2# show spanning-tree vlan 10
VLAN0010
Spanning tree enabled protocol rstp
Root ID Priority 4106
Address 0011.2233.4400
Cost 4
Port 1 (GigabitEthernet0/1)
Bridge ID Priority 32778
Address 0011.2233.5500
Interface Role Sts Cost Prio.Nbr Type
---
Gi0/1 Root FWD 4 128.1 P2p
Gi0/2 Desg FWD 4 128.2 P2p
Gi0/3 Altn BLK 4 128.3 P2p
- Root ID
- 現在のRoot Bridgeを示します。 最初に設計値と一致しているか確認します。
- Cost
- 自スイッチからRoot BridgeまでのRoot Path Costです。
- Port
- Root Bridgeへ向かうRoot Portです。
- Bridge ID
- 現在確認しているスイッチ自身のBridge IDです。
- Role
- Root、Designated、AlternateなどのPort Roleです。
- Sts
- FWDはForwarding、BLKはフレーム転送を行わない状態を示します。
Root Bridgeが想定と違う場合
STP障害で最初に確認したいのが、 Root Bridgeが設計どおりかです。
Root Bridgeが変わると、 Root PortやAlternate Portも再計算されるため、 ネットワーク全体の通信経路が変化する可能性があります。
設計例
VLAN 10
SW1 Priority:4096
SW2 Priority:8192
SW3 Priority:16384
想定Root Bridge:SW1
この状態で確認結果が次のようになっていたとします。
SW2# show spanning-tree vlan 10
Root ID Priority 16394
Address 00aa.bbcc.3300
Root IDがSW3を示している場合、 設計したSW1がRoot Bridgeになっていません。
Root Bridgeが違う場合は、 いきなりPriorityを変更するのではなく、 SW1のVLAN状態、STP設定、リンク状態、 Trunkで対象VLANが通っているかを確認します。
Port Role・Stateが想定と違う場合
| Role | 主な役割 | 通常のState |
|---|---|---|
| Root | Root Bridgeまでの最適経路 | Forwarding |
| Designated | セグメント上の代表ポート | Forwarding |
| Alternate | Root Portの代替経路 | Discarding |
| Backup | Designated Portのバックアップ | Discarding |
Alternate Portを見つけても、すぐに障害とは判断しません。
冗長リンクであれば、 Alternate/Discardingになっていることが正常です。
Path Costが想定と違う場合
Root Bridgeが正しいのに、 想定と違う経路がRoot Portとして選択されている場合は、 Path Costを確認します。
Root Bridgeまでの2つの経路
直接接続
SW2 → SW1
Root Path Cost:小さい
SW3経由
SW2 → SW3 → SW1
Root Path Cost:大きい
通常はRoot Path Costが小さい経路が優先されます。 しかし、ポートCostが手動変更されている場合、 想定外の経路が選択される可能性があります。
Port 1 (GigabitEthernet0/1) of VLAN0010 is root forwarding
Port path cost 4
Port priority 128
Port Identifier 128.1
想定経路と実際のRoot Portが違う場合は、 接続速度だけでなく手動設定されたCostも確認します。
Topology Changeが多発する場合
リンク状態が変化すると、 STPはネットワークトポロジーの変化を検知します。
重要なのはTopology Changeが存在することではなく、 短時間に何度も繰り返されていないかです。
SW1# show spanning-tree vlan 10 detail
Number of topology changes 1842
last change occurred 00:00:03 ago
from GigabitEthernet0/24
この例では、 最後のTopology ChangeがGi0/24方向から通知されています。
- Gi0/24の接続先を確認する 構成図、CDP、LLDPなどで対向スイッチを確認します。
- 対向スイッチでもSTP detailを確認する 次にどのポート方向からTopology Changeが来たかを確認します。
- 発生方向を1台ずつ追跡する Topology Changeの発生源までスイッチをたどります。
- 物理リンクのログを確認する Interface Up/Downが繰り返されていないか確認します。
「Topology Changeが多い」で調査を終わらせないことが重要です。
どのポート方向から発生しているのかを追跡すると、 原因となるリンクやスイッチを絞り込めます。
STP保護機能による停止を確認する
端末ポートを保護
BPDUを受信すべきではない端末向けポートでBPDUを受信した場合に、 ポートを停止させる構成があります。
Root変更を防止
想定外のスイッチから優れたBPDUを受信した場合に、 そのポートをBlockingしてRoot Bridgeの変更を防ぎます。
BPDU消失を保護
本来受信するはずのBPDUが突然届かなくなった場合に、 不用意なForwarding移行を防止します。
inconsistent状態を確認する
Name Interface Inconsistency
---
VLAN0010 Gi0/24 Root Inconsistent
この場合、 単なるSTPのAlternate Portではなく、 Root Guardなどの保護機能によってBlockingされている可能性があります。
BPDU Guardの場合
SW2# show interfaces status
Port Name Status
Gi0/10 USER-PC err-disabled
err-disabledになったポートを、 原因確認なしで復旧しないようにします。
端末向けポートへ別のスイッチが接続されていないかなど、 BPDUを受信した理由を確認します。
L2ループを疑う場合
STPが正常にループを防止できない状態になると、 Ethernetフレームがネットワーク内を循環し続ける場合があります。
Broadcast増加
ARPなどのブロードキャストが大量に流れます。
MAC移動
同じMACアドレスの学習ポートが頻繁に変化します。
CPU高負荷
スイッチの処理負荷が大きくなる場合があります。
広範囲障害
同じL2ネットワークの多数の端末へ影響が広がります。
MACアドレスの学習ポートを確認する
Vlan Mac Address Type Ports
---
10 0011.2233.4455 DYNAMIC Gi0/1
同じコマンドを繰り返したとき、 同一MACアドレスがGi0/1とGi0/2などの間を頻繁に移動する場合は、 L2ループや想定外のL2接続を疑います。
L2ループを疑う場合は、 STP情報だけではなく、 MACアドレステーブル、インターフェースカウンター、ログ を組み合わせて確認します。
STP障害でよくある切り分けミス
STPではループ防止のため、 正常時にもBlocking/Discardingポートが存在します。
Port RoleはRoot Bridgeを基準に決まります。 まずRoot IDを確認します。
冗長リンクが存在する状態でSTPを停止すると、 L2ループを発生させる危険があります。
現象が消える前に、 STP状態、ログ、インターフェース状態を採取します。
想定Root、Root Port、Blocking位置と、 実際のSTP状態との差分を確認します。
理解度チェック
問題1.STPでポートがBlocking/Discardingになっています。 必ず障害ですか。
解答を見る
冗長構成ではL2ループを防ぐため、 Alternate Portが意図的にDiscardingになる場合があります。
問題2.STPの経路を判断するとき、 最初に確認すべきスイッチは何ですか。
解答を見る
各ポートのRoleはRoot Bridgeを基準に決まります。
問題3.Root Bridgeまでの最適な経路となるポートを何と呼びますか。
解答を見る
問題4.Topology Changeが大量に発生している場合、 どのように発生元を探しますか。
解答を見る
STP detailの表示から、 最後にTopology Changeを受信したポートを確認し、 対向スイッチへ移動しながら発生方向を追跡します。
問題5.同じMACアドレスの学習ポートが短時間に何度も変化しています。 何を疑いますか。
解答を見る
STP状態、MACアドレステーブル、 ログなどを追加確認します。
実践演習:STP障害を切り分けよう
VLAN 10で通信経路が設計と異なっています。 次の情報から原因候補を考えてください。
設計値
VLAN 10
SW1 Priority:4096
SW2 Priority:8192
SW3 Priority:16384
想定Root Bridge:SW1
SW2
SW2# show spanning-tree vlan 10
VLAN0010
Root ID Priority 16394
Address 00aa.bbcc.3300
Cost 4
Port 2 (GigabitEthernet0/2)
Bridge ID Priority 8202
Address 00aa.bbcc.2200
Interface Role Sts Cost
---
Gi0/1 Altn BLK 4
Gi0/2 Root FWD 4
SW3
SW3# show spanning-tree vlan 10
VLAN0010
Root ID Priority 16394
Address 00aa.bbcc.3300
Bridge ID Priority 16394
Address 00aa.bbcc.3300
Interface Role Sts Cost
---
Gi0/1 Desg FWD 4
Gi0/2 Desg FWD 4
課題1.現在のRoot Bridgeはどのスイッチですか
判断した根拠:
解答を見る
Root BridgeはSW3です。
SW3ではRoot IDとBridge IDが一致しています。 また、SW2のRoot PortはSW3方向のGi0/2です。
課題2.設計と実測の差分は何ですか
実測:
解答を見る
設計ではSW1がRoot Bridgeですが、 実際にはSW3がRoot Bridgeになっています。
課題3.次に確認する項目を挙げてください
2.
3.
解答例を見る
- SW1のVLAN 10に対するSTP状態
- SW1のBridge Priority
- SW1-SW2/SW3間の物理リンク状態
- TrunkでVLAN 10が許可されているか
- 直前の設定変更履歴
課題4.障害調査結果を文章にする
設計上は________________________。
このため、次に____________________を確認する。
回答例を見る
VLAN 10のSTP状態を確認した結果、 現在はSW3がRoot Bridgeとして選出されていました。
設計上はSW1がRoot Bridgeとなる予定です。 このため、SW1のSTP Priority、VLAN 10の状態、 SW1-SW2/SW3間の接続状態を確認します。
自分の言葉で説明する課題
「スイッチのポートがBlockingになっているので障害ではないですか?」 と質問されました。 30秒程度で説明してください。
説明例を見る
STPを利用した冗長ネットワークでは、 複数の経路を同時に使用するとL2ループが発生するため、 一部のポートを意図的に通信へ使用しない状態にします。
そのためBlockingだけでは障害とは判断できません。 Root Bridgeや各ポートのRoleを確認し、 設計した場所がBlockingされているかを確認する必要があります。
まとめ
- STPのBlocking/Discardingは正常な冗長構成でも発生する
- STP障害では最初にRoot Bridgeが設計どおりか確認する
- Root Bridgeを基準にRoot・Designated・Alternate Portを確認する
- 想定外の経路が選ばれている場合はPath Costを確認する
- Topology Changeが多発する場合は発生元方向を追跡する
- BPDU Guard、Root Guard、Loop Guardなどの保護状態も確認する
- MACアドレスの頻繁な移動やBroadcast増加はL2ループの手掛かりになる
- 障害対応では設計値と実測値の差分を根拠として整理する
STP障害の切り分けでは、 Root Bridgeを基準に現在のL2トポロジーを再構成することが重要です。

コメント