STPの概要
STP(Spanning Tree Protocol)はレイヤ2ネットワークのループ構成を防止するためのプロトコルです.IEEE802.1Dで標準化されています.
ネットワークの可用性を向上させるために,単一の障害点を回避して通信できるように迂回路を使用して通信できるようなネットワークを構成することがあります.このとき,STPを使用しない場合だと,ネットワーク内の端末からブロードキャストされたARPリクエストがフラッディングされ続けてしまいます.この状態をブロードキャストストームと呼び,ネットワーク機器のCPU処理高騰や帯域の圧迫などを引き起こし,LAN内の通信が不安定な状態となります.

STPではスパニングツリーと呼ばれるツリー型の論理ネットワークトポロジーを形成します.これによってネットワークのループを防止します.ネットワーク内のスイッチの一部のポートがSTPによってブロックされた状態となり,フラッディングを行わないようになります.

下の図のようなSTPを有効にしたネットワークでは,SW2-SW3間のリンクがブロックされた状態となっています.通常時はSW1からSW2へのリンクを通ってRT1へと抜けていきます.しかし,SW1-SW2間のリンクに障害が発生した場合には,SW1からSW3を経由しSW2へ通っていきます.

STPの基本用語
BPDU(Bridge Protocol Data Unit)
BPDUはSTPで使用されるフレームです.BPDUは主に次の目的で使用されます.
- ルートブリッジの選出
- ループ箇所の特定
- スイッチポートのブロック
- トポロジーの変更通知
- スパニングツリーの状態監視
BPDUはレイヤ2のマルチキャストアドレスで発信されます.宛先アドレスは,01-80-c2-00-00-00です.BPDUはマルチキャストアドレスですが,STPを有効にしているスイッチはBPDUをフラッディングしません.STPを有効にしていないスイッチのみがBPDUをフラッディングします.BPDUのメッセージフォーマットは次の通りです.
Field | フィールド | サイズ(Byte) | 説明 |
Protocol ID | プロトコルID | 2 | プロトコルのID.0x0000となる. |
Version | バージョン | 1 | STPバージョン.802.1dの場合0x00. |
BPDU Type | BPDUタイプ | 1 | Configuration BPDUの場合0x00. TCN(Topology Change Notification) BPDUの場合0x80. |
Flag | フラグ | 1 | LSBがトポロジの変更を示すビット. MSBがTCN ACKを示すビット. |
Root ID | ルートID | 8 | ルートブリッジのブリッジID. |
Root Path Cost | ルートパスコスト | 4 | ルートブリッジまでの累積コスト. |
Bridge ID | ブリッジID | 8 | BPDUを発信したスイッチのブリッジID.スイッチの識別情報. |
Port ID | ポートID | 2 | ポートプライオリティとポート番号からなるポートの識別情報. |
Message Age | メッセージエージ | 2 | BPDUが生成されてからの時間. |
Max Age | 最大エージ | 2 | Configuration BPDUを受信できないとき障害とみなすまでの時間.デフォルトで20秒. |
Hello Time | ハロータイム | 2 | ルートブリッジがBPDUを送信する時間.デフォルトで2秒. |
Forward Delay | 転送遅延 | 2 | リスニング状態またはラーニング状態の時間.デフォルトで15秒. |
STPを有効にしたスイッチでは,これらの情報を含むBPDUを必要に応じて一部の値を再計算した上でフラッディングします.
Configuration BPDU
ルートブリッジとして選出されたスイッチが定期的に送信するBPDUです.ルートブリッジ以外のスイッチはコンフィグレーションBPDUをもとに必要な情報を書き換えたのち,新たにConfiguration BPDUを他のスイッチへフラッディングします.
TCN(Topology Change Notification) BPDU
トポロジーの変更を通知するためのBPDUです.スパニングツリーで状態遷移が発生するトポロジーの変化を検知して通知します.TCN BPDUの場合,BPDUフォーマットのFlag以降のフィールドはフレームに含まれません.
ブリッジID
STPを有効にしているスイッチを識別するための情報です.2 Bytesのブリッジプライオリティと,6 BytesのMACアドレスを合わせた計8 Bytesで構成されます.
ブリッジプライオリティはデフォルトで32768(0x8000)です.設定により任意の値へ変更可能です.
パスコスト
STPでは,ルートブリッジを頂点とするツリー型の論理ネットワークを構成します.パスコストはスパニングツリーを構成するスイッチからルートブリッジまでの距離を数値化するための情報です.パスコストの値には16ビットと32ビットの場合の2種類があり,どちらを利用するかは製品や設定によって変わります.
帯域幅 | コスト値(16 bits) | コスト値(32 bits) |
10 Mbps | 100 | 2000000 |
100 Mbps | 19 | 200000 |
1 Gbps | 4 | 20000 |
10 Gbps | 2 | 2000 |
スパニングツリーの形成
以下のネットワークを例としてスパニングツリーの形成手順を説明します.

