【図解】STP(スパニングツリー)の実はシンプルな本質とアルゴリズム

スパニングツリーとは

STPとは、Spanning Tree Protocol(スパニングツリープロトコル)の略で、Ethernetの経路冗長化の技術です。

Ethernetの経路を物理的に冗長構成(複数経路)にすると、通常はL2ループが発生し、使い物にならないネットワークになります。ですが各スイッチでこのSTPを有効にすることで、論理的にL2ループの無い単一経路にすることができます。そして、もしその単一経路が障害で使えなくなった場合、自動で別の経路に切り替えることができます

近年はLinkAggregationという技術により、L2の経路冗長と同時に負荷分散も可能になりましたので、実装されることは少なくなってきています。

さらに、ポートにPCを挿すだけでもリンクアップが遅れるなどの害もあるので、初期設定で有効なスイッチではそれが理由ですぐに無効にされるケースがほとんどです。

STPの中にもPVSTP, Rapid PVSTP, MSTPという、VLAN単位での負荷分散をするものもありますが、LinkAggregationに比べると設定の容易性も機能も劣ります。

また、WANの網内での経路冗長への適用として、STPから発展したSPBという技術がやや注目されていることにも触れておきます。

スポンサーリンク

STPの本質

STPは設定は比較的簡単ですが、教科書通りに覚えようとしてもなかなか難しいです。STPを簡単に覚えるためには、本質を掴むことが大切です。

STPの本質は、以下に集約できます。

  1. まず RootBridge が決まり、RootBridge を最上流として BPDUが下流スイッチに流れていく。
  2. BPDU が流れる向きに依って、各スイッチが UpLink と DownLink を区別する。BPDU を受信するポートUpLinkBPDU を送信するポートDownLinkとなる。
  3. UpLink については、Path Cost が最小の1ポートのみを開放し(Root Portのこと)、他のポートをブロックする(RSTP で言うAlternate Port, 代替ポートのこと)。
  4. DownLink については基本的にすべて開放する(Designated Port)が、例外的に自分のスイッチ内でループする場合は片方をブロックする(RSTP で言うBackup Portのこと)。

スポンサーリンク

この本質を押さえれば分かる通り、この次に押さえるべき重要な事項が、BPDUの動きを把握することです。

STP は種類が色々ありますが、共通して言えるのは、先程の本質と BPDU の動きさえ押さえてしまえば、大抵の動作は理解できる、ということです。

ここでは分かり易い説明を試みるため、教科書に書かれているような説明とは違ったアプローチをしますが、本質的には同じことを言っています

BPDUの動作を理解する

STPではまず最初に Root Bridgeを決めます。最小の Bridge ID を持つスイッチが Root Bridge になります。

この Bridge ID は以下のように表現されます。

