「止まらないネットワーク」を構築するには、さまざまなレベルでの冗長化が必要だ。レイヤ2スイッチを冗長化しているネットワークを構築する上では、スパニングツリープロトコルがよく利用されている。本稿では、スパニングツリープロトコルの仕組みを解説した上で、NETGEAR社のスイッチを利用して動作を検証する。

スパニングツリープロトコルの仕組み

スパニングツリープロトコルは、同一ネットワーク内でのイーサネットフレームの転送経路を冗長化する。IEEE802.1D規格で標準化されているので、異なるベンダの製品であってもスパニングツリープロトコルを利用することが可能だ。

スパニングツリープロトコルは、ループ構成になっているイーサネットフレームの転送経路を、ルートブリッジを中心としたループフリーの転送経路に再構成する。そのために、レイヤ2スイッチはBPDU(Bridge Protocol Data Unit)というスパニングツリープロトコルの制御情報をやりとりする。BPDUの中にはさまざまな情報が含まれているが、特に重要なものが次の2点。

・ブリッジID
・パスコスト

ブリッジIDは、スパニングツリープロトコルを動作させているレイヤ2スイッチを識別するための情報である。ブリッジIDはブリッジプライオリティとMACアドレスから構成されている8バイトの識別情報だ。パスコストはルートブリッジからの距離を数値化したものだ。スパニングツリープロトコルでは、インタフェースの速度に応じてコストが決められている。高速なインタフェースほどコストが小さくなる。パスコストはルートブリッジからの累積のコストで、小さいほど「近い」とみなす。

スパニングツリープロトコルの動作の流れは、次のようになる。

1.ルートブリッジの決定
ルートポート、代表ポート(Designated Port)の決定
上記以外のポート(非代表ポート(Non Designated Port))をブロック

まず、ルートブリッジを決定する。最小のブリッジIDのレイヤ2スイッチがルートブリッジだ。ルートブリッジはその名前のとおり「ルート(根っこ)」になり、同一ネットワーク内のイーサネットフレームはルートブリッジを中心として転送される。

そして、ルートブリッジを中心としたイーサネットフレームの転送経路を決定するために、ルートポートと代表ポートという役割を決定する。

・ルートポート(Root Port : RP)
非ルートブリッジのスイッチごとに必ず1つ存在する。非ルートブリッジのスイッチからルートブリッジへの最短経路となるポート。

・代表ポート(Designated Port : DP)
スイッチ間のリンクのうちルートブリッジへの最短経路となるポート。スイッチ間リンクに必ず一つ存在する。ルートブリッジのポートは原則としてすべて代表ポートだ。また、PCやサーバなどが接続されてループ構成にはならないポートも代表ポートになる。

ルートポート、代表ポートはどちらもルートブリッジまでの最短経路を表すポートである。スパニングツリーによってルートブリッジを中心としたイーサネットフレームの転送を行うので、ルートポート、代表ポートは必ず転送状態となる。そして、ルートポートでもなく代表ポートでもないポートは非代表ポート(Non Designated Port : NDP)と呼ばれ、ループを防止するためにブロックされる。次の図は、スパニングツリーの構成例だ。

図1 スパニングツリーの構成例

この図では、VLANの設定などは行っておらず同一ネットワークで、かつ、すべてのポートの速度は1Gbpsとして考えている。最小のブリッジIDを持つスイッチはSW2なので、SW2がルートブリッジだ。ルートブリッジであるSW2のポート1~ポート3はすべて代表ポートになる。

ルートブリッジではないSW1とSW3にはルートポートがある。ルートポートはルートブリッジへの最短経路のポートで、ネットワーク構成を見れば明らかだ。SW1のポート2はルートブリッジであるSW2と直接接続しているので最短経路のポートのはずで、ルートポートになる。同様にSW3 のポート2もルートポートだ。また、SW1 ポート1はPCに接続されていてループ構成にはならない。SW1 ポート1は代表ポートだ。同様にSW2 ポート1も代表ポートだ。

あとは、SW1とSW3間のリンクを構成するSW1 ポート3とSW3 ポート1について考えるだけだ。どちらのポートからもルートブリッジであるSW2へのコストは同じ。その場合、ブリッジIDが小さいスイッチのポートのほうが代表ポートになる。SW1よりもSW3のブリッジIDが小さいので、SW3 ポート1が代表ポートだ。残ったSW1 ポート3が非代表ポートでブロックされる。

その結果、PC1からサーバ1宛てのイーサネットフレームは、

PC1→SW1→SW2(ルートブリッジ)→サーバ1

という経路で転送される。

そして、SW1-SW2間に障害が発生すると、スパニングツリーの構成は次の図のように切り替わる。

図2 スパニングツリーによる経路の切り替わり

ブロックされていたSW1 ポート3が新しいSW1のルートポートになり、PC1からサーバ1宛てのイーサネットフレームは、

PC1→SW1→SW3→SW2(ルートブリッジ)→サーバ1

という経路に切り替えて転送される。