ルートブリッジの選出
まず,スパニングツリーの頂点となるルートブリッジを選出します.ルートブリッジはブリッジIDが最小のスイッチが選ばれます.STPを有効にしたスイッチは,最初は自身がルートブリッジであると仮定してConfiguration BPDUをフラッディングします.

他のスイッチから受信したConfiguration BPDUのブリッジIDが自身のブリッジIDより小さければ送信元のスイッチをルートブリッジとみなし,新たにルートブリッジのブリッジIDをルートIDとしてConfiguration BPDUを生成する.これを繰り返してネットワーク全体でルートブリッジの選出を行う.また,2番目にブリッジIDが小さいスイッチのことをセカンダリブリッジと呼びます.
ポートの役割
次に,ルートブリッジまでの最短経路を決定するためにスイッチの各ポートの役割を決めます.
役割 | 略称 | 状態 | 説明 |
ルートポート | RP | Forwarding | ルートブリッジ以外のスイッチに1つ設定される.ルートブリッジまでの最短経路となるポート. |
代表ポート | DP | Forwarding | スイッチ間のリンクにおけるルートブリッジまでの最短経路のポート.リンクの対向同士でルートブリッジに近いポートが割り当てられる. |
非代表ポート | NDP | Blocking | ルートポートでも代表ポートでもないポート.イーサネットフレームを転送しない状態. |
ルートポートや代表ポートの決定には,次のBPDUフィールドが利用されます.ルートパスコストはスイッチの各ポートからルートブリッジまでの累計パスコストになります.上から順に評価し,値が同じ場合は次の情報を比較します.どの値も小さい方が役割として選出されます.
- ルートパスコスト
- ブリッジID
- ポートID

