スパニングツリープロトコル

読み:すぱにんぐつりーぷろとこる / 英語表記:Spanning Tree Protocol

スイッチ間でBPDUという制御フレームを交換し、一部のポートでデータの転送を止めてレイヤ2のループを防ぐプロトコルである。物理的な予備経路を残しつつ、転送に使う経路をループのない木構造にする。

イマシルちゃんの解説

スイッチ3台を三角形につなぐと、1本のケーブルが切れても予備経路を残せるよ。
でも輪のような経路であるループがあるまま転送すると、全員宛てのブロードキャストフレームなどが回り続け、通信を妨げることがあるんだ。

スパニングツリープロトコル(STP)は、こうしたレイヤ2のループを防ぐプロトコルだよ。
スイッチどうしが構成を知らせるBPDUという制御フレームを交換するんだ。
その情報を基に、一部のポートをデータ転送を止めるブロッキング状態にして、転送経路からループをなくすよ。
ケーブル自体はつないだままだから、使用中の経路が故障したら構成を見直して、使える予備経路へ切り替えられるんだ。

より深い解説

どんな役割を持つか

STPは、OSI基本参照モデルのデータリンク層(第2層)で働く。L2スイッチが制御フレームを交換し、ループにならない転送経路を選ぶプロトコルである。

メリット:物理的な予備経路を残しながら、フレームがループすることを防げる。

弱点:転送を止めたリンクは平常時の通信に使えず、障害後の経路切り替えも遅い。

ループを放置すると、ブロードキャストフレームなどが循環・増加するブロードキャストストームや、MACアドレステーブルの学習先が頻繁に変わる問題が起こる。

構成図から転送経路を決める

以下は同じVLANに属するPC-BとPC-Cを、スイッチB・Cへつないだ例である。スイッチ間の3本のリンクはすべてパスコスト10とする。パスコストは経路を選ぶための重みであり、小さい経路ほど優先する。

平常時:CのB側ポートだけがデータ転送を停止する
A-B:転送に使用10A-C:転送に使用10B-C:C側で転送停止10×AルートBPC-B接続CPC-C接続

実線:転送に使用 破線:停止・断線 ×:転送できない側

各スイッチはBPDU(Bridge Protocol Data Unit)をやり取りする。BPDUには、根になる機器の識別値(ルートID)、そこまでの合計コスト(ルートパスコスト)、送信元のブリッジIDやポートIDなどが入る。

  1. 優先度とMACアドレスなどで構成されるブリッジIDを比べ、最小のAをルートブリッジに選ぶ。
  2. BとCは根への最小コストの経路を探し、Aへ向かうポートをそれぞれルートポートに選ぶ。直結なら10、相手を経由すると20になる。
  3. 各リンクで根までの経路を最も有利に通知できる指定ポートを選ぶ。B–Cでは両側のコストが同じなので、識別値が小さいB側を選ぶ。C側はどちらの役割にも選ばれず、予備経路として残る。

ブリッジIDの比較では、まずブリッジプライオリティが小さい機器を優先する。同じVLAN・インスタンスで優先度も同じなら、MACアドレスが小さい機器を選ぶ。ルートポートと指定ポートのどちらにも選ばれなかったポートを、従来のSTPでは非指定ポートと呼び、通常のデータ転送を止める。経路コストが等しい場合も、送信元のブリッジIDやポートIDなどを順に比較して一意に決める。

図のAは自分自身が根なので、根までのコストは0である。Aから別々のスイッチへつなぐ各リンクではA側が最も有利な情報を通知でき、どちらも指定ポートになる。根への入口を選ぶルートポートは、根以外のスイッチにある。

そのためPC-BからPC-Cへのフレームは、B → A → Cの順に届く。B–Cのケーブルは抜かれていない。C側の停止したポートでもBPDUを受け取れるため、経路の変化に備えられる。

5つの状態から障害時の動きを理解する

従来型STPのポートには5つの状態がある。ただし、5つをすべて順番に通るわけではない。ここでは図のCの2つのポートに注目すると、それぞれの違いが分かる。

平常時、CのB向けポートはブロッキングで待機する。B–Cのケーブルはつながっているが、通常のフレームは転送せずMACアドレスも学習しない。一方、BPDUは受信できるため、Bを通る予備経路の情報は持ち続けられる。

ここでA–Cのケーブルが切れたとする。CのA向けポートはリンクそのものが使えなくなり、ディスエーブルドになる。ブロッキングは「接続は生きているがループ防止のため転送しない状態」、ディスエーブルドは「リンクダウンや管理上の無効化などでSTPに参加しない状態」である。 この2つは、通常のデータを転送しない点は同じでも原因が異なる。

CはB経由なら根のAへ到達できるため、B向けポートを新しいルートポートに選ぶ。しかし、いきなり転送を始めると古い経路情報によってループが発生するおそれがある。そこで、このポートは次の順に転送へ向けて準備する。

まずリスニングに入り、BPDUを処理しながら構成が落ち着くのを待つ。この段階では通常のフレーム転送もMACアドレスの学習もしない。続くラーニングではMACアドレスの学習だけを始めるが、データフレームの転送はまだ止めておく。最後にフォワーディングへ進むと、MACアドレスの学習に加えて通常のデータフレームも転送できる。

つまりCのB向けポートは、待機中のブロッキングからリスニング → ラーニング → フォワーディングへと移る。リスニングとラーニングの決定的な違いは、通常のデータ転送はどちらも行わないが、後者ではMACアドレスを学習できることである。 一方、断線したA向けポートのディスエーブルドは、この転送再開の4段階には含まれない。

切り替え後の経路と所要時間

転送を再開すると、PC-BからPC-CへのフレームはB → Cへ直接届く。Cの根までのパスコストは10+10=20になる。

A–C断線後:予備だったB–Cを転送に使う
A-B:転送に使用10A-C:断線×B-C:転送に使用10AルートBPC-B接続CPC-C接続

実線:転送に使用 破線:停止・断線 ×:転送できない側

リスニングとラーニングの待機時間は標準でそれぞれ15秒なので、情報の失効待ちが不要なら切り替えまで約30秒かかる。古いBPDUの有効期限である最大エージ(標準20秒)を待つ場合には、合計で約50秒になる。すべての障害で必ず50秒待つわけではない。

経路が変わるとTCN BPDUで根へ変更を通知し、根からは構成BPDUのTCフラグなどで変更を伝える。古いMACアドレス学習情報が残り続けないようにするためである。

従来型STPでは、この通知に応じてMACアドレステーブルの動的エントリーのエージング時間を短くする。標準的な動作では転送遅延の値を使うため、古い経路で学習した情報を早く失効させ、新しい経路から学び直せる。「通知を受けた瞬間に、全装置の全エントリーを一律に消す」という動作とは区別する。RSTPは構成変更の検出・伝達や対象ポートの情報消去の仕組みも改良している。

後継プロトコルでは何が改善されたか

STPの理解で重要なのは、「どの機器が根になるか」「どのポートが転送を止めるか」「断線後にどの経路へ切り替わるか」を、構成図から説明できることである。

同じデータリンク層(第2層)のプロトコル

参考資料

実際の試験ではここに出る!全11問

ネットワークスペシャリスト

午前Ⅱ
午後Ⅱ

テクニカルエンジニア(ネットワーク)

午前

この用語が出てくる記事

↑