[[CISCO入門]] #setlinebreak(on) バージョン: &Version; &br; オンラインユーザー数: &online; 閲覧数表示 本日/トータル: &counter(today); / &counter(total); &br; 最終更新:&lastmod();&br; *RSTPとは [#mfcab731] IEEE802.1w標準仕様 Rapid Spanning Tree protocol **ポートの役割 [#p27c9aa4] 以下の4種類ある。 -ルートポート(RP:Root Port) ルートブリッジへの最短パスのポート -指定ポート(DP:Designated Port) セグメントへのBPDUを転送するポート -ブロッキング状態のポート 代替ポート(AP:Alternate port)他のスイッチから上位のBPDUを受信し、ルートポートがダウンした時に代替となるポート バックアップポート(BP:Backup Port)自スイッチから上位のBPDUを受信し、指定ポートがダウンした時にバックアップとなるポート -ポートの役割決定時に比較する値 +パスコスト +ブリッジID +ポートID -ポートの状態 RSTPでは3種類のポート状態を定義している。 ,STP,RSTP ,フォワーディング,フォワーディング(転送) ,ラーニング,ラーニング(学習) ,リスニング,ディスカーディング(破棄) ,ブロッキング,ディスカーディング -エッジポート ループ構成するポートではないspanning-tree portfast適応ポート BPDUを受信するとRSTP標準ポートへ移行する -リンクタイプ 全二重ポートはポイントツーポイント 半二重ポートは共有ポートとみなされます -プロポーザルとアグリーメント スイッチ間でプロポーザルとアグリーメントを交換することにより タイマーに依存せずにポートの役割を高速に決定します。 **STPのBPDUタイプ [#n117c2c1] -コンフィギュレーションBPDU トポロジの維持に使用される。 常時、ルートからエッジ方向へ2秒に1回送信 -TCN BPDU(トポロジ変更通知BPDU) トポロジ変更を検出したルート以外のスイッチからルートへ送信される **PVST+/PVRST+ [#c493d0d8] -CST(Common Spanning Tree) VLAN数に関係なくスイッチ接続のネットワーク全体で1つのSTPトポロジを構成する -PVST+/PVRST+ PVST+(Per VLAN Spanning Tree)VLAN毎に異なるIEEE802.1DのSTPインスタンスを生成します。 PVRST+(Per VLAN Rapid Spanning Tree)RSTPのCISCO拡張機能であり、VLAN毎に異なるIEEE802,1wのSTPインスタンスを生成する。 VLAN単位でSTPの計算を行う為、CPUの負荷は高くなる。 -IEEE802.1s MSTP(Multiple Spanning Tree Protocol)では複数のVLANをインスタンス単位にグループ化して STP計算を行う為、PVST+やPVRST+よりスイッチのCPU負荷を軽減できます。 IEEE802.1s MSTPはIEEE802.1w RSTPに基づくため、RSTPの高速コンバージェンスも有効になります。 **MSTPの設定例 [#t52cd0a3] ,R(config)#spanning-tree mst configuration,MST設定モードへ移行 ,R(config-mst)#name MST-Cisco,MST領域名(同一インスタンスポリシー識別子)設定 ,R(config-mst)#revision 1,リビジョン番号(情報の新しさを表す番号) ,R(config-mst)#instance 1 vlan 100,VLAN番号群をインスタンスにマッピング ,R(config-mst)#instance 2 vlan 300, ,R(config)#spanning-tree mode mst,STPの動作をMSTPモードに変更 -RSTPの場合 ,R1(config)#spanning-tree vlan 100 root primary,ルートブリッジ設定、ブリッジプライオリティが32768→24576に変更、予備のsecondaryもある ,R1(config)#spanning-tree vlan 200 primary 4096,任意のプライオリティを入力 -MSTの場合 ,R1(config)#spanning-tree mst 1 root primary,インスタンスをルートブリッジ設定 ,R1(config)#spanning-tree mst 2 priority 4096,任意のプライオリティを入力 **show での出力結果 [#q9046a9e] R1#show spanning-tree MST0 Spanning tree enabled protocol mstp Root ID Priority 32768 Address 0019.aabe.bf80 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32768 (priority 32768 sys-id-ext 0) Address 0019.aabe.bf80 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Po1 Desg FWD 200000 128.488 P2p MST1 Spanning tree enabled protocol mstp Root ID Priority 24577 Address 0019.aabe.bf80 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 24577 (priority 24576 sys-id-ext 1) Address 0019.aabe.bf80 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Po1 Desg FWD 200000 128.488 P2p MST2 Spanning tree enabled protocol mstp Root ID Priority 4098 Address 0019.aabe.bf80 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 4098 (priority 4096 sys-id-ext 2) Address 0019.aabe.bf80 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Po1 Desg FWD 200000 128.488 P2p R1# R2#show spanning-tree MST0 Spanning tree enabled protocol mstp Root ID Priority 32768 Address 0019.aabe.bf80 Cost 0 Port 488 (Port-channel1) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32768 (priority 32768 sys-id-ext 0) Address 0019.aabe.c180 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Po1 Root FWD 200000 128.488 P2p MST1 Spanning tree enabled protocol mstp Root ID Priority 24577 Address 0019.aabe.bf80 Cost 200000 Port 488 (Port-channel1) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32769 (priority 32768 sys-id-ext 1) Address 0019.aabe.c180 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Po1 Root FWD 200000 128.488 P2p MST2 Spanning tree enabled protocol mstp Root ID Priority 4098 Address 0019.aabe.bf80 Cost 200000 Port 488 (Port-channel1) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 32770 (priority 32768 sys-id-ext 2) Address 0019.aabe.c180 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Po1 Root FWD 200000 128.488 P2p R2# *Cisco STP Toolkit [#zf0ff7a0] STP環境の最適化やトラブルシューティングに役立つツールで 7つで構成されています。 ***PortFast [#de635d7e] スイッチに接続されたノードが直ぐに通信を開始出来る。 PortFast機能はSTP計算が回避されて即座にフォワーディングに以降します。 ループを引き起こす可能性があるので注意が必要です。 RSTP環境ではエッジポートとして認識され、BPDUを受信すると即座に エッジポートが解除されます。 -PortFastを全てに適応 R2(config)#spanning-tree portfast default %Warning: this command enables portfast by default on all interfaces. You should now disable portfast explicitly on switched ports leading to hubs, switches and bridges as they may create temporary bridging loops. -PortFastをIF単位設定 R2(config-if)#spanning-tree portfast %Warning: portfast should only be enabled on ports connected to a single host. Connecting hubs, concentrators, switches, bridges, etc... to this interface when portfast is enabled, can cause temporary bridging loops. Use with CAUTION %Portfast has been configured on FastEthernet2/0/1 but will only have effect when the interface is in a non-trunking mode. ***BPDUガード(BPDU Guard) [#w86ab110] ''BPDUガードはPortFastポートでBPDUを受信した場合ポートを無効(err-disabled)'' にしてループが発生するのを回避します。 CISCOではPortFastポートにBPDUガードを設定することを推奨しています。 -BPDUGuardをグローバルで有効化 R2(config)#spanning-tree portfast bpduguard default -BPDUGuardをIF単位で有効化 R2(config-if)#spanning-tree bpduguard enable R2#show spanning-tree summary totals Switch is in mst mode (IEEE Standard) Root bridge for: none Extended system ID is enabled Portfast Default is disabled ←スイッチ全に対して非トランクポートでPortFastが無効 PortFast BPDU Guard Default is enabled ←スイッチ全に対して非トランクポートでBPDUGuardが有効になっている Portfast BPDU Filter Default is disabled Loopguard Default is disabled EtherChannel misconfig guard is enabled UplinkFast is disabled BackboneFast is disabled Configured Pathcost method used is short (Operational value is long) Name Blocking Listening Learning Forwarding STP Active ---------------------- -------- --------- -------- ---------- ---------- 3 msts 0 0 0 3 3 R2# ***BPDUフィルタ(BPDUFilter) [#wd7dc505] ''BPDUフィルタはPortFastポートでのBPDUの送信を抑制します'' BPDUフィルタもスイッチ全体に対してグローバルで有効化することも IF単位で有効化することも出来ます。 -BPDUFilterを全てに適応 R1(config)#spanning-tree portfast bpdufilter default -BPSUFilterをIF単位設定 R1(config-if)#spanning-tree bpdufilter enable ***ルートガード(RootGuard) [#e9087ba2] ''ルートガードは管理外スイッチがルートブリッジになるのを抑制する'' ルートガードはIF単位で有効にする。 ルートガードを設定するとルートガードを適用したポートで上位BPDUを 受信してもroot-inconsistent状態になりポートがブロックされることから、上位BPDUは無視されます。 これにより既存のSTPトポロジは保護され、通信断の問題や予期しない場所がブロックされる事態は発生しません。 R1(config-if)#spanning-tree guard root ルートガード設定ポートは上位BPDUを受信するとroot-inconsistent状態となり 上位BPDUを破棄し、既存のトポロジを保護します。 ***ループガード(LoopGuard) [#l0d75eed] ループガードは単一方向リンク障害によるBPDUが受信出来ない場合に代替ポートや ルートポートが指定ポートになりSTPループが発生するのを防ぎます。 ''ループガードはルートガードとは同時に利用出来ません'' -グローバルにループガードを有効化 R1(config)#spanning-tree loopguard default -IFにループガードを有効化 R1(config-if)#spanning-tree guard loop ***UplinkFast・BackboneFast [#f393cd1c] UplinkFast及びBackboneFast機能はIEEE802.1w RSTPに含まれています。 これら二つの機能はRSTP下では使用されません。 UplinkFastはNDPを持つスイッチにUplinkFastを設定すると直接接続の アップリンク障害が発生した時に5秒以内にNDPをフォワーディング状態に切り替える。 BackboneFastはNDPを持つスイッチの間接リンク障害時に経路を高速に切り替える。 ループを構成するすべてのスイッチにBackboneFastを設定すると、NDPを持つスイッチの 間接リンク上の障害時にNDPを直ぐにリスニング状態に移行し、30秒程度で経路を切り替えます。 ***UDLD [#a9762bbb] UDLD(UniDirectional Link Detection:単一方向リンク検出) -UDLDの有効化 Globalの場合は光ポートのみ有効 IFの場合は指定のIFに有効、光以外も可能。 R1(config)#udld enable -IFのリセット R1#udld reset -一覧 ,,BPDUガード,BPDUフィルタ,ルートガード,ループガード,UDLD ,概要,ポートファーストを指定したポートにBPDUを送信する機器を接続するのを防ぐ,BPDUを送信しない,ルートブリッジになるのを防ぐ,BPDU喪失によるループ防止,BPDU喪失にようループ防止 ,Globalでの動作,ポートファーストポートで自動有効,ポートファーストポートで自動有効,-,-(フォワーディング状態に移行しないようにする),Globalでは光のみ ,IFでの動作,ポートファーストが指定されていないポートでも有効化,ポートファーストが指定されていないポートでも有効化、BPDUの送信も受信もしない,-,-,IFでは指定IF(光以外も可能) ,発動条件,有効ポートでBPDU受信,有効ポートでBPDU受信,有効にしたポートでBPDUを受信,指定ポート以外で(MAX Ageを超えて)BPDUを受信しない,UDLDエコーメッセージを受信しない ,動作,エラーディセーブル(データ、BPDU送受信不可),Blobal:BPDU受信時はフィルター停止、IF時はBPDU破棄,ルート不整合Loop Inconsistent(データ不可、BPDU受信のみ),ルート不整合Loop Inconsistent(データ不可、BPDU受信のみ),エラーディセーブル(データ、BPDU送受信不可) ,STPによる自動復旧,-,-,上位からBPDUを受信しなくなると,上位からBPDUを受信すると,- ,その他,-,IF設定はPORTのSTP無効,-,-,STPに依存しない ※BPDUフィルタリングは 不要なBPDUをフィルタリングする機能で、BPDUフィルタリングが有効になっているポートからはBPDUを送信しなくなります。 BPDUガードは BPDUを受信した際にループを防ぐためにポートを使用できなくする機能で、通常時のBPDUの送信を止めるわけではありません。 なお、両方を設定した場合はBPDUフィルタリングが優先されます。 *おまけ [#z424ac07] Catalyst2950で1対1で直結した時、BPDUガードが機能しませんでした。 どうやら、Catalyst2950は1ポートだけ接続した時にはBPDUを出さないようです。 STP 初期値 STP 初期値 ┌────┐ ┌────┐ │ SW1 ├──────┤ SW2 │ └────┘ └────┘ BPDUGUARD -SW2で動作を見るとsent 0になっている SW2#show spanning-tree detail VLAN0001 is executing the ieee compatible Spanning Tree protocol Bridge Identifier has priority 32768, sysid 1, address 000d.bca2.0500 Configured hello time 2, max age 20, forward delay 15 Current root has priority 32769, address 000d.28b6.49c0 Root port is 11 (FastEthernet0/11), cost of root path is 19 Topology change flag not set, detected flag not set Number of topology changes 0 last change occurred 00:09:51 ago Times: hold 1, topology change 35, notification 2 hello 2, max age 20, forward delay 15 Timers: hello 0, topology change 0, notification 0, aging 300 Port 11 (FastEthernet0/11) of VLAN0001 is forwarding Port path cost 19, Port priority 128, Port Identifier 128.11. Designated root has priority 32769, address 000d.28b6.49c0 Designated bridge has priority 32769, address 000d.28b6.49c0 Designated port id is 128.7, designated path cost 0 Timers: message age 2, forward delay 0, hold 0 Number of transitions to forwarding state: 1 Link type is point-to-point by default BPDU: sent 0, received 295 -どうやらBPDUを抑制する機能が標準で搭載されているらしい 下のコマンドは消すことが出来ない。 ! spanning-tree mode pvst no spanning-tree optimize bpdu transmission ! -結局 Catalyst2950がBPDUを自動的に抑制するのが問題らしいので、 SW2の下にSW3を置いてみた。 すると見事にerr-disabledになった。 STP 初期値 STP 初期値 STP 初期値 ┌────┐ ┌────┐ ┌────┐ │ SW1 ├──────┤ SW2 ├────┤ SW3 │ └────┘ └────┘ └────┘ BPDUGUARD -確認 Switch#show interfaces status Port Name Status Vlan Duplex Speed Type Fa0/1 notconnect 1 auto auto 10/100BaseTX ~中略~ Fa0/10 notconnect 1 auto auto 10/100BaseTX Fa0/11 err-disabled 1 auto auto 10/100BaseTX -receivedカウンターも増えた Switch#show spanning-tree detail VLAN0001 is executing the ieee compatible Spanning Tree protocol Bridge Identifier has priority 32768, sysid 1, address 000d.bca2.0500 Configured hello time 2, max age 20, forward delay 15 We are the root of the spanning tree Topology change flag not set, detected flag not set Number of topology changes 1 last change occurred 00:03:00 ago from FastEthernet0/11 Times: hold 1, topology change 35, notification 2 hello 2, max age 20, forward delay 15 Timers: hello 1, topology change 0, notification 0, aging 300 Port 11 (FastEthernet0/11) of VLAN0001 is forwarding Port path cost 19, Port priority 128, Port Identifier 128.11. Designated root has priority 32769, address 000d.bca2.0500 Designated bridge has priority 32769, address 000d.bca2.0500 Designated port id is 128.11, designated path cost 0 Timers: message age 0, forward delay 0, hold 0 Number of transitions to forwarding state: 1 Link type is point-to-point by default BPDU: sent 108, received 3 まぁーCatalyst2950で検証中に失敗したらこんなネタを思い出してみるのも良いかも。 CISCOに問い合わせたわけじゃないので、確証はありませんがメモとして。 **補足2 [#c26c1603] 細かい仕様がわからないのだが2台でSTPテーブルが無い状態で接続すると 高確率でERR-DISになる。 しかしならない時もある、Catalyst2950のBPDUを飛ばすタイミングによるので、詳細は不明。 確認した範囲ではルートブリッジが切り替わるBPDUを受け取るとようやくSENDを投げる。