【ネットワーク基礎・入門】STP/RSTPを復習のために少し深掘りしてみた(CCNA)(読了目安:5min~10min)

  • URLをコピーしました!
目次

はじめに

 こんにちは。ネットワークエンジニアの「だいまる」です。

 今回はネットワークの基本中の基本となるSpanning Tree Protocol(STP)と高速収束が可能なRapid-STP(RSTP)について、復習と深掘りを兼ねてまとめていきたいと思います。

 今回は、夏休みシーズンということもあり、家のセキュリティを少しでも高めるためのスマートホームに関する広告を貼り付けております。

STP(Spanning Tree Protocol)とは

 STP(Spanning Tree Protocol)とは、ループで形成されたL2ネットワーク上でループを発生させないために利用するプロトコルです。

 信頼性の高いネットワーク構築のためには、迂回路を考慮したネットワーク構成が必要となります。

 STPを使わない場合、L2NW上のSwitchは受信したIF以外のIFにMACアドレスの解決のためにARPリクエストを送ります。この連鎖が続くとブロードキャストストームが発生するのです。

 ※ブロードキャストストーム:ブロードキャストパケットが複製され、通信帯域を圧迫し輻輳を発生させること

①ARPリクエスト
①ARPリクエスト
②ARPリクエスト
②ARPリクエスト
②ARPリクエスト
②ARPリクエスト
③ARPリクエスト
③ARPリクエスト
④ARPリクエスト
④ARPリクエスト
④ARPリクエスト
④ARPリクエスト
ブロードキャストストーム
発生
ブロードキャストストーム 発生
Text is not SVG – cannot display

 このブロードキャストストームの防止にSTPを利用するのです。

STPを利用すると論理的にはサイクル(ループ・閉路)がなくなり、ブロードキャストストームが発生しないようになります。

①ARPリクエスト
①ARPリクエスト
②ARPリクエスト
②ARPリクエスト
②ARPリクエスト
②ARPリクエスト
ブロードキャストストーム
発生しない!!
ブロードキャストストーム 発生しない!!
物理的にはUP
論理的には利用不可
物理的にはUP…
Text is not SVG – cannot display

余談ですがスパニングツリーとはグラフ理論で出てくる用語の1つであり、全域木とも呼びます。

この全域木とはグラフに存在する頂点(ノード:ルータ・スイッチ)をすべて使った木(閉路:サイクルが存在しない)になります。

グラフ理論や組み合わせ最適化問題を勉強することでネットワークで利用されるアルゴリズムを深く理解することができると思います。

私が学生時代に使っていた教材を紹介させていただきますね。

STPの理解には欠かせないBPDUメッセージ

 STPの概要が理解できたところでBPDUメッセージについてまとめていきます。

BPDUメッセージは、STPに関連する情報をやり取りするためのメッセージです。

このメッセージは、STPのRoot IDやPath Cost、ブリッジIDなどが含まれています。

フィールド名Bit数用途
宛先48bitマルチキャストアドレス(0180.C200.000)
Protocol ID16bitSTP:0 RSTP:2
Version8bitSTP:0  RSTP:2
Message Types8bit・通常BPDU:0x00
・変更時BPDU:0x80
Flags8bitトポロジ変更や確認応答を表す情報
Root ID64bitルートブリッジのブリッジID
Path Cost32bitルートブリッジに到達するまでの累積コスト
Bridge ID32bitスイッチ自身のブリッジID
Port ID16bitポートプライオリティとポート番号
Message Age16bitBPDUをルートブリッジが作成してからのホップカウント
Max Age16bitBPDUの最大保持時間(デフォルト:20秒)
Hello Time16bitBPDUの送信間隔(デフォルト:2秒)
Forward Delay16bitListening/Learning状態にとどまる時間(デフォルト:15秒)

 このメッセージのフィールドをCMLのパケットキャプチャの機能を使って観てみましょう。

 上記のパケットの中身にもある通り、基本的な値は全て想定通りとなっています。

STPの構成を決めるのはブリッジIDとパスコスト

 次にSTPの構成を決定するブリッジIDとパスコストについて説明したいと思います。

