# スパニングツリープロトコル(STP)
## 概要
ネットワーク内にループ構成が生じることを防止することで[[ブロードキャストストーム]]を回避する古典的手法。
具体的には、ループ構成となった経路の一部をフレームが流れないようブロックすることで、ループ構成を回避した論理的なネットワークを構築する。このとき、ネットワークはあるひとつのブリッジを根(ルート)とする木(ツリー)構造をなす。
また、わざとループ構成にしたうえでSTPを有効にすることで、障害時に自動的に迂回路経路に切り替わるようになり、経路の冗長性を確保できるという利点もある。
## 詳細
### 基本的な仕組み
1. ルートブリッジの選出
- ツリーの根となるスイッチである**ルートブリッジ**を選出する。これは最小のブリッジID(プライオリティ+[[MACアドレス]])を持つ機器が選ばれる。
2. パスコストの計算
- 各スイッチのポート毎に、ルートブリッジまでの**パスコスト**(通信経路のコスト)を計算する。パスコストは一般的にリンクの帯域幅に基づいて計算され、帯域幅が大きいほどコストは低くなる。
3. ポートの役割の決定
- 各スイッチは自身の各ポートに対してルールに従って以下の役割のうちいずれかを割り当てる:
- **ルートポート**
- そのスイッチにおいてルートブリッジまでの経路コストが最も小さいポート。
- スイッチごとに必ず1つだけ存在する(ルートブリッジ自身は除く)。
- **代表(指定)ポート**
- 各セグメントごとに必ず1つ選ばれるポート。
- 基本的にはパスコストが小さい方のポートが代表ポートとなる。
- **ブロッキング(非指定)ポート**
- 上記のいずれにも当てはまらないポート。
- ループ防止のために転送を行わず、BPDUの受信だけを行う。
4. BPDUの交換
- スイッチは**ブリッジプロトコルデータユニット**(Bridge Protocol Data Unit, **BPDU**)という特別なメッセージを一定時間ごとに交換しネットワークのトポロジ情報を共有する。
- BPDUには、ルートの識別子、パスコスト、送信スイッチの識別子などが含まれる。
5. アクティブトポロジの維持
- ネットワークの変更があった場合はトポロジを再計算し、ループフリーな状態を維持する。
### デメリットと改良プロトコル
STPには、以下のデメリットや問題があり、それらに対応するための改良プロトコルが存在する。
- PCを接続しても経路確定まで数十秒の待ち時間がかかる。
- **RSTP**(Rapid STP)は通信経路の切り替わり時間が短くなるよう改良されており、かかる時間は数秒ほどに短縮される。
- [[VLAN]]を構成する環境では上手く対応できない。
- **MSTP**(Multiple STP)は複数のVLAN毎にスパニングツリーを構成するプロトコルとして改良されている。
## 関連ノート
- [[📘『マスタリングTCP/IP 入門編』]]
- [[📘『Pythonで動かしながら学ぶコンピュータネットワーク』]]
## 関連リンク
- [スパニングツリープロトコル - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%91%E3%83%8B%E3%83%B3%E3%82%B0%E3%83%84%E3%83%AA%E3%83%BC%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB)