【実務・中級編】 PVST+(Per-VLAN Spanning Tree Plus)とRapid-PVST+の独自拡張仕様 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

なぜ今さら「PVST+」なのか?――L2ネットワークの深淵とロードバランスの現実

ネットワークエンジニアとして現場を渡り歩いていると、いまだに「STP(Spanning Tree Protocol)なんて枯れた技術でしょ?」という声を耳にします。しかし、クラウドネイティブなAPI設計やコンテナオーケストレーションにどっぷり浸かっているエンジニアほど、物理層やL2の挙動がブラックボックス化していることに気づくべきです。

今回は、Cisco界隈では避けて通れない、しかし意外と設計思想が理解されていない「PVST+(Per-VLAN Spanning Tree Plus)」と、その高速化版である「Rapid-PVST+」について、実務の視点から紐解いていきましょう。

—

1. PVST+が解決した「L2の孤独」

標準的なIEEE 802.1DのSTPは、ネットワーク全体で「ただ一つのツリー」を構築します。つまり、VLANが100あろうが、物理的な冗長経路があろうが、一つのループを止めるために全ての経路を「ブロック」してしまう。これでは、高価な帯域が泣き寝入りすることになります。

そこでCiscoが持ち出したのが PVST+ です。これは「VLANごとにSTPインスタンスを独立させる」という、なんとも贅沢で理にかなった仕組みです。VLAN 10はスイッチAをルートにし、VLAN 20はスイッチBをルートにする――このように、VLAN単位でトポロジーを制御することで、物理回線を無駄なく使い切る「ロードバランス」を可能にしました。

Rapid-PVST+ という選択肢

従来のPVST+は収束(コンバージェンス)に数十秒かかることもあり、現代のトラフィック要件には耐えられません。そこで登場するのが Rapid-PVST+ です。これはIEEE 802.1w(RSTP)をVLANごとに焼き直したものです。「提案(Proposal)/合意(Agreement)」のハンドシェイクにより、数秒以内の切り替えを実現します。

—

2. 現場で叩き込まれる「設定の勘所」

実務でCatalystスイッチを触る際、設定はシンプルですが「やり直し」が効かない箇所でもあります。

! VLAN 10と20でルートスイッチを分け、トラフィックを分散させる例
spanning-tree vlan 10 root primary    ! VLAN 10のルートを自分に固定
spanning-tree vlan 20 root secondary  ! VLAN 20のバックアップルートに設定

! Rapid-PVST+への切り替え(収束速度が劇的に改善)
spanning-tree mode rapid-pvst

注意点:
spanning-tree vlan 10 root primary を安易に打つと、現在のルートスイッチのプライオリティを自動的に強制変更します。ネットワークの構築中なら良いですが、稼働中のコアスイッチでこれを叩くと、全VLANのトポロジーが再計算され、ネットワークが瞬断します。必ずメンテナンスウィンドウで実施してください。

—

3. APIエンジニアが知るべき「パケットの裏側」

Web APIを叩くPythonスクリプトや、curlでのヘルスチェックが「なぜか特定のタイミングでタイムアウトする」という現象。これがもし物理L2ループに近い場所で起きているなら、STPのトポロジー変更(TCN: Topology Change Notification)が原因かもしれません。

Pythonでスイッチのステータスを監視する際、Netmiko等を使ってSTPの状態を確認するロジックを組むこともあります。

from netmiko import ConnectHandler

# スイッチへの接続設定
switch = {
    'device_type': 'cisco_ios',
    'host': '192.168.1.10',
    'username': 'admin',
    'password': 'password123',
}

def check_stp_vlan(vlan_id):
    with ConnectHandler(**switch) as net_connect:
        # 特定VLANのSTP詳細を取得
        command = f"show spanning-tree vlan {vlan_id}"
        output = net_connect.send_command(command)
        print(f"--- VLAN {vlan_id} STP Status ---")
        print(output)

# 実行例
check_stp_vlan(10)

もし show spanning-tree vlan <ID> の出力結果に「Number of topology changes」が頻繁にカウントアップされているなら、どこかのポートがフラッピング(Up/Downを繰り返している)している証拠です。これが原因で、APIリクエストのパケットがドロップしている可能性が高い。

—

4. プロからのアドバイス:運用上の「罠」

1. BPDUガードの徹底: エッジポート(PCやサーバーが繋がるポート)には、必ず spanning-tree bpduguard enable を設定してください。ユーザーが持ち込んだスイッチでL2ループを作られると、ネットワーク全体が落ちます。
2. 根拠なき「STPオフ」は死を招く: 「ループするならSTPを止めればいい」という短絡的な思考は禁物です。L2環境においてSTPは最後の砦です。
3. RFCの制約: PVST+はCisco独自の実装が色濃いため、マルチベンダー環境では MSTP (802.1s) への移行を検討すべきです。VLANグループを束ねて効率的に管理できるMSTPこそ、現代のマルチベンダーインフラの最適解と言えます。

まとめ

PVST+やRapid-PVST+は、まさに「枯れた技術」ですが、その奥にはトラフィックを効率的に捌こうとした先人たちの執念が詰まっています。APIのレスポンスが悪いとき、サーバーの負荷だけでなく、「パケットがどのポートを通り、どのスイッチでSTPの再計算が走っているのか?」を想像できるエンジニアこそが、真のフルスタックエンジニアだと私は信じています。

ネットワークのトラブルシューティングは、パケットの声を聞くことから始まります。もしSTPで詰まったら、まずは show spanning-tree detail を眺めてみてください。そこにはきっと、あなたの知らないネットワークの真実が書き込まれています。

コメント

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