スパニングツリープロトコル(、STP)は、LAN内でループ構成を回避するためのデータリンク層の通信プロトコルである。IEEE 802.1Qで規格化されている。

概要

スパニングツリープロトコル(STP)の最も重要な役割は、LANにおけるループ構成を避けることにある。ネットワークにおいてループ構成を構築した場合、いくつかの問題が発生する。 スイッチの間でブロードキャストフレームがループすることで、ブロードキャストストームが起き、LANの帯域幅と各機器のCPUリソースが消費され、正常に通信が行えなくなる。 自分が発信したはずのフレームが別の場所から戻ってくるため、スイッチが行うMACアドレステーブルの学習が正しく動作しない。 thumb|center|308px|LAN接続のループ構成例。ブロードキャストストームが発生する。 STPを利用すれば、ネットワーク利用者が不用意にループを構成した場合もスイッチが自律的にループを解消し、上記のようなネットワークの不正動作を防ぐことができる。

STPではグラフ理論のアルゴリズムを応用している。LAN接続のスイッチと配線を、点と線によって構成されるグラフとみなし、接続の一部をあえて遮断することでスパニング木を構成する。すると、木構造は閉路を持たないことから、LAN内部でのループが回避されたことになる。

また、STPは冗長化用途として予備経路の確保に使われることがある。ネットワーク設計では、重要なパスが寸断した場合の予備として冗長なリンクを設けることが望ましい。しかしある2点間の経路を複数作ると、その2点間にループが構成されてしまい、LANが正常に動作しない。ここでSTPを用いることで、リンクの冗長化を実現しつつループ構成を防ぐことができる。

STPはラディア・パールマンがDEC社員時代に発明したアルゴリズムを基礎としている。主に以下の種類がある。

DECオリジナル版 - 1985年に初めて製品実装されたもの。以降のものと互換性なし。 初期STP - 1990年にIEEE 802.1Dで初めて標準化された。 RSTP (Rapid STP) - 収束時間短縮版。2001年に IEEE 802.1w で初めて標準化された。 MSTP (Multiple STP) - VLAN対応版。2002年に IEEE 802.1s で初めて標準化された。

DEC版と以降の各種IEEE版STPの間に互換性はなく、同時に運用した場合は正常に動作しない。

IEEE版の各種STPはすべて、2014年以降はIEEE 802.1Qに統合されているIEEE 802.1Q-2022, Section 13. "Spanning tree protocols"。この中ではRSTPのアルゴリズムをベースに動作が規定されており、現在LAN接続で一般的に用いられる。RSTPでは、初期STPが木構造を構成するのに時間がかかる欠点を克服しており、(ネットワークの大きさにもよるが)40〜50秒かかる従来の収束時間を数秒に抑えることができる。

スパニングツリープロトコルの動作 STPでは、BPDU (bridge protocol data unit) と呼ばれるフレームをスイッチ間でやり取りすることで経路を決定する。なお、以降ではブリッジとスイッチとを同義語として用い、特に断りのない限りRSTPの動作に基づいて記述する。

まず、LAN内の全スイッチがBPDUを送り合い、木構造の根となるスイッチを「ルートブリッジ」として定める。さらに、このルートブリッジとのBPDUの交換で、各スイッチポートのルートブリッジまでの仮想的な距離を「パスコスト」として算出する。これらパスコストをもとに不要な経路を遮断する。

BPDUにはスイッチ固有のブリッジIDと前述のパスコストの累計値が含まれており、以下の手順で経路を決定するIEEE 802.1Q-2022, Section 13.4 RSTP overview。

サムネイル|300px|ポート分類の概観図: 図中のスイッチ枠内の数値はブリッジID。スイッチの各ポートのうちルートブリッジに近い側にRPが振られる。各セグメントa~fにつながるポートのうちRP以外でルートブリッジに近い側にDPが振られる。残ったものはBPとして遮断される。

各スイッチがBPDUを送り合う。BPDU内のブリッジID値の比較により、最小の値を持つものをルートブリッジとして決定する。 ルートブリッジが再びBPDUを送る。全スイッチは隣接スイッチから来たBPDU内のパスコスト値に自身のパスコストを加算してBPDUで通知する。これによりLAN内の全ポートのパスコストが算出される。 スイッチは、パスコストに基づいて自身の各ポートの役割を以下の3種類に分類するIEEE 802.1Q-2022, Section 13.12 "Port Role assignments"(図参照)。 ルートブリッジ以外の各スイッチにおいて、最短のパスコストを持つポートをルートポート(Root Port, RP)とし、ルートブリッジに向かう最も近いポートとして扱う。 各セグメントの両端ポートにおいて、短いパスコストのRPを持つスイッチ側のものを指定ポート(Designated Port, DP)とし、ルートブリッジから送り出す最も近いポートとして扱う。 その他は予備ポートとする。RPの予備をAP (Alternate Port)、DPの予備をBP (Backup Port)としてそれぞれ割り付ける。 予備ポート(AP・BP)を閉塞することでスパニング木を形成する。

ブリッジIDは、スイッチに設定された優先度とスイッチのMACアドレスで構成される。パスコストは、リンク速度に対応する値が決められており、一般に高速なほど小さい値を取る。この優先度とパスコストは、スイッチ設定として任意に設定変更できる。

