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

スイッチングハブをループ状に接続すると、ネットワークの冗長性を確保できます。しかし、そのままではブロードキャストフレームが無限に回り続け(メルトダウン)、MACアドレス学習の不安定化を招いてしまいます。

これを防ぐために利用されるのがスパニングツリープロトコル(STP)です。STPは、ループが存在するネットワークの中から論理的に木構造(スパニングツリー)を形成し、一部のリンクをブロック状態にしてループを回避します。これにより、冗長経路を持ちながらも無限ループを防ぐことが可能になります。

また、リンク障害が発生した場合には、ブロックされていた経路を自動的に有効化し、通信を継続できるのもSTPの大きな特徴です。つまり、冗長性と安定性を両立するための仕組みがスパニングツリーといえます。

ルートブリッジの決定

スパニングツリーでは、ネットワーク全体の中心となるルートブリッジを1台選出します。ルートブリッジは、各スイッチングハブが送信するBPDU(Bridge Protocol Data Unit)を比較することで決まります。ルートブリッジが決まると、すべてのスイッチはそのルートブリッジを基準にして最短経路を計算し、どのポートを転送可能にし、どのポートをブロックするかを決定します。

ルートブリッジは、スパニングツリーの根幹を担う重要な役割を持ち、論理的なツリー構造の起点となります。

ブリッジID

ルートブリッジの決定には、各スイッチが持つブリッジIDが比較されます。ブリッジIDは以下の2つの値から構成されます。

ブリッジプラオリティMACアドレス
  • ブリッジプライオリティ(優先度)数値が小さいほど優先される(デフォルトは32768)
  • MACアドレス … 優先度が同じ場合、MACアドレスが小さいスイッチが選ばれる

つまり、ブリッジIDが最も小さいスイッチがルートブリッジに選出されます。

各スイッチのブリッジIDを比較して、最小の値を持つ「スイッチA」がルートブリッジに決定されました。

デフォルト運用の注意点

デフォルト設定のままスパニングツリープロトコルを運用すると、必ずしも性能の高いスイッチングハブがルートブリッジに選ばれるとは限らない という問題があります。

ブリッジIDは「プライオリティ値」と「MACアドレス」で決まるため、プライオリティ値が同じだと、MACアドレスのみでルートブリッジが決定されます。この結果、処理能力の低いスイッチングハブがルートブリッジになってしまう可能性があります。

これを防ぐためには、管理者が意図的にプライオリティ値を設定し、ネットワークの中心に置きたい機器をルートブリッジとして指定するのが推奨されます。

ポートの役割を決定

ルートブリッジが選出されると、各スイッチングハブはそのルートブリッジまでの最短経路を計算し、ポートごとに役割を割り当てます。これにより、フレームがループせずに転送される経路が確立されます。スパニングツリーで定義される主なポートの役割は、ルートポート・指定ポート・非指定ポート の3種類です。

パスコスト

スパニングツリーでは、ルートブリッジから各スイッチまでの最短経路を決める必要があります。その際に基準となるのがパスコスト(Path Cost)です。

パスコストは、リンクの回線速度をもとに決められた値で、回線速度が速いほどコストは小さくなります

旧規格のパスコスト(参考:IEEE 802.1D-1998)

リンク速度パスコスト
10 Mbps100
100 Mbps19
1 Gbps4
10 Gbps2

IEEE標準パスコスト(32ビット拡張)

リンク速度パスコスト
10 Mbps2,000,000
100 Mbps200,000
1 Gbps20,000
10 Gbps2,000
100 Gbps200
1 Tbps20

現在のIEEE標準では拡張コスト(32ビット値)が定義されていますが、本記事では学習の分かりやすさを優先し、旧規格(IEEE 802.1D-1998)の数値を用いて説明します。

ルートポートの設定

ルートポートは、各スイッチングハブからルートブリッジに至る最短経路上(最小パスコスト)にあるポートです。すべてのスイッチングハブ(ルートブリッジを除く)は、必ず1つのルートポートを持ちます。

指定ポートの設定

指定ポートは、各リンクごとに必ず1つ選ばれるポートです。その決定方法は、そのリンクに接続しているスイッチのうち、ルートブリッジまでのパスコストが最も小さいスイッチに属するポートが指定ポートになります。つまり、「ルートブリッジに一番近いスイッチ側のポート」が指定ポートとして選ばれる仕組みです。もしパスコストが同じ場合は、ブリッジIDやポート番号を比較して最終的に指定ポートが決定されます。

非指定ポートの設定

非指定ポートは、ルートポートにも指定ポートにも選ばれなかったポートです。非指定ポートはループを防ぐためにブロッキング状態となり、通常のフレーム転送には使われません。ただし、リンク障害などで経路が失われた場合には、このポートが再計算で有効化され、冗長経路として利用されます。

各種タイマとSTPの再計算

各種タイマ

スパニングツリーでは、ループを避けながら冗長経路を活用するために複数のタイマが使われます。代表的なものは以下の通りです。

  • ハロータイマ(Hello Timer)
    ルートブリッジが定期的にBPDUを送信する間隔。通常は2秒。
  • フォワードディレイタイマ(Forward Delay Timer)
    ポートの状態遷移(Listening → Learning → Forwarding)にかかる時間。各15秒で、合計30秒かかる
  • 最大エイジタイマ(Max Age Timer)
    BPDUを受信しなくなってから、その情報を無効とみなすまでの時間。通常20秒
  • エージングタイマ(Aging Timer)
    MACアドレステーブルのエントリを保持する時間。STPの再計算とは直接関係しないが、古い情報を消去して正しい転送を行う上で重要。

ポートの状態遷移

スパニングツリーでは、ポートの役割が決まった後にすぐ転送されるわけではなく、段階的に状態を遷移します。これにより、誤ってループが発生するのを防ぎます。代表的な状態は以下の通りです。

  • ブロッキング状態(Blocking)
    フレーム転送を行わず、BPDUの受信のみを行う。ループを防ぐための待機状態。
  • リスニング状態(Listening)
    Forward Delayタイマに従って一時的に置かれる状態。BPDUをやり取りし、ネットワーク全体のトポロジを学習している段階。MACアドレスはまだ学習しない。
  • ラーニング状態(Learning)
    Forward Delayタイマに従って次に移行する状態。MACアドレスを学習するが、フレーム転送はまだ行わない。
  • フォワーディング状態(Forwarding)
    フレーム転送とMACアドレス学習を行う通常の動作状態。
  • ディセーブルド状態(Disabled)
    管理者によってポートが無効化されている状態。STPの制御対象外。

スパニングツリーの再計算

リンク障害やスイッチの追加・削除などでネットワーク構成が変化すると、スパニングツリーは再計算を行います。再計算では以下のような処理が行われます。

  1. BPDUの受信停止を検知
    Max Ageタイマにより、一定時間BPDUが届かないとトポロジ変化と判断
  2. ルートブリッジまたは経路の再選出
    必要に応じてルートブリッジや各ポートの役割を再計算
  3. ポートの状態遷移
    Forward Delayタイマに従って、Listening → Learning → Forwarding へ遷移

このため、従来のSTPでは障害発生から経路が安定するまでに約50秒かかるのが一般的です。実務上はこの遅延を短縮するために、RSTP(Rapid Spanning Tree Protocol)が利用されることが一般的ですが、ネットワークスペシャリスト試験ではSTPがよく出題されています。