ルートブリッジであるSW1からルートパスコストの値を0としてBPDUをフラッディングします.1 Gbpsのリンクなので対向のスイッチはコスト4としてBPDUとポートIDを書き換えてBPDUをフラッディングします.SW2はポート1からはコスト4,ポート2からはコスト8でBPDUを受け取るので比較してポート1をルートポートとします.同様に,SW3はポート1がルートポートとなります.
次に,代表ポートは各リンクにおけるルートブリッジへの最短経路で決定されます.ルートブリッジのポートは必ず代表ポートとなります.SW2とSW3間のリンクではどちらもルートパスコストが8になるのでブリッジIDによる比較を行います.ブリッジIDがより小さいスイッチのポートが優先され,代表ポートとなります.よってSW2のポート2が代表ポートになります.
ルートポートでも代表ポートでもないポートは,非代表ポートとしてブロッキング状態になります.各スイッチの最終的なポートの状態は以下の表の通りです.こうして最終的なスパニングツリーの状態が決まることをコンバージェンス/収束するといいます.
SW1 | SW2 | SW3 | |
ポート1 | DP | RP | RP |
ポート2 | DP | DP | NDP |
ポート状態の遷移
スパニングツリー形成時,スイッチのポートはいくつかの状態に遷移します.ポートの種類は4種類です.
ブロッキング状態
全てのポートは初期状態ではブロッキング状態となります.ブロッキング状態で受信したポートは他のポートには転送されず,他のポートで受信したフレームをブロッキング状態のポートへ転送しません.ただし,フレームの受信自体は行います.最大エージングタイムが経過(障害発生を検知)すると,リスニング状態に遷移します.
リスニング状態
BPDUを受信し,ルートブリッジの選出やルートポート,代表ポートの決定など,スパニングツリーの計算を行っています.リスニング状態においてもフレームの転送はブロックされます.この状態で受信したフレームをMACテーブルに登録することはありません.最大遅延時間の間だけリスニング状態となります.
ラーニング状態
スパニングツリーの計算完了後,転送遅延時間の間はMACアドレステーブルを構築するためにラーニング状態となる.ラーニング状態終了後はルートポートおよび代表ポートはフォワーディング状態へ,非代表ポートはブロッキング状態へ遷移します.
フォワーディング状態
フレームの転送を行う状態です.初期のブロッキング状態からフォワーディング状態へ遷移が完了するまでの時間をコンバージェンスタイムといい,最大エージングタイム(20)+転送遅延時間(15)+転送遅延時間(15)=50秒の時間が最大でかかります.
トポロジー変更通知
スパニングツリーでリンクダウンや機器故障などの障害が発生し,トポロジーの変化を検知するとTCN BPDUをフラッディングします.
スイッチがダウンした場合

TCN BPDUを受信したスイッチはTCN ACKフラグセットしたConfiguration BPDUを返しし,ルートポートにTCN BPDUをフラッディングします.そうして,ルートブリッジまでTCN BPDUを届け,トポロジーの変更を通知します.
ルートブリッジはTCフラグをセットしたConfiguration BPDUをスパニングツリーの全てのスイッチにトポロジーの変更を通知します.TCフラグの送出はデフォルトで35秒間(最大エージングタイム20秒+転送遅延時間15秒)行います.
TCフラグをセットしたConfiguration BPDUを受信したスイッチはMACアドレステーブルのエージングタイムを転送遅延タイムまで短くし,MACアドレステーブルのエントリをクリアします.
以下のトポロジーでリンクがダウンした場合の経路の切り替わりを考えます.ブリッジIDが小さい順に,スイッチ1,スイッチ2,スイッチ3とします.

スイッチ1-スイッチ3間のリンク障害
スイッチ3のポート2を新しいルートポートとし,ポート2からTCN BPDUを送信します.スイッチ2はポート2からTCN BPDUを受信し,リスニング状態に遷移します.同様にポート1からTCN BPDUを送信し,リスニング状態にします.スイッチ1もTCN BPDUを受信したポート1をリスニング状態にします.
リスニング状態になった各ポートは転送遅延タイムが経過するとラーニング状態に移行します.さらに転送遅延タイムが経過するとフォワーディング状態に移行します.
よって,スイッチ3の直接のリンク障害では転送遅延タイム2回分の時間(30秒)で経路の切り替えが完了します.

スイッチ1ースイッチ2間のリンク障害
スイッチ1とスイッチ2間のリンク障害はスイッチ3にとっては間接的なリンク障害です.スイッチ3はポート2が新たに代表ポートとなります.
正常時であればスイッチ3はスイッチ2から定期的にコンフィグレーションBPDUを受信しています.ところが,スイッチ1とスイッチ2間のリンクに障害が発生すると,スイッチ3は定期的なコンフィグレーションBPDUを受信できなくなります.その状態で最大エージタイムが経過するとスイッチ3は障害を検出できます.
スイッチ3はポート2を代表ポートしてリスニング状態にします.また,スイッチ2のポート2はルートポートになります.リスニング状態からラーニング状態を経てフォワーディング状態となり,スパニングツリーの再計算が完了します.
スイッチ3が障害を検知するまで20秒(最大エージタイム),加えて2回分の転送遅延タイムとして30秒経過後に経路の切り替えが完了します.

コメント