Spanning Tree Protocol

Cisco Systems

ネットワークの設計をする際、L2レイヤーの冗長化方式として(STP)Spanning Tree Protocolを使う事があります。

昨今ではSTPは使わずにRSTP(Rapid Spanning Tree Protocol)が使われているものの、STPやRSTPは嫌われる事が多く、原則としてSTPを使わずにEtherChannelやスタックが多く使われていたりします。それでもL2の冗長化は要件として残る事が多くありますし、高度な機能を支える仕組みとして機器の内部的に使われている事もあります。

STPの概要

STPとRSTPは用語や仕組みなどの共通点が数多くありますし、挙動も似ているので単に動作速度の差のように思われがちですが、前提となる機器構成が違うといった点があり、扱う上では別物とした方が良いと思います。

簡単に違いを挙げるとするなら、STPは10BASE-5やシェアードハブが使われていた時代に作られた配線の冗長化方式で、RSTPはマネージドスイッチで構成されるポイントツーポイントで配線さえれている時代の冗長化方式と言えるかもしれません。

RSTPを理解するにはSTPを理解しておいた方が良いので、ここではまずSTPについて記載します。

Stp 01 network

よくある図ですが、スイッチが以下のように物理的に接続されているとします。このままではループが発生してしまいますので、STPを用いて論理的にループを解消します。

STPによって解消されたのが以下の図です。STPの機能としてRoot Bridgeが決定し、続いて通信に使用しない経路が決定します。この経路は通信に使用しないとは言ってもSTPの制御パケットであるBPDUは通信し続けています。あくまでも一般のデータ通信には使用しないという意味です。

Stp 02 noloop

このRoot Bridgeという考え方で一気にわからなくなる人もいるかと思いますが、前記の図からデータ通信に使用しない経路を取り除き、少し図を変形すると次の図のようになります。

Stp 03 tree

上記の図で表しているのはRoot Bridgeを頂点として文字通り(逆さまの)ツリー型になっている所です、図をひっくり返してみたところが次の図です。

Stp 04 tree2

このようにループのある構成をTreeのように枝分かれした論理的な構成にすることをSTPは行っているわけです。

では実際にどのように動作しているのか順番に見てみます。

STPの動作

Root Bridgeの決定

余談ですが、なぜRoot Bridgeというのでしょうか。Root Switchの方が適当に思えます。これは時代的な背景があり、元々L2の転送を行うのはBridgeと呼ばれていたからです。当時はSwitchというプロダクトそのものがありませんでした。その後、スイッチが市場にリリースされ、Bridgeの機能がスイッチに統合されていきました。STPはまだスイッチが登場する前にBridgeに搭載された機能だったからです。

まず、数多くのスイッチからRoot Bridgeを決定します。

各スイッチは起動すると自身のブリッジプライオリティとMACアドレスからブリッジIDを決定します。そしてBPDUと呼ばれる制御用のフレームを各経路に送信しつづけます。また各スイッチはBPDUの受信をします。

Stp 05 BPDU

ちょっとややこしいですが、ブリッジプライオリティは値の小さい方が優先度が高くなります。

受信したBPDUのブリッジプライオリティと自身のブリッジプライオリティを比較して自身のブリッジプライオリティが低ければRoot Bridgeになる事はできません。そのスイッチは自らのBPDUを送信するのを止めてしまい、ブリッジプライオリティの高いBPDUを転送するようになります。

ブリッジプライオリティが同じ場合はMACアドレスを比較して値の小さいスイッチが優先になります。

最終的にブリッジプライオリティの最も高い一つのスイッチだけがBPDUを送信しつづけ、他のスイッチはBPDUを転送することになります。この動作によってRoot Bridgeが決定します。

Root Portの決定

Root Portとは各スイッチからRoot Bridgeに至る経路で1ポートだけです。

Root Bridgeに至る経路を見つけるためにBPDUの情報を利用します。Root BridgeはBPDUを送信する際にPath Costという項目を0として送信しています。Boot Bridge以外のスイッチはBPDUを受信した際に受信したPortのPath CostをBPDUのPath Costに加算してから他のポートへ転送しています。

この仕組みによりBPDUのPath Costの値はRoot Bridgeに至るための各経路のPath Costの合計値になっています。

各スイッチは複数のポートからBPDUを受信する事がありますが、その中で最もPath Costの小さいBPDUを受信したポートをRoot Portとします。

下の図ではSW3はSW2から受信したBPDUからPath Costが19(0+19)、一方、SW5とSW6を経由したBPDUからPath Costが57ですので、SW2と接続されているポートがRoot Portになります。

Stp 06 rootport

Designated Portの決定