ブリッジID

 ブリッジIDとは、STPで利用するL2SWのIDとなります。

このIDのフィールドは、下の図にもある通りPriorityが16bit・MACアドレスが48bitとなっております。

 このブリッジIDの最小値を持つL2SWがSTPのルートブリッジとなります。

ブリッジIDが同じ場合の優先度はプライオリティが小さいL2SWが優先度高となり、プライオリティも同一の場合はMACアドレスを比較し、小さいMACアドレスを持つ方が優先度が高くなります。

そのブリッジIDを構成するフィールドの1つであるPriorityはデフォルトが32768となっており、4096の倍数を指定する決まりとなっています。

ちなみに、先ほどのキャプチャしたパケットの中身にもブリッジIDは記載があるのでご確認いただければと思います。

また、Cisco IOS上での基本的な設定は、Priorityを変更することでルートブリッジを好きなL2SWに設定していきます。

(設定コマンド)
(config)#spanning-tree vlan <VLAN ID> priority <Priority値> ※4096の倍数

 ルートブリッジにしたいときは、このPriority値を「0」にします。

パスコスト

 パスコストはSTPの構成を決定するために利用するコストになります。

このパスコストは、帯域幅により決定されています。

帯域幅コスト値
10Gbps2
1Gbps4
100Mbps19
10Mbps100

 この値は、後ほどポート種別を決定するために利用する値になってきます。

Cisco IOSではIF設定の配下にcost値を入力する形になります。

(設定コマンド)
(config-if)#spanning-tree cost <cost値>

ポート種別

 ここまで説明してきたブリッジIDとパスコストにより、以下のポート種別が決められます。

ポート種別決定ルール
ルートポート(Root Port:RP)ルートブリッジへのパスコストが最小値となるポート
①非ルートブリッジのみ
②各ポートのパスコスト→送信元ブリッジID→送信元ポートID
指定ポート(Desginated Port:DP)ルートブリッジへのパスコストが最小値となるポート
①各リンクごとに1ポート選出
②各スイッチのパスコスト→送信元ブリ時ID→送信元ポートID
非指定ポート(Non Desginated Port:NDP)ルートポートと指定ポート以外のポート(ブロッキングポート)
※データ送受信はしないポート

下の例を使って説明していきます。

L2SW1
Priority:32768
L2SW1…
Gi0/1
Gi0/1
Gi0/0
Gi0/0
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/1
Gi0/1
L2SW2
Priority:4096
L2SW2…
L2SW3
Priority:32768
L2SW3…
L2SW4
Priority:32768
L2SW4…
DP
DP
DP
DP
パスコスト:4
パスコスト:4
DP
DP
RP
RP
DP
DP
RP
RP
RP
RP
BP
BP
パスコスト:4
パスコスト:4
パスコスト:8
パスコスト:8
Text is not SVG – cannot display

L2SW1がPriority 0として指定しているためルートブリッジとなります。

L2SW2(Gi0/1)とL2SW3(Gi0/0)はルートブリッジから最小コストとなるポートのため、ルートポート(RP)となります。

また、L2SW2(Gi0/0)とL2SW3(Gi0/1)は指定ポート(DP)となります。これは、L2SW4側がRPとなっているためです。

(L2SW2の状態確認)
L2SW2#show spanning-tree vlan 2

VLAN0002
  Spanning tree enabled protocol rstp
  Root ID    Priority    2
             Address     5254.0009.652d
             Cost        4
             Port        2 (GigabitEthernet0/1)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32770  (priority 32768 sys-id-ext 2)
             Address     5254.0007.55ed
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0               Desg FWD 4         128.1    P2p
Gi0/1               Root FWD 4         128.2    P2p


(L2SW3の状態確認)
L2SW3#show spanning-tree vlan 2

