ネットワークの耐障害性を高める手段として冗長化があります。スイッチでは,スイッチまたはスイッチ間のリンクの障害に対する冗長化手法として,STP(Spanning Tree Protocol)が使用されます。STPを理解して,レイヤ2レベルの冗長化設計を覚えましょう。

スイッチの冗長化

 1つの経路しか持たないネットワークは,その1つの経路が障害によって使用ができなくなると,ネットワーク全体が使えなくなってしまったりします。このため,冗長性(リダンダンシ:Redundancy)を確保する必要があります。スイッチによって作られたネットワークの場合,冗長の経路を確保することになります(図1)。

図1●冗長の必要性
図1●冗長の必要性

 しかし,冗長経路を確保すると,LANにループが発生してしまいます(図2)。

図2●ループの発生

 ループが発生すると,このフレームのやりとりだけで帯域が消費され,その他の通信ができなくなってしまいます。このループはスイッチのMACアドレステーブルにエントリがない場合も同様に起こります(MACアドレステーブルにエントリがない場合,フラッディングされるためです)。これを「ブロードキャストストーム」と呼びます。

 そこで使用されるのがSTPです。STPでは通常(障害の発生していない時)は,冗長経路を使用しない状態にしておきます。そして,障害が発生して使用している経路が使えなくなった場合に,冗長経路に切り替えます(図3)。

図3●STPによる冗長化

ルートブリッジとポートの役割

 STPはIEEEによって標準化されており(IEEE802.1d),Catalystスイッチでもデフォルトで有効になっています。STPは冗長経路によるループを見つけ出し,ループになる冗長経路でのフレームのやりとりを停止させることにより,ループのないネットワークを形成します。

 STPではネットワーク内の1台のスイッチをルートブリッジとして,そのルートブリッジを頂点(根)としたループのない木構造(スパニングツリー)を作り,ループを排除します(図4)。

図4●ループのない木(スパニングツリー)
図4●ループのない木(スパニングツリー)

 スイッチはBPDU(Bridge Protocol Data Unit)というSTPで使われるフレームにSTP情報を入れて情報を交換します。これにより,ネットワーク内で1台のルートブリッジを選び出します。ルートブリッジはBID(Bridge ID)が最も小さいブリッジ(スイッチ)がなります(図5)。

図5●BID(Bridge Protocol Data Unit)
図5●BID(Bridge Protocol Data Unit)

 プライオリティは手動で設定する2バイトの値で,0~65535の値をとります。デフォルトは32768です。つまり手動でプライオリティを設定しない場合,ネットワーク内で最小のMACアドレスを持つブリッジがルートブリッジになります。

 ルートブリッジは2秒に1回のタイミングでBPDUを送信します。各ブリッジはルートブリッジとの距離を計算します。計算に使われるのはリンクの速度から求められるコストです。ルートブリッジまでのリンクのコストの総計が,そのブリッジとルートブリッジの距離になります。コストは以下の表から算出されます。10ギガビット・イーサネットの登場によりコストの値は改正されています。

リンクの速度コスト(改正後)コスト(改正前)
10Gbps21
1Gbps41
100Mbps1910
10Mbps100100

 ルートブリッジからの距離を計算し,それぞれのポートの役割を決定します。

  • 代表ポート
    • ルートブリッジのすべてのポート。LANセグメント内で最もルートブリッジに近いブリッジのポート
  • ルートポート
    • ブリッジの中でルートブリッジに最も近いポート
  • 非代表ポート
    • LANセグメント内で代表ポートでないポート(ルートポートを除く)

 この3つの役割のうち,代表ポートとルートポートはフレームの送受信を行う(フォワーディング)ポート。非代表ポートはフレームの送受信を行わない(ブロッキング)冗長ポートとして設定されます(図6)。

図6●ポートの役割の決定

障害の検出と再計算

 ポートのフォワーディングとブロッキングが決定すると,ネットワークはループのない状態になり,正常にフレームのやりとりが可能になります。ですが,障害が発生した場合,障害を検出し,ブロッキングである冗長ポート(非代表ポート)をフォワーディングへと移行させる必要があります。つまり,スパニングツリーを構築し直す必要があります。

 ルートブリッジは2秒に1回,BPDU(BPDU Hello)を送信しています。各スイッチは受け取ったBPDUをフォワーディングのポートから送信します。正常な状態ならば,ルートブリッジから送信されたBPDUは末端のスイッチまで流れていくことになります。障害の検出はこのBPDUが届かないことにより判別します。障害の検出からスパニングツリーの再計算までの間では2つのタイマが重要です。

  • 最大時間(MAX AGE)タイマ ・・・ 20秒
    • ルートブリッジからのBPDUが届かなくなり,障害と判断するまでのタイマ
  • 転送遅延(Delay)タイマ ・・・ 15秒
    • 中間状態へ移行する際に使用するタイマ

 さらにブロッキングからフォワーディングへ移行する際には,間に2つの状態があります。

ポートの状態フレームの転送MACアドレスの記録 
ブロッキングしないしないフレームの転送をしない状態。
リスニングしないしないブロッキングから移行する状態。BPDUにより情報を集め,ツリーの再計算中を示す
ラーニングしないするリスニングから移行する状態。BPDUにより情報を集め,ツリーの再計算中を示す
フォワーディングするするラーニングから移行する状態。再計算が終了している。

 ブロッキングとフォワーディングを含めた4つの状態と,タイマの関係は図7のようになります。

図7●ポートの状態遷移
図7●ポートの状態遷移

 つまり,障害を検出し,非指定ポートが転送を開始する(フォワーディングになる)までの時間は,20 + 15 + 15 で50秒かかることになります。実際の再計算動作は次の形になります(図8)。

図8●STPの再計算