Root BridgeとRoot Portが決定した事でスイッチのネットワークはRoot Bridgeを頂点としたツリー構造ができあがっています。しかしシェアードハブやSTP機能を持たないスイッチなどが経路上に存在する可能性がありますので、各経路について通信を受信するポートを決定する必要があります。これをDesignated Portといいます。

Designated Portの決定方法はRoot BridgeやRoot Portと少々考え方が異なります。各経路について最もRoot BridgeへのPath Costが小さいスイッチの接続されているポートがDesignated Portになります。自明ですがRoot BridgeのポートはDesignated Portになります。

下図ではSW5とSW6の間の経路について考えてみます。SW5はRoot BridgeへのPath Costが19、同様にSW6は38ですので、SW5がDesignated Portになります。

Stp 07 DP

経路とはこの場合は配線の事になりますので、各配線を考えの中心にしますので混乱する事も多いかと思います。ここで考慮するのは配線といっても実はシェアードハブなどを含んでいるかもしれないという事です。配線であればポイントツーポイントかもしれませんが、シェアードハブが含まれていればその経路は複数のスイッチが接続されている可能性があります。

ツリーの完成

Root Bridge、Root Port、Designated Portが決定した事によってスイッチのツリーが完成しました。この完成したネットワークを利用して通信が行われるようになります。Root PortでもDesignated Portでもないポートはデータ通信には利用されません。

Stp 08 tree

ポートの状態

Spanning Tree Protocolによってループのあるネットワークが論理的にループの無いネットワークとなりました。しかし、Spanning Tree Protocolがループを解消しているまでの間はループが存在してしまう事になります。そのため各ポートはSTPの状況によってステータスを変更しつつ動作を変えています。

Blocking 状態

Blocking状態のポートはBPDU以外の通信は行いません。データの通信には使用しない状態です。起動直後などでSTPが動作を開始するときはこの状態となります。

Root PortにもDesignated PortにもならなかったポートはこのBlocking状態になります。

STPはまずポートをBlocking状態にするのでループが存在しない状態からスタートする事になります。逆に言えば起動直後のスイッチはSTPにより通信が行われないという事になります。

Listening 状態

スイッチはBPDUの送受信のみ行ってSTPの情報を集めて計算している状態です。データの通信は行われません。

Learning 状態

データ通信は行われませんが、MACアドレスの学習は行われます。データ通信が開始される前準備段階等いのが妥当でしょうか。

Forwarding 状態

データ通信が行える状態。Root PortとDesignated Portがこの状態となる。

STPのメリット・デメリット

メリット:L2ループの解消

STPは古くからあるL2ループ解消のプロトコルであるため、多くのブリッジやスイッチで実装されています。当然標準化もされていて各メーカー毎の相性といったものも気にしなくても良いレベルにあります。

ただSTPのデメリットを解消する目的やSTP以降の技術に対応するために各メーカーが機能を拡張している部分も多くありますので、それらのメーカーの特徴を確認してから相互接続を行った方が安全です。

デメリット:論理L2ネットワークの設計

Root Bridgeを中心としたL2ネットワークを構成するSTPなので、設計時に物理的な用件に基づいたネットワークと、Root BridgeやRoot Portといった論理的なL2ネットワークを意識しなくてはなりません。そこには障害発生時のL2ネットワーク変更も含まれ、規模が大きくなると結構厄介な作業となります。運用開始後のネットワークの拡張時も考慮する必要があります。

デメリット:ポート状態の遷移時間

STPでは各ポートは最終的にBlocking状態とForwarding状態になるわけですが、Listening状態とLearning状態というデータ転送が行われない状態があり、さらにSTPの初期状態であるBlocking状態もあるため、ポートがForwardingもしくはBlockingになるまでの間はSTPの処理を待たないとデータ通信ができないという事になります。

このデータ通信ができない時間は最大で50秒にもなります。ネットワークの総明記であれば経路を冗長化するメリットとのトレードオフとも捉える事が出来たかもしれませんが、現代では非常に大きい時間であり、アプリケーションのタイムアウトを引き起こしたり、ユーザが待ち切れなかったりするなど、経路を冗長化できても損失が大きすぎるという事も考えられます。

ポート状態の遷移にかかる時間を短縮するためにタイマーを変更する方法もありますが、メーカー独自の機能拡張やSTPから派生しているRSTP(Rapid Spanning Tree Protocol)もありますので、そちらを検討しても良いかもしれません。

デメリット:未使用経路の増加

STPによってループが解消されるという事は、データの通信に使われない通信経路があるという事です。ループが問題を引き起こす以上しかたのないことではありますが、ネットワークの規模が大きくなると未使用の経路の費用も大きくなります。対策としてはVLAN毎にSTPの設計を行って未使用の経路を少なくする事もできますが、業務の用件との兼ね合いであまり現実的ではない事もあります。

コメント

タイトルとURLをコピーしました