なお、標準のスパニングツリープロトコルではこの例にあげた初期のルートブリッジやルートポート、代表ポート、非代表ポートの決定までには約50秒かかる。また、今回の図のような最小構成なら約30秒かかり、もう少しスイッチ台数が増えると約50秒かかる。今どきの通信では少し時間がかかりすぎる。そこで、IEEE802.1wで標準化されたRSTPがある。RSTPは高速化されたスパニングツリープロトコルで経路の切り替えも数秒程度で可能だ。現在の企業向けのレイヤ2スイッチであればたいていRSTPをサポートしている。通常は、RSTPを利用することになるだろう。

NETGEARスイッチのスパニングツリープロトコル検証

ここからは、NETGEAR社のスイッチを利用してスパニングツリープロトコルの動作を検証する。利用するスイッチは、以下の3機種だ。

・GSM7248
・GSM7328S
・M5300-28G3

これら3台のスイッチで、次の図のようなスイッチがループ構成となっているネットワークを構築する。

図3 スパニングツリープロトコルの検証用ネットワーク構成

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

なお、検証に利用する3機種ともデフォルトでRSTP(IEEE802.1w)が有効になっている(図4)。

図4 デフォルトのスパニングツリープロトコルの設定

ただし、デフォルトではブリッジIDを構成するブリッジプライオリティの値は32768で共通だ。そのため、ルートブリッジはMACアドレスに基づいて決められることになる。明示的にルートブリッジを決定するためには、ブリッジプライオリティの値を設定する必要がある。ここでは、以下の表のようにブリッジプライオリティを設定する。

表1 設定するブリッジプライオリティ

スイッチ ブリッジプライオリティ
SW1(GSM7248) 0
SW2(GSM7328S) 32768
SW3(M5300-28G3) 16384

ルートブリッジを中心としてイーサネットフレームが転送されるので、サーバ1を接続しているSW2(GSM7328S)がルートブリッジになるようにブリッジプライオリティを決める。ブリッジプライオリティを設定するには、[Switching]→[STP]→[Advanced]→[CST Configuration]から行う。

図5 ブリッジプライオリティの設定

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

各スイッチでブリッジプライオリティを設定すれば完了だ。そして、各スイッチのポートがどのような役割と状態になっているかは、[Switching]→[STP]→[Advanced]→[CST Port Status]から確認できる。それぞれのスイッチのポートの役割と状態は、以下のようになっていることがわかる。

図6 スパニングツリーのポートの役割と状態

表2 スパニングツリーのポートの役割

スイッチ ポート 役割
SW1 1 ルートポート
2 代替ポート
3 代表ポート
SW2(ルートブリッジ) 1 代表ポート
2 代表ポート
3 代表ポート
SW3 1 代表ポート
2 ルートポート

なお、SW1のポート2の役割はAlternate Port(代替ポート)となっている。RSTPでは、標準のスパニングツリーで非代表ポートとしていたものをより詳細に考えている。代替ポートとはルートポートのバックアップを意味する。ルートポートが使えなくなったら、代替ポートが新しいルートポートとなる。代替ポートでは、イーサネットフレームの転送をブロックしている。RSTPでは、ブロック状態と呼ばずにDiscarding(破棄)状態と呼んでいる。

経路の切り替えの確認

PC1からサーバ1へのイーサネットフレームは、図1のように

PC1→SW1→SW2(ルートブリッジ)→サーバ1

という経路で転送される。そこで、SW1-SW2間の障害時の経路の切り替えを確認しよう。PC1からサーバ1へ連続してPingを実行して、SW1-SW2間のケーブルを抜く。その際のPC1のコマンドプロンプトのPingの結果は次のようになった。


C:\Users\Gene>ping 192.168.1.21 -t -w 1

192.168.1.21 に ping を送信しています 32 バイトのデータ:
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
~省略~
192.168.1.21 からの応答: バイト数 =32 時間 =48ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 =1ms TTL=128
要求がタイムアウトしました。
要求がタイムアウトしました。
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 =179ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.1.21 からの応答: バイト数 =32 時間 <1ms TTL=128

192.168.1.21 の ping 統計:
    パケット数: 送信 = 28、受信 = 26、損失 = 2 (7% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 179ms、平均 = 8ms

Pingのタイムアウトは1秒として実行している。SW1-SW2間のケーブルを抜くとPingのタイムアウトが2回発生して、すぐに応答が戻ってきている。つまり、2秒程度で経路が切り替わっている。また、各スイッチの管理画面も確認しておくと、経路が切り替わったときのスパニングツリープロトコルのポートの役割と状態は次のようになり、意図したように経路が切り替わっていることがわかった。

図7 スパニングツリーのポートの役割と状態(経路切り替え時)

まとめ

スパニングツリープロトコルは設定も簡単でよく利用されている冗長化プロトコルで、NETGEAR社のスイッチ製品ももちろん対応している。現在では、高速なRSTPを利用することが一般的だ。スパニングツリーはあくまでも同一ネットワーク内での冗長化に過ぎないということには注意してほしい。スパニングツリープロトコルを利用する際には、同一ネットワークの中だけという適用範囲をしっかりと意識して、ルートブリッジをどのように決めれば適切な転送経路になるかを考えることが重要だ。