VLAN0002
  Spanning tree enabled protocol rstp
  Root ID    Priority    2
             Address     5254.0009.652d
             Cost        4
             Port        1 (GigabitEthernet0/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32770  (priority 32768 sys-id-ext 2)
             Address     5254.0009.be24
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0               Root FWD 4         128.1    P2p
Gi0/1               Desg FWD 4         128.2    P2p

L2SW4はGi0/0はルートポート(RP)となり、Gi0/1が非指定ポート(NDP)となります。

ただ、状態表示の時はAlternative Port(Altn)となっております。

(L2SW4の状態確認)
L2SW4#show spanning-tree vlan 2

VLAN0002
  Spanning tree enabled protocol rstp
  Root ID    Priority    2
             Address     5254.0009.652d
             Cost        8
             Port        1 (GigabitEthernet0/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32770  (priority 32768 sys-id-ext 2)
             Address     5254.0001.250c
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0               Root FWD 4         128.1    P2p
Gi0/1               Altn BLK 4         128.2    P2p

ポート状態

ポート種別をまとめた後は、各ポートの状態を説明していきたいと思います。

ポート状態説明
DisableShutdown状態
BlockingBPDUの受信のみでデータ転送はなし ※MACアドレス学習なし
ListeningBPDU送受信中(データ転送なし・ポート種別の選出・15秒) ※MACアドレス学習なし
LearningBPDU送受信中(MACアドレス学習済・データ転送なし・15秒)
Forwardingデータ転送・MACアドレス学習済

 ポート状態の確認は、先程の確認コマンドで確認ができます。

その上で、状態遷移はDebugログをみながら確認していきたいと思います。

今回使ったデバッグコマンドは以下のコマンドになります。

debug spanning-tree events
debug spanning-tree pvst+

上記デバッグログを入力後、以下の出力があります。

*Jul 24 10:23:31.939: set portid: VLAN0002 Gi0/0: new port id 8001
*Jul 24 10:23:31.939:  STP: PVST vlan 2 port Gi0/0 created, ext id CF7CE60
*Jul 24 10:23:31.939: STP: VLAN0002 Gi0/0 -> listening
*Jul 24 10:23:31.939: setting bridge id (which=3) prio 32771 prio cfg 32768 sysid 3 (on) id 8003.5254.0001.250c1
*Jul 24 10:23:33.253: STP: VLAN0002 heard root 32770-5254.0007.55ed on Gi0/0
*Jul 24 10:23:36.158: set portid: VLAN0002 Gi0/1: new port id 8002
*Jul 24 10:23:36.158:  STP: PVST vlan 2 port Gi0/1 created, ext id CFDE318
*Jul 24 10:23:36.158: STP: VLAN0002 Gi0/1 -> listening
*Jul 24 10:23:37.942: STP: VLAN0002 Topology Change rcvd on Gi0/0
*Jul 24 10:23:46.939: STP: VLAN0002 Gi0/0 -> learning
*Jul 24 10:23:51.158: STP: VLAN0002 Gi0/1 -> learning
*Jul 24 10:24:01.939: STP[2]: Generating TC trap for port GigabitEthernet0/0
*Jul 24 10:24:01.939: STP: VLAN0002 Gi0/0 -> forwarding
*Jul 24 10:24:06.158: STP[2]: Generating TC trap for port GigabitEthernet0/1
*Jul 24 10:24:06.158: STP: VLAN0002 Gi0/1 -> forwarding

 ちなみに、状態変化の時は「Topology Change Notification」のメッセージが送信されます。

その中身は、BPDUメッセージタイプが「0x80」となっています。

RSTP(Rapid-STP)とは

Rapid-STPとは名前の通りSTPの高速版となります。

STPと変わった点

 RSTPとSTPの変わった点はポート種別とポート状態になります。

ポート種別(変更点のみ)

 RSTPのポート種別は、以下の通り4つとなります。

ポート種別決定ルール
ルートポート(Root Port:RP)ルートブリッジへのパスコストが最小値となるポート
①非ルートブリッジのみ
②各ポートのパスコスト→送信元ブリッジID→送信元ポートID
指定ポート(Desginated Port:DP)ルートブリッジへのパスコストが最小値となるポート
①各リンクごとに1ポート選出
②各スイッチのパスコスト→送信元ブリ時ID→送信元ポートID
代替ポート(Alternate Port:AP)ルートポートのバックアップ用ポート(ルートポートのリンクダウン時に高速切替)
※データ送受信はしないポート
バックアップポート(Backup Port:BP)指定ポートのバックアップとなるポート(指定ポートダウン時に切替)
※DP/BPの違いは送信元ポートID(小さい方がDPとなる)

 大きく変わった点は非指定ポートがなくなり、代替ポート(Alternate Port)とバックアップポート(Backup Port)が追加されました。

 この2つは高速切替のためのバックアップポートとなり、ルートポートと指定ポート用の2つになります。

このポートにより障害検知した際に、再計算前に切り替えることが可能となります。

 RSTPの適用のためには、以下のコマンドを入力します。

(config)#spanning-tree mode rapid-pvst

このコマンドを入れネットワーク構成に変化が発生した際のログを見ていきたいと思います。

使った構成は先程と同じ四角形の構成ですが、ポートの役割が異なります。

以下の図のL2SW4のGi0/1が非指定ポートではなく、Alternate Port(AP)になりました。

L2SW1
Priority:32768
L2SW1…
Gi0/1
Gi0/1
Gi0/0
Gi0/0
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/1
Gi0/1
L2SW2
Priority:4096
L2SW2…
L2SW3
Priority:32768
L2SW3…
L2SW4
Priority:32768
L2SW4…
DP
DP
DP
DP
パスコスト:4
パスコスト:4
DP
DP
RP
RP
DP
DP
RP
RP
RP
RP
Alt
Alt
パスコスト:4
パスコスト:4
パスコスト:8
パスコスト:8
Text is not SVG – cannot display

 その上で、L2SW2ーL2SW4間のリンクで障害を起こしてみました。

L2SW1
Priority:32768
L2SW1…
Gi0/1
Gi0/1
Gi0/0
Gi0/0
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/0
Gi0/1
Gi0/1
L2SW2
Priority:4096
L2SW2…
L2SW3
Priority:32768
L2SW3…
L2SW4
Priority:32768
L2SW4…
DP
DP
DP
DP
パスコスト:4
パスコスト:4
DP
DP
RP
RP
DP
DP
RP
RP
RP
RP
Alt
Alt
パスコスト:4
パスコスト:4
パスコスト:8
パスコスト:8
Text is not SVG – cannot display

その結果、L2SW4のみデバッグログが吐き出され、Gi0/0→G0/1に遷移していることがわかります。

その遷移の時間は、リンクダウンが13:17:49.630だったのに対し、Gi0/0がDPになったのが13:17.53.499と約4秒弱で切り替わっていることがわかります。

(L4SWのデバッグログ)
*Jul 25 13:17:49.630: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/0, changed state to down
*Jul 25 13:17:50.630: %LINK-3-UPDOWN: Interface GigabitEthernet0/0, changed state to down
*Jul 25 13:17:53.499: RSTP(2): Gi0/0 rcvd info expired
*Jul 25 13:17:53.499: RSTP(2): updt roles, information on root port Gi0/0 expired
*Jul 25 13:17:53.499: RSTP(2): Gi0/1 is now root port
*Jul 25 13:17:53.499: RSTP(2): Gi0/0 blocked by re-root
*Jul 25 13:17:53.499: RSTP(2): Gi0/0 is now designated
*Jul 25 13:17:53.499: STP[2]: Generating TC trap for port GigabitEthernet0/1
*Jul 25 13:17:53.500: RSTP(2): transmitting a proposal on Gi0/0
*Jul 25 13:17:54.788: RSTP(2): transmitting a proposal on Gi0/0
*Jul 25 13:17:56.789: RSTP(2): transmitting a proposal on Gi0/0undebug
*Jul 25 13:17:58.790: RSTP(2): transmitting a proposal on Gi0/0 all
All possible debugging has been turned off

 このようにSTPではListening/Learningの状態で15秒ずつキープしていたのが、かなり高速に切り替わっていることがわかります。

 RSTPを使うことで障害による断時間を極力最小限にした上でネットワーク構築・運用ができるようになります。

最後に

 今回は、STP/RSTPの基本について、ざっくり復習と深掘りをしてみました。

次回の投稿では、作業時にSTPの迂回をどうするか考えたことがあるので、その話をしていきたいと思います。

  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次