STPには様々な実装の規格がありますが、Cisco機はPVST+, raipd PVST+, MSTの3つの中から実装を選ぶ必要があります。このページではPVST+について説明します。
概要
cisco機器がサポートするSTPには、PVST+, rapid-PVST, MSTが存在します。このページではPVST+についてまとめます。
mode | standard | uplink fast backbone fast |
describe |
---|---|---|---|
PVST+ | IEEE802.1d | 実装あり デフォルト無効 |
純粋なSTP(IEEE802.1d)ではなくPVST(vlan毎のSTP)です。PVSTに加え、uplink fast, backbone fastなどCisco独自の拡張機能も実装されています。 |
rapid PVST+ | IEEE802.1w | 実装あり デフォルト有効 |
vlan毎のRSTP(IEE802.1w)が実装されています。vlan毎にSTPインスタンスが存在するため、vlan数が増大するとSTP計算が追いつかなくなるデメリットがあります。 |
MST | IEEE802.1s | 実装あり デフォルト有効 |
複数vlanを1つのSTPインスタンスとして処理します。機能に関しては、rapid PVST+と同じです。 |
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Switch(config)# spanning-tree vlan <vlan> priorty <priority> Switch(config)# spanning-tree vlan <vlan> root primary Switch(config)# spanning-tree vlan <vlan> root secondary Switch(config-if)# spanning-tree [ vlan <vlan> ] cost <cost> Switch(config-if)# spanning-tree [ vlan <vlan>cost ] <cost> Switch(config-if)# spanning-tree [ vlan <vlan> ] port-priority <priority>
構成図
以下の物理構成で動作確認を行います。
[物理構成] f0/13-15+------------+f0/16-18 ┌--------------+ +--------------┐ │┌------------+ SW 2 +------------┐│ ││┌----------+ +----------┐││ │││ +---+-+-+----+ │││ f0/13-15│││ │││f0/19-21 │││f0/16-18 +---+-+-+----+f0/16-18 │││ +---+-+-+----+ | +--------------------------+ | | SW 1 +--------------------------+ SW 3 | | +--------------------------+ | +---+-+-+----+ │││ f0/13-15+---+-+-+----+ f0/19-21│││ f0/16-18│││ │││f0/19-21 │││ +---+-+-+----+ │││ ││└----------+ +----------┘││ │└------------+ SW 4 +------------┘│ └--------------+ +--------------┘ f0/13-15+------------+f0/19-21
shutdownコマンドおよびswitchport trunk allowed vlanコマンドを用いて、以下のような論理構成を再現します。
[vlan 30] f0/13-15+------------+f0/16-18 ┌--------------+ +--------------┐ │┌------------+ SW 2 +------------┐│ ││┌----------+ +----------┐││ │││ +---+-+-+----+ │││ f0/13-15│││ │││f0/19-21 │││f0/16-18 +---+-+-+----+ │││ +---+-+-+----+ | | │││ | | | SW 1 | │││ | SW 3 | | | │││ | | +---+-+-+----+ │││ +---+-+-+----+ f0/19-21│││ f0/16-18│││ │││f0/19-21 │││ +---+-+-+----+ │││ ││└----------+ +----------┘││ │└------------+ SW 4 +------------┘│ └--------------+ +--------------┘ f0/13-15+------------+f0/19-21 [vlan 60,90] f0/13-15+------------+f0/16-18 ┌--------------+ +--------------┐ │┌------------+ SW 2 +------------┐│ ││┌----------+ +----------┐││ │││ +------------+ │││ f0/13-15│││ │││f0/16-18 +---+-+-+----+ +---+-+-+----+ | | | | | SW 1 | | SW 3 | | | | | +---+-+-+----+ +---+-+-+----+ f0/19-21│││ │││f0/19-21 │││ +------------+ │││ ││└----------+ +----------┘││ │└------------+ SW 4 +------------┘│ └--------------+ +--------------┘ f0/13-15+------------+f0/19-21
[SW1] vlan 30,60,90 ! interface range FastEthernet 0/13-21 switchport mode dynamic desirable interface range FastEthernet 0/16-18 shutdown [SW2] vlan 30,60,90 ! interface range FastEthernet 0/13-21 switchport mode dynamic desirable interface range FastEthernet 0/19-21 switchport trunk allowed vlan 30 [SW3] vlan 30,60,90 ! interface range FastEthernet 0/13-15 shutdown [SW4] vlan 30,60,90 ! interface range FastEthernet 0/16-18 switchport trunk allowed vlan 30
設定全文は下記ファイルです。詳細設定は下記を参照ください。
Root Bridge Election
仕様説明
以下のコマンドで、Root Bridgeとしてのbrige priorityを定義する事ができます。priorityはvlan毎の定義が可能で、bridge priorityが小さいswitchが優先されます。
Switch(config)# spanning-tree vlan <vlan> priorty <priority>
より正確な言い方をすれば、bridge IDが最も小さいスイッチがRoot Bridgeとして選出されます。Bridge IDは以下のようなフォーマットで定義されていますので、bridge priorityが未定義の状態ではMACアドレスが最も小さいbridgeがRoot Bridgeとして選出されます。
| 4 | 12 | 48 bits | +----+------------+--------------------------------------------+ | | vlan id | mac address | +----+------------+--------------------------------------------+ <-----------------> bridge priority <--------------------------------------------------------------> bridge id
また、PVSTはvlan毎にtreeを作成しなければならない都合上、全てのvlanに対して一意のbridge IDを付与しなければなりません。そこで、bridge priorityの下位12bitはvlan idを使用する事でbridge IDの重複を避けています。そのため、bridge IDとして操作できるのは実質上位4bitとなるので、bridge priorityは4096の倍数で指定しなければなりません。
以下のコマンドを使用するとRoot Bridge, Backup Root Bridgeとなるbridge priorityを自動的に設定してくれます。
Switch(config)# spanning-tree vlan <vlan> root primary Switch(config)# spanning-tree vlan <vlan> root secondary
Root Bridge Election
以下のようにroot bridgeを定義します。
vlan | role | host |
---|---|---|
30,60 | Root Bridge | SW1 |
30,60 | Backup Root Bridge | SW2 |
90 | Root Bridge | SW1 |
90 | Backup Root Bridge | SW3 |
[SW1] spanning-tree vlan 30,60,90 priority 0 [SW2] spanning-tree vlan 30,60 priority 4096 [SW3] spanning-tree vlan 90 priority 4096
Root brigeはshow spanning treeコマンドにより確認する事ができます。このコマンドを実行すると、自身のbridge IDとRoot Bridgeの bridge IDが表示されます。もし、自身のIDとRoot BridgeのIDが一致していれば、そのスイッチはRoot Bridgeであると判断できます。
vlan 30の設定を確認するため、vlan 30についてのBridge IDを表示させます。SW1がRoot Bridge、SW2がBackup Root Bridgeである事が読み取れます。(vlan 60,90についての出力は省略します。)
SW1#show spanning-tree vlan 30 VLAN0030 Spanning tree enabled protocol ieee Root ID Priority 30 Address 001e.bee7.0880 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 30 (priority 0 sys-id-ext 30) Address 001e.bee7.0880 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Fa0/13 Desg FWD 19 128.15 P2p Fa0/14 Desg FWD 19 128.16 P2p Fa0/15 Desg FWD 19 128.17 P2p Fa0/19 Desg FWD 19 128.21 P2p Fa0/20 Desg FWD 19 128.22 P2p Fa0/21 Desg FWD 19 128.23 P2p SW1#
Port Election
仕様説明 Root Port Election
STPは、以下の手順で各ポートの役割を決定し、Blocking portからのフレームを転送を止めることでLayer 2のループを防止します。
- Root Bridgeを除く各スイッチについてRoot Brigeに最も近いポートをRoot Portとして選出します。
- 各リンクについてRoot Bridgeに近いポートをDesignated Portとして選出します。
- 上記で選ばれなかったポートをBlocking portとしてます
Root Portの選出について、もう少し詳しく考察しましょう。Root Brigeに近いかどうかの判断基準は以下の通りです。
- Root Bridgeへのcostが最も小さいポートを選出します。
- 上記が等しい場合は、対向機器のbridge idが最も小さいポートを選出します。
- 上記が等しい場合は、対向機器のport priorityが最も小さいポートを選出します。
vlan 30の構成を例にとり、Root Portの選出について考察しましょう。Root BridgeではないSW2, SW3, SW4はRoot Portを選出しなければなりません。SW3のRoot Bridge選定について詳しく説明すると以下の通りです。
- 全てのポートについてRoot Bridgeへのコストが等しいので、Root Portを選出できません。
- SW2とSW4のbridge idを比較するとSW2の方が小さいので、f0/16-18をRoot Portの候補とします。
- f0/16-18について対向のport priorityを比較するとf0/16が最も小さいので、f0/16をRoot Portとします。
Root Portとなるポートを図示すると以下の通りです。Root Portには”R”の記号を付与します。
[vlan 30] f0/13-15+------------+f0/16-18 ┌------------R+ +--------------┐ │┌------------+ SW 2 +------------┐│ ││┌----------+ (Backup) +----------┐││ │││ +---+-+-+----+ │││ f0/13-15│││ │││f0/19-21 ││Rf0/16-18 +---+-+-+----+ │││ +---+-+-+----+ | | │││ | | | SW 1 | │││ | SW 3 | | (Root) | │││ | | +---+-+-+----+ │││ +---+-+-+----+ f0/19-21│││ f0/16-18│││ │││f0/19-21 │││ +---+-+-+----+ │││ ││└----------+ +----------┘││ │└------------+ SW 4 +------------┘│ └------------R+ +--------------┘ f0/13-15+------------+f0/19-21
仕様説明 Designated Port Election
Designated Brigeに近いかどうかの判断基準もRoot Portと同じです。Cost, Bridge Priority, port priorityで判断します。
Designated Portとなるポートを図示すると以下の通りです。Designated Portには”D”の記号を付与します。SW2, SW4間リンクの判断がやや難しいですが、SW2とSW4を比較するとSW2の方がbridge idが小さいので、SW2に隣接したポートがDesignated Portになります。
[vlan 30] f0/13-15+------------+f0/16-18 ┌------------R+ +D------------┐ │┌------------+ SW 2 +D----------┐│ ││┌----------+ (Backup) +D--------┐││ │││ +---+-+-+----+ │││ f0/13-15DDD DDDf0/19-21 ││Rf0/16-18 +---+-+-+----+ │││ +---+-+-+----+ | | │││ | | | SW 1 | │││ | SW 3 | | (Root) | │││ | | +---+-+-+----+ │││ +---+-+-+----+ f0/19-21DDD f0/16-18│││ │││f0/19-21 │││ +---+-+-+----+ │││ ││└----------+ +D--------┘││ │└------------+ SW 4 +D----------┘│ └------------ R+ +D------------┘ f0/13-15+------------+f0/19-21
仕様説明 Blocking Port Election
Root PortにもDesignated Portにも選ばれなかったポートがBlocking Portとなります。vlan 30についてBlocking Portを図示すると以下の通りです。Designated Portには”×”の記号を付与します。
[vlan 30] f0/13-15+------------+f0/16-18 ┌--------------+ +--------------┐ │┌----------×+ SW 2 +------------┐│ ││┌--------×+ (Backup) +----------┐││ │││ +---+-+-+----+ │││ f0/13-15│││ │││f0/19-21 ××│f0/16-18 +---+-+-+----+ │││ +---+-+-+----+ | | │││ | | | SW 1 | │││ | SW 3 | | (Root) | │││ | | +---+-+-+----+ │││ +---+-+-+----+ f0/19-21│││ f0/16-18××× ×××f0/19-21 │││ +---+-+-+----+ │││ ││└--------×+ +----------┘││ │└----------×+ SW 4 +------------┘│ └--------------+ +--------------┘ f0/13-15+------------+f0/19-21
動作確認
各ポートの役割を確認するには、show spanning-treeコマンドを使用します。Role欄がRoot, Desg, Altnとなっているのが、それぞれRoot Port, Designated Port, Blocking Portです。(なお、RSTPではBlocking Portは、役割に応じてAlternative PortとBackup Portに分かれます。紛らわしい表記なのですが、STPにおけるBlocking PortはAltnと表示させてしまうようです。)
role欄表記 | 説明 |
---|---|
Root | Root Port |
Desg | Designated Port |
Altn | Blocking Port |
SW2#show spanning-tree vlan 30 <omitted> Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Fa0/13 Root FWD 19 128.15 P2p Fa0/14 Altn BLK 19 128.16 P2p Fa0/15 Altn BLK 19 128.17 P2p Fa0/16 Desg FWD 19 128.18 P2p Fa0/17 Desg FWD 19 128.19 P2p Fa0/18 Desg FWD 19 128.20 P2p Fa0/19 Desg FWD 19 128.21 P2p Fa0/20 Desg FWD 19 128.22 P2p Fa0/21 Desg FWD 19 128.23 P2p
Manipulate Port Election
仕様説明
STPは、costやport priorityを操作する事によってRoot portやDesignated portの位置を変更する事ができます。トラフィックがvlan毎に異なる経路を通るようにすれば負荷分散を実装する事ができます。(ただし、メンテナンス性が著しく低下するので、実践ではあまりお勧めはしません。)
以下のコマンドでSTPにおけるコストを定義すると、BPDUを受信する際に下記コマンドで定義されたコストを加算します。(BPDUを送信するタイミングではなくBPDUを受信するタイミングでコストを加算している事に注意して下さい。)
Switch(config-if)# spanning-tree [ vlan <vlan> ] cost <cost>
以下のコマンドでSTPにおけるport briorityを定義する事ができます。
Switch(config-if)# spanning-tree [ vlan <vlan> ] port-priority <priority>
cost manipulation
vlan 60について考えます。costやport priorityの特別な設定がなされていない場合、SW4のトラフィックはSW1へ直接転送されます。
[SW4] SW4#show spanning-tree vlan 60 <omitted> Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Fa0/13 Root FWD 19 128.13 P2p Fa0/14 Altn BLK 19 128.14 P2p Fa0/15 Altn BLK 19 128.15 P2p Fa0/19 Desg FWD 19 128.19 P2p Fa0/20 Desg FWD 19 128.20 P2p Fa0/21 Desg FWD 19 128.21 P2p
[vlan 60] f0/13-15+------------+f0/16-18 ┌------------R+ +D------------┐ │┌----------×+ SW 2 +D----------┐│ ││┌--------×+ (Backup) +D--------┐││ │││ +------------+ │││ f0/13-15DDD ××Rf0/16-18 +---+-+-+----+ +---+-+-+----+ | | | | | SW 1 | | SW 3 | | (Root) | | | +---+-+-+----+ +---+-+-+----+ f0/19-21DDD ×××f0/19-21 │││ +------------+ │││ ││└--------×+ +D--------┘││ │└----------×+ SW 4 +D----------┘│ └------------R+ +D------------┘ f0/13-15+------------+f0/19-21
このSW4からSW1へのトラフィックを、敢えてSW3, SW2経由にする方法について考えて見ます。SW4に以下のようなcost設定を投入します。
[SW4] interface range FastEthernet 0/13-15 spanning-tree vlan 60 cost 100
Root Portの位置が変わり、SW3, SW2経由になった事が読み取れます。また、この状態を図示すると以下のようになります。
[SW4] SW4#show spanning-tree vlan 60 <omitted> Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Fa0/13 Altn BLK 100 128.13 P2p Fa0/14 Altn BLK 100 128.14 P2p Fa0/15 Altn BLK 100 128.15 P2p Fa0/19 Root FWD 19 128.19 P2p Fa0/20 Altn BLK 19 128.20 P2p Fa0/21 Altn BLK 19 128.21 P2p SW4#
[vlan 60] f0/13-15+------------+f0/16-18 ┌------------R+ +D------------┐ │┌----------×+ SW 2 +D----------┐│ ││┌--------×+ (Backup) +D--------┐││ │││ +------------+ │││ f0/13-15DDD ××Rf0/16-18 +---+-+-+----+ +---+-+-+----+ | | | | | SW 1 | | SW 3 | | (Root) | | | +---+-+-+----+ +---+-+-+----+ f0/19-21DDD DDDf0/19-21 │││ +------------+ │││ ││└--------×+ +×--------┘││ │└----------×+ SW 4 +×----------┘│ └------------×+ +R------------┘ f0/13-15+------------+f0/19-21
port priority manipulation
vlan 60について考えます。SW2のRoot portは、現在f0/13になっています。このRoot portをf0/15に変更する方法について考えます。
[SW2] SW2#show spanning-tree vlan 60 <omitted> Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Fa0/13 Root FWD 19 128.15 P2p Fa0/14 Altn BLK 19 128.16 P2p Fa0/15 Altn BLK 19 128.17 P2p Fa0/16 Desg FWD 19 128.18 P2p Fa0/17 Desg FWD 19 128.19 P2p Fa0/18 Desg FWD 19 128.20 P2p SW2#
このような経路変更の方法は、cost調節とport priority調節の2通りの方法が可能です。もし、トポロジに大きな影響を与えたくないならば、port priorityを操作します。Root Bridgeは対向機器のport priorityを元に選出されますので、SW2のRoot Portを操作したいならば対向のSW1のport priorityを操作します。
[SW1] interface FastEthernet 0/14 spanning-tree vlan 60 port-priority 16 interface FastEthernet 0/15 spanning-tree vlan 60 port-priority 0
Root Portがf0/13からf0/15に変わった事を確認します。
[SW2] SW2#show spanning-tree vlan 60 <omitted> Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Fa0/13 Altn BLK 19 128.15 P2p Fa0/14 Altn BLK 19 128.16 P2p Fa0/15 Root FWD 19 128.17 P2p Fa0/16 Desg FWD 19 128.18 P2p Fa0/17 Desg FWD 19 128.19 P2p Fa0/18 Desg FWD 19 128.20 P2p SW2#
対向機器のbridge priorityやport priorityを確認したい場合はshow spanning-treeコマンドにdetailを付与する事で確認する事ができます。RootBridgeがどのように選ばれたかを分析したい場合はお勧めのコマンドです。
[SW2] SW2#show spanning-tree vlan 60 detail VLAN0060 is executing the ieee compatible Spanning Tree protocol Bridge Identifier has priority 4096, sysid 60, address 0017.0e3f.3380 Configured hello time 2, max age 20, forward delay 15 Current root has priority 60, address 001e.bee7.0880 Root port is 17 (FastEthernet0/15), cost of root path is 19 Topology change flag not set, detected flag not set Number of topology changes 12 last change occurred 00:02:00 ago from FastEthernet0/15 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 15 (FastEthernet0/13) of VLAN0060 is alternate blocking Port path cost 19, Port priority 128, Port Identifier 128.15. Designated root has priority 60, address 001e.bee7.0880 Designated bridge has priority 60, address 001e.bee7.0880 Designated port id is 128.15, 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 11, received 796 Port 16 (FastEthernet0/14) of VLAN0060 is alternate blocking Port path cost 19, Port priority 128, Port Identifier 128.16. Designated root has priority 60, address 001e.bee7.0880 Designated bridge has priority 60, address 001e.bee7.0880 Designated port id is 16.16, designated path cost 0 Timers: message age 1, forward delay 0, hold 0 Number of transitions to forwarding state: 0 Link type is point-to-point by default BPDU: sent 2, received 789 Port 17 (FastEthernet0/15) of VLAN0060 is root forwarding Port path cost 19, Port priority 128, Port Identifier 128.17. Designated root has priority 60, address 001e.bee7.0880 Designated bridge has priority 60, address 001e.bee7.0880 Designated port id is 0.17, designated path cost 0 Timers: message age 1, forward delay 0, hold 0 Number of transitions to forwarding state: 1 Link type is point-to-point by default BPDU: sent 2, received 789