LAN スイッチを冗長化して接続すると、どうしてもループ構成ができてしまいます。レイヤ2でループ構成になると、フレームが際限なく増え、MAC アドレステーブルも正しく作れなくなります。
ループを起こさずに冗長化を保つためのプロトコルとして、昔から使われ、今でもよく使われているのがスパニングツリー(STP)です。この記事では、スパニングツリーをざっくり理解するための考え方を、簡単な例で説明します。
- レイヤ2のループで何が起きるのか、スパニングツリーが何をするのか
- ルートブリッジの決まり方(ブリッジ ID)
- ルートブリッジからの「遠さ」の測り方(パスコスト)
- どのポートでデータ通信をブロックするのか(具体例)
スパニングツリーとは
スパニングツリーは、イーサネットの冗長化のためのプロトコルです。物理的にはループする形でつないでも、一部のポートでデータ通信をブロックすることで、レイヤ2のループが起きないようにします。使っている経路に障害が起きると、ブロックしていたポートが通信を始め、別の経路に切り替わります。
ループすると何が起きるのか
イーサネットのフレームには、IP パケットの TTL のような「何回転送されたら捨てる」という仕組みがありません。そのため、ループ構成でブロードキャストフレームが流れると、スイッチ間をいつまでも回り続け、コピーされながら増えていきます(ブロードキャストストーム)。
また、同じ送信元のフレームが別々のポートから届くので、スイッチは MAC アドレスがどのポートの先にいるのかを決められず、MAC アドレステーブルの学習先が入れ替わり続けます。
名前の由来は「広がる木」
スパニングツリー(Spanning Tree)は「広がる木」という意味で、木の根っこ(ルート)から枝が広がっていくイメージから名付けられています。木の枝は、先どうしがくっつくことがないので、ループにはなりません。
スパニングツリーでも、根っこにあたるスイッチ(ルートブリッジ)を決め、そこから枝のように経路を広げます。枝の先どうしをつなぐリンクがループの原因になるので、そこでデータ通信をブロックします。
スパニングツリーを理解する手順
図2のとおり、まずはループ構成の中でルートブリッジを決めることが一番大事です。次に、各スイッチからルートブリッジまでの距離を計算し、どのスイッチの最短経路にも使われないリンクの片側でデータ通信をブロックします。
ルートブリッジを決める
ルートブリッジは、ネットワークの中で必ず1台だけです。ルートブリッジは、ブリッジ ID(ブリッジプライオリティ+MAC アドレス)で決まり、この値がもっとも小さいスイッチがルートブリッジになります。
Cisco Catalyst のブリッジプライオリティの既定値は 32768 で、0〜61440 の範囲で 4096 刻みに変更できます。ブリッジプライオリティが同じスイッチどうしでは、MAC アドレスが一番小さいスイッチがルートブリッジになります。
Cisco の PVST+ や Rapid PVST+ では VLAN ごとにスパニングツリーを動かすため、ブリッジプライオリティに VLAN 番号を足した値(拡張システム ID)を使います。たとえば既定値のまま VLAN 1 なら、32768+1=32769 と表示されます。
何も設定しないと、MAC アドレスがたまたま一番小さいスイッチがルートブリッジになります。実際のネットワークでは、コアスイッチなどルートブリッジにしたいスイッチのプライオリティを小さく設定しておくのが一般的です。
ルートブリッジからの距離を計算する
ルートブリッジから「遠い」「近い」は、ルートブリッジまでの経路にあるポートのコスト(パスコスト)の合計で決まります。この合計をルートパスコストと呼びます。ポートの速度が遅いほどコストは大きくなり、コストの合計が大きいほどルートブリッジから遠いと考えます。
| ポートの速度 | コスト(ショート) | コスト(ロング) |
|---|---|---|
| 10 Mbps | 100 | 2,000,000 |
| 100 Mbps | 19 | 200,000 |
| 1 Gbps | 4 | 20,000 |
| 10 Gbps | 2 | 2,000 |
コストの値には、IEEE 802.1D-1998 のショート(16 ビット)と、IEEE 802.1D-2004 のロング(32 ビット)の2種類があります。Cisco のスイッチでは、どちらを使うかを spanning-tree pathcost method で設定でき、既定はモデルやバージョンによって異なります。
使われないリンクの片側をブロックする
各スイッチは、ルートブリッジまでのルートパスコストが一番小さい経路を使います。どのスイッチの最短経路にも使われないリンクが残ったら、そのリンクの片側のポートでデータ通信をブロックします。どちら側をブロックするかは、次の具体例で見ていきます。
具体例
4台のスイッチが四角形につながった構成で考えます。下のスイッチをルートブリッジとし、各リンクのコストを図3のようにします。わかりやすくするため、コストは 10 と 100 という説明用の値にしています。
左右の SW-A と SW-B は、ルートブリッジまでコスト 10 で行けます。一番上の SW-C は、SW-B を通る右回りならコスト 20(10+10)、SW-A を通る左回りならコスト 110(100+10)です。SW-C は、コストの小さい右回りの経路を使います。
では、各スイッチからルートブリッジまでの経路で、使われていないリンクはどこでしょうか。それは、SW-C と SW-A の間のリンク(図5の破線)です。
このリンクの両端のどちらのポートでデータ通信をブロックすればよいのでしょうか。ここで、このリンクの上に端末がいると想像してみてください。その端末がルートブリッジに行くには、どちらのスイッチを通るのが近いでしょうか。
SW-A を通ればコスト 10、SW-C を通ればコスト 20 なので、SW-A を通る経路が選ばれます。このリンクにとって、ルートブリッジへの出口は SW-A 側のポートになり、SW-C 側のポートは使われません。そのため、SW-C 側のポートでデータ通信をブロックします。
このとき、リンクごとにルートブリッジに近い側のポートを「指定ポート」と呼びます。この例の SW-C と SW-A の間のリンクでは、SW-A 側が指定ポートです。両側のコストが同じ場合は、ブリッジ ID が小さいスイッチの側、それも同じならポート ID が小さい側が選ばれます。
ブロックしたポートも、スパニングツリーの制御フレーム(BPDU)は受け取り続けています。たとえば SW-B とルートブリッジの間のリンクが切れると、SW-C はブロックしていたポートを使って SW-A 経由でルートブリッジに向かうようになります。従来の STP(IEEE 802.1D)では、この切り替えに数十秒かかります。切り替えを速くしたのが RSTP(IEEE 802.1w)です。
この例で、各リンクの両端のポートがどうなったかをまとめると、次のようになります。
| リンク | ルートブリッジに近い側(指定ポート) | 反対側 |
|---|---|---|
| ルートブリッジ — SW-A | ルートブリッジ | SW-A(ルートポート:SW-A からルートへの出口) |
| ルートブリッジ — SW-B | ルートブリッジ | SW-B(ルートポート) |
| SW-B — SW-C | SW-B | SW-C(ルートポート) |
| SW-A — SW-C | SW-A | SW-C(ブロック) |
ここまでがスパニングツリーを理解するための第1歩です。ルートポートや指定ポートといったポートの役割は、次の記事で詳しく説明しています。
まとめ
| 項目 | ポイント |
|---|---|
| ループの問題 | フレームが回り続けて増える(ブロードキャストストーム)。MAC アドレステーブルの学習先が定まらない |
| スパニングツリーの考え方 | ルートブリッジを根っことした木の形にし、枝の先どうしをつなぐリンクの片側をブロックする |
| ルートブリッジ | ブリッジ ID(プライオリティ+MAC アドレス)が一番小さいスイッチ。Catalyst のプライオリティの既定値は 32768 |
| 遠さの測り方 | ルートブリッジまでのポートのコストの合計(ルートパスコスト)。速いポートほどコストが小さい |
| ブロックするポート | どの最短経路にも使われないリンクで、ルートブリッジから遠い側のポート |
コメント