[Priority(0000〜FFFF)]:[MAC address(0000:0000:0000〜FFFF:FFFF:FFFF]

Priority を小さくすれば、MACアドレスの大小に関係なく Root Bridge になるので、設定次第でどのスイッチを Root Bridge にするかを変更できます。

この Root Bridge を頂点として BPDU が下位のスイッチに伝搬されていきます。例えるならば、Root Bridge が源泉BPDU が水です。BPDU は上流(Root Bridge)から下流(下位スイッチ)に流れていきます。

BPDU には流れの強さがあり、当然強いほうから弱い方に押し流されるので、強いほうが上流、弱いほうが下流になり、弱いほうは BPDU の送信を止めます。

スポンサーリンク

流れの強さというのはPath Cost送信元Bridge ID送信元Port IDの3つで決まります。より流れの強い BPDU のことを、『優位な BPDU』と呼びます。上記の例では、Path Cost がともに4で同じであるため、送信元 Bridge ID を比較し、小さいほうである SW#2 から出るBPDU が優位な BPDU、すなわち流れの強い BPDU になりますので、SW#3 はBPDU の送信を止めます

下位の各スイッチにおいて、BPDUを受信するポートがUpLink(上流へ向かうポート)、BPDUを送信するポートがDownLink(下流へ向かうポート)です。

このUpLinkは、uplinkfastで使われてるのと同じ意味です。

UpLink(ルートブリッジへのルート)が複数ある時は、優位な BPDU を受信しているポートのみが Root Portとして通信できるようになり、それ以外のポートはBlock Portとなります(RSTPにおいてはAlternate Port(代替ポート)として定義されます)。

また、DownLinkは基本的には全てDesignated Portとして通信許可されますが、例外として、自身で送出したBPDU が STP非対応のハブ経由で別ポートに戻ってくる場合は、優位な BPDU を送信する1ポートのみが Designated Port として通信許可され、それ以外はBlock Portとなります(RSTPにおいてはBackup Port として定義されます)。

スポンサーリンク

補足ですが、Backup Portは STP対応スイッチと非対応ハブを接続するので、素人目から見て L2ループの発生を思わせるためか、実装されているのを見たことがありません

さらに補足ですが、ハブを介さなくても同じスイッチの別ポートを LANケーブルを直結すれば片方が Backup Port になりますが、この構成に意味はありません。結線誤り時のループ回避にはなります。

まとめ

  • BPDU 受信ポートは UpLink と呼ばれ、1ポートだけ通信可(Root Port)でそれ以外は通信不可(Alternate Port: 代替ポート)
  • BPDU 送信ポートは DownLink と呼ばれ、基本全て通信可(Designated Port)、ただし例外で自身の BPDU を送受信し合うポートは、1ポートだけ通信可(Designated Port)になり、それ以外は通信不可(Backup Port)

Path Costの決まり方

Ethernet の速度に応じて Port Cost が決められており(ただし設定で変更可)、Root Bridge からそのスイッチまでに経由するポートの Port Cost を合算したPath Cost を、BPDU で伝搬します。Root Bridge は PathCost=0で下位スイッチに BPDU を送信します。

スポンサーリンク

1つのスイッチから DownLink へ送信される BPDU は必ず同じ Path Cost を持っています。つまり、スイッチは BPDU を受信する際に受信ポートの Port Costを Path Cost に足します。このとき対向スイッチの BPDU 送信ポートの Port Cost は無関係です。

Bridge ID と Port ID は、1つ上流にあるスイッチのものを利用します。同じスイッチから2つの経路で BPDU を受信しているときは Path Cost と Bridge ID は同一ですので、 Port ID により優位性が決まります

まとめ

  • Port Cost は UpLink に対して適用し、DownLink にも影響を与える
  • Port Priority は DownLink に対して適用し、直下のスイッチのみに影響を与える

STPとLoop Detection(ループディテクション)の違い

STP のことを"ループ防止を実現するもの"、とする記載もたまに見かけますが、個人的にはこの表現は目的を外していると考えています。

STP の本質は経路冗長であり、物理的にL2ループ状態が作られているのが正しい構成なのです。そのため、ループが発生したときにループを止めることが出来ても、人間がログなり SNMP trap を見ても、それが正しい構成なのか誤りなのかが判断しにくいです。

一方、Loop Detectionという機能はまさにループ防止・検知のための技術なので、アラームが来れば、それはループが発生したことを意味しますので、人間にとって分かり易いです。

また、Loop Detection では、STP では実現できないループ検知手法を持っていることが多いです。

例えば、STP 有効スイッチの配下にあるハブでループが起きたときは検知できませんが、Loop Detection 有効スイッチの配下にあるループは検知可能です。

また、メーカによっては uplink, downlink を設定し、uplink ではループ検知フレームを送出するが、検知時にポートをブロックしない、という設定を入れることができます。

STPとLoop Detectionの違いは、まさに目的の違いであり、Loop Detection のほうがループ検知・防止に特化しているのです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする