【ざっくり概要】
STP(Spanning tree Protocol)は、冗長構成時にループ発生を防止するための機能。
どこかのポートをブロッキング(送受信不可)にしてループ発生を防止する。
SwitchでSTPを有効にすると、BPDU(Bridge Protocol Data Unit)を送受信する。
【L2スイッチでループが起きる理由】
L2スイッチは、「ブロードキャスト」を受信した場合、「ブロードキャスト」を受信したポート以外のポート全てにブロードキャストを転送します。
この動作を「フラッディング」と言う。
ループ構成になってる場合は、この「フラッディング」の動作により、
各L2スイッチは、ブロードキャストを受信→フラッディングを繰り返すため
ループが起きます。
【STPの種類】
IEEE802.1D STP
Per-VLAN spanning tree (PVST)
Per-VLAN spanning tree Plus(PVST+)
Rapid spanning tree Protocol(RSTP) IEE802.1W
Multiple spanning tree Protocol(MST) IEEE802.1S
【BPDU】
STPが有効なL2SWでは、BPDU(Bridge Protocol Data Unit)と呼ばれるフレームを送受信して、ループ検知や、上記のようなポートの役割を決めます。
代表スイッチからマルチキャストで送信されます。
BPDUには、大きく分けて2種類、コンフィグレーションBPDUには3種類あります。
・Configuration BPDU
→ループ検知やポート役割(Root,Designated,Blocking)、代表スイッチを決める
BPUD。代表スイッチが一定間隔(Hello time)で送信する。(Ciscoではデフォルトで2秒間隔)
【構成フィールド】
STP type,root path cost, root bridge identifier, local bridge identifier, max age, hello time, and forward delay.
・TCA(Topology Change Ack)BPDU
→TCN BPDUを受信時に、確認応答として返信するBPDU
・TC(Topology Change)BPDU
→TCN BPDUを受信した代表スイッチが、構成変更を各L2SWに通知するBPDUです。
・TCN(Topology Change Nortification) BPDU
→構成が変更された場合、変更を検知したL2スイッチから代表スイッチへ送信する。
構成変更を通知するBPDU
【ポートの役割】
・ルートポート(Root Port(RP)
→代表スイッチまたは上位スイッチと接続するポート。=代表スイッチ以外で利用される。各スイッチで、VLAN毎に1つだけ存在する。
つまり、1つのスイッチにVLAN10,20の2つがあった場合は、10,20それぞれ1つずつしかRPに選ばれない。
・指定ポート(Designated Port(DP)
→他のスイッチとBPDUの送受信を行うポート。
下位スイッチやデバイスと接続するポート。
ルートブリッジに一番近いポート=ルートブリッジは全部のポートが指定ポート
リンク上で1つしか存在しない。
・非指定ポート/Blockingポート(Non Designated Port(NDP)
→ルートポート、指定ポートに選ばれなかったポート。ブロッキング状態。
(BPDUの受信はします。=BPDU受信できないとポートの役割やループ検知できないので)
【ポートの状態遷移】
①ブロッキング状態
→STPが有効な状態だが、ループ発生防止のためにトラフィック転送をしない。
MACアドレステーブルの変更もできず、BPDUを受信するのみ。
L2SW起動時やポートリンクアップ時は、この状態からスタート。
最大経過時間:Max age(20秒)の間にBPDUを受信しない場合は、リスニング状態に遷移。
②リスニング状態
→ブロッキングから遷移してきた状態。BPDUの送受信が可能だが、トラフィック転送は不可。
代表スイッチ、ポートの役割を決める。 転送遅延時間15秒
③ラーニング状態
→BPDUを送受信し、MACアドレスをテーブルに変更が可能。
データフレームの転送は行わず、破棄します。転送遅延時間15秒
④フォワーディング状態
→BPDUを送受信し、データフレームの転送も行う。=実際に通信ができる状態
⑤ディセーブル状態
→STPが無効、ポートShut、リンクダウン状態
上記流れの通り、通信できるようになるまで、最大50秒かかります。
L2SWのポートランプは、フォワーディングになるまで、オレンジ点灯して
フォワーディング状態になると、緑に点滅します。
ブロッキング状態またはフォワーディング状態に落ち着くまでの時間を
「コンバージェンス(収束)」と呼ぶ。
【STPタイマー】
・Helloタイマー
→BPDUの送信間隔 デフォルト2秒
→Hello timeは、下記コマンドで変更可能。
spanning-tree vlan <vlan-id> hello-time<hello-time>(1~10秒)
・最大経過時間
→受信したBPDUを保持する時間 デフォルト20秒
→最大経過時間は、下記コマンドで変更可能。
spanning-tree vlan <vlan-id> max-age <max-age time>
・転送遅延時間
→リスニング状態とラーニング状態を継続する時間 デフォルト15秒
転送遅延時間は、下記コマンドで変更が可能
spanning-tree vlan <vlan-id> forward-time <forward-time>(4~30秒)