BPDUのイーサネットフレーム書式を以下に示すIEEE 802.1Q-2022, Table 8-1. "C-VLAN and MAC Bridge component Reserved addresses", Table 8-15. "Standard LLC address assignment"。

宛先MAC 送信元MAC 長さ LLCヘッダ BPDUペイロード FCS6バイト01:80:C2:00:00:006バイト2バイト3バイト0x42420335バイト以上4バイト

上記のBPDUペイロードは、以下のようなパラメータを含むIEEE 802.1Q-2022, Section 14.1 BPDU Structure。

+ BPDUペイロード書式 サイズ データ 内容2バイト プロトコルID0x0000 固定1バイト バージョンIEEE 802.1Q-2022, Section 4.3 "Transmission of BPDUs"00: 初期STP, 02: RSTP, 03: MSTP, 04: SPB1バイト BPDUタイプ0x00: 初期STP設定, 0x02: RSTP/MSTP/SPB, 0x80: 初期STPトポロジ変更 (Topology Change Notification) 1バイト(8ビット)IEEE 802.1Q-2022, Section 14.4 "Encoding and decoding of STP Configuration, RST, MST, and SPT BPDUs" ビット7 (=0x80): (シェアードリンク環境でトポロジ変更通知に対してACK応答) ビット6 (=0x40): 同期提案に対して合意応答 ビット5 (=0x20): 送信ポートが転送状態 ビット4 (=0x10): 送信ポートが学習状態 ビット3-2: 送信ポートの役割IEEE 802.1Q-2022, Section 14.2.9 "Encoding of Port Role values"。0x0C: DP, 0x08: RP, 0x04: AP/BP ビット1 (=0x02): 対向スイッチへの同期提案 ビット0 (=0x01): トポロジ変更通知8バイト ルートブリッジのブリッジIDIEEE 802.1Q-2022, Section Section 14.2.5 "Encoding of Bridge Identifiers" 前半2バイトは優先度 (デフォルト0x8000)、後半6バイトはMACアドレス。4バイト パスコスト ルートブリッジまでの累計距離。詳細後述。8バイト 自身のブリッジID 前半2バイトは優先度 (デフォルト0x8000)、後半6バイトはMACアドレス。2バイト ポートID ポート番号。2バイト Message AgeBPDUがルートブリッジから送付されてからの時間。ホップ数に比例。1/256秒単位。2バイト Max Age障害発生扱いするまでのBPDU未受信時間。デフォルト20秒 (1/256秒単位で0x1400)。2バイト Hello TimeBPDU送信間隔。デフォルト2秒 (1/256秒単位で0x0200)。2バイト Forward Delayシェアードリンク環境でポート遮断解除を待機する時間。デフォルト15秒 (1/256秒単位で0x0F00)。

このうち、ユーザ設定可能な主なパラメータには以下のものがある。

タイマー 以下の各種タイマーが設けられており、標準値として最大7台のスイッチを経由する構成を元にした値が定められているIEEE 802.1Q-2022, Table 13-5 "Timer and related parameter values"。

Hello Time (ハロータイム) - BPDUを送信する間隔。標準値2秒。 Forward Delay (転送遅延タイム) - ポートの状態遷移にかかる時間。標準値15秒。4~30秒が設定可能。 Max Age (最大エージタイム) - BPDUを受信しなくなってから、障害が発生したと見なすまでの時間。標準値20秒。6~40秒が設定可能。

パスコスト ルートブリッジまでの距離(ルートブリッジへの近さ)を求めるため、リンク速度ごとに 1 ~ 200,000,000 のパスコスト値が任意に設定できる。 推奨値として下表に示す値が与えられており、リンク速度に反比例する値が規定されている。 世代によって2系統あり、初期STPでは16bit値、後発のRSTP/MSTPでは32bit値のパスコスト値が使用されることが多い。

+ パスコスト値の推奨値IEEE 802.1Q-2022, Table 13-4 "Port Path Cost values", NOTE 2 速度/帯域 16bit 32bit 1Tbps - 20 100Gbps - 200 10Gbps 2 2,000 1Gbps 4 20,000 100Mbps 19 200,000 10Mbps 100 2,000,000

スイッチ間のリンクは、以下2つの種別によってSTP動作が異なるIEEE 802.1Q-2022, Section 13.16.3 "Designated Port transition to Forwarding"。

シェアードリンク(Shared media LAN) - ハブを介してスイッチが複数接続しているもの。半二重通信など。 ポイントツーポイントリンク(point-to-point LAN) - ハブを介さず直接スイッチ同士が全二重通信で接続されているもの。

ポイントツーポイント接続では、1対1接続されたスイッチ2台が提案・合意フラグを用いてポート遮断解除や経路切替を高速に行っている。この方式が Rapid STP (RSTP)の名称の由来となっている。

一方で、シェアードリンク接続では、リンク上に未知スイッチが他に存在する可能性があり、1対1の合意だけで即座に遮断解除するとループ発生の恐れがある。そのため、指定ポート(DP)の遮断解除にはForward Delay (転送遅延)タイムによる待機時間が設けられているIEEE 802.1Q-2022, Figure 13-25 "Port Role Transitions state machine - DesignatedPort"。この待機動作は初期STPで規定されたもので、当初は提案・合意フラグは設けられていなかった。

脚注

関連項目 ブリッジ (ネットワーク機器) スイッチングハブ