STPの基本動作
・スイッチ3台でスパニング・ツリーを動かし,以下の状態になっていることを確認する
・リンクが切れたとき,経路が切り替わるのを確認する
ネットワーク構成(画像を別ウインドウで表示)
SwitchAのコンフィグ
!
version 12.1
no service pad
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname SwitchA
!
spanning-tree mode pvst ←デフォルトでSTP(PVST)が動いている
no spanning-tree optimize bpdu transmission
spanning-tree extend system-id
!
interface FastEthernet0/1
no ip address
!
interface FastEthernet0/3
no ip address
!
interface Vlan1
no ip address
no ip route-cache
shutdown
!
line con 0
line vty 0 4
login
line vty 5 15
login
!
end
SwitchBのコンフィグ
!
version 12.1
no service pad
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname SwitchB
!
spanning-tree mode pvst ←デフォルトでSTP(PVST)が動いている
no spanning-tree optimize bpdu transmission
spanning-tree extend system-id
!
interface FastEthernet0/1
!
interface FastEthernet0/2
!
interface Vlan1
no ip address
no ip route-cache
shutdown
!
line con 0
line vty 0 4
login
line vty 5 15
login
!
end
SwitchCのコンフィグ
!
version 12.1
no service pad
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname SwitchC
!
spanning-tree mode pvst ←デフォルトでSTP(PVST)が動いている
spanning-tree extend system-id
!
!
interface FastEthernet0/2
switchport mode access
no ip address
!
interface FastEthernet0/3
switchport mode access
no ip address
!
interface Vlan1
no ip address
shutdown
!
!
line con 0
line vty 0 4
login
line vty 5 15
login
!
end
確認
レイヤー2レベルで,ループ防止と冗長化を実現するのがスパニング・ツリー(STP)です。
デフォルトでは,何も設定しなくてもCatalystでSTPが動作するようになっています。
どんな動作をするのか見てみましょう。

●スパニング・ツリーのしくみ
スパニング・ツリーでは,スイッチ同士がBPDUという制御情報をやりとりして,ループのないツリー構成を作ります。
ツリー構成を作るときの流れは,以下のようになります。

1.ルート・ブリッジを決める
2.スイッチからルート・ブリッジまで最短で行けるポート(ルート・ポート)を選ぶ
3.LANセグメントからルート・ブリッジまで最短で行けるポート(代表ポート)を選ぶ
4.ルート・ポートにも代表ポートにもならなかったポートを遮断する

各スイッチが以上の動作を実行することで,ループのないツリー構成ができます。
専門用語が出てきました。確認しておきましょう。

・ルート・ブリッジ…ツリー構成の根(ルート)になるスイッチ
・パス・コスト………ルート・ブリッジまでの「近さ」を表す値
・ルート・ポート……スイッチからルート・ブリッジに一番近いポート
・代表ポート………LANセグメントからルート・ブリッジに一番近いポート

●ルート・ブリッジと各ポートの状態を確認する
3台のスイッチを三角形に接続したときの動作の例を見てみましょう。
シスコのCatalystは,デフォルトで,以下のコマンドが入っています。

spanning-tree mode pvst

これは,PVST(per VLAN spanning tree)の機能をオンにするコマンドです。
PVSTは,VLANごとにスパニング・ツリーを実行する機能です。
VLANごとにスパニング・ツリーを指定しないのであれば,通常のスパニング・ツリーと動作は同じになります。

では,ツリー構成の根となるルート・ブリッジを確認します。
show spanning-treeコマンドを入力すると,スパニング・ツリーの状態が表示されます。
今回は,ルート・ブリッジと,各ポートのステータス/役割に注目します。

最初にSwitchAを見てみましょう。

SwitchA#show spanning-tree

VLAN0001
 Spanning tree enabled protocol ieee
 Root ID  Priority  32769
        Address   000a.8a0d.4180
        Cost    19
        Port    1 (FastEthernet0/1)
        Hello Time  2 sec Max Age 20 sec Forward Delay 15 sec

 Bridge ID Priority  32769 (priority 32768 sys-id-ext 1)
        Address   000a.8a7e.ebc0
        Hello Time  2 sec Max Age 20 sec Forward Delay 15 sec
        Aging Time 300

Interface       Role Sts Cost     Prio.Nbr   Type
---------------- ---- --- --------- -------- ------------------
Fa0/1         Root FWD 19      128.1   P2p
Fa0/3         Desg FWD 19      128.3   P2p


スイッチ同士でBPDUを交換し,BPDUに記述されているブリッジID値が最も小さいスイッチがルート・ブリッジになります。
ブリッジIDは,「プライオリティ」と「MACアドレス」の二つの値によって成り立っています。
プライオリティは,何も設定しなければ32769という値がデフォルトで入ります。
もう一方のMACアドレスは,スイッチが確保している最小のMACアドレスになります。

そして,下に表示されたのが,スイッチのポートの状態です。
「Sts」の項目にあるのが,ポートのステータスで,「FWD」はフォワーディング(転送可能)を表しています。
「Role」の項目にあるのが,ポートの役割で,Fa0/1がルート・ポート(Root)で,Fa0/3が代表ポート(Desg)になっていることがわかります。

次に,SwitchBを調べてみます。

SwitchB#show spanning-tree
00:21:00: %SYS-5-CONFIG_I: Configured from console by console

VLAN0001
 Spanning tree enabled protocol ieee
 Root ID  Priority  32769
        Address   000a.8a0d.4180
        This bridge is the root
        Hello Time  2 sec Max Age 20 sec Forward Delay 15 sec

 Bridge ID Priority  32769 (priority 32768 sys-id-ext 1)
        Address   000a.8a0d.4180
        Hello Time  2 sec Max Age 20 sec Forward Delay 15 sec
        Aging Time 300

Interface        Role Sts Cost    Prio.Nbr  Type
---------------- ---- --- --------- -------- --------------------
Fa0/1         Desg FWD 19      128.1   P2p
Fa0/2         Desg FWD 19      128.2   P2p


表示の中ほどに「This bridge is the root」とあるのがわかります。
つまり,このスイッチがルート・ブリッジであることを表しています。
ポートのステータスを見ると,このSwitchBも二つともフォワーディングになっていることがわかります。
ポートの役割は,Fa0/1とFa0/2が代表ポート(Desg)になっています。

SwitchCも調べてみましょう。

SwitchC#show spanning-tree

VLAN0001
 Spanning tree enabled protocol ieee
 Root ID  Priority  32769
        Address   000a.8a0d.4180
        Cost    19
        Port    2 (FastEthernet0/2)
        Hello Time  2 sec Max Age 20 sec Forward Delay 15 sec

 Bridge ID Priority  32769 (priority 32768 sys-id-ext 1)
        Address   000e.d7f6.9180
        Hello Time  2 sec Max Age 20 sec Forward Delay 15 sec
        Aging Time 300

Interface       Role Sts Cost     Prio.Nbr   Type
---------------- ---- --- --------- -------- ---------------------
Fa0/2         Root FWD 19       128.2    P2p
Fa0/3         Altn BLK 19       128.3    P2p


ポートのステータスを見ると,Fa0/3が「BLK」となっており,ブロッキング(転送不可)になっています。
役割の「Altn」というのは,「代替ポート」という意味です。

3台のスイッチのブリッジIDを見ると,プライオリティは皆32769で同じです。
そのため,スイッチのMACアドレスが一番小さかったSwitchBがルート・ブリッジに決まったわけです。
これで,各スイッチの状態が,冒頭の図のようになっていることが確認できました。

●経路の切り替わりを確認する
次に,障害時に経路が切り替わることを確認します。
SwitchAとSwtchBがつながるケーブルをわざと抜きます。
そこで,SwitchCのブロッキング・ポートがフォワーディングになる様子を見てみます。
SwitchCに動作の様子を表示させるために,debug spanning-tree eventsコマンドを入力します。

SwitchC#debug spanning-tree events
Spanning Tree event debugging is on


この状態で,SwitchAとSwtchBがつながるケーブルを抜きます。

00:23:06: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:08: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:10: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:12: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:14: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:16: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:18: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:20: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:22: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:24: STP: VLAN0001 heard root 32769-000a.8a7e.ebc0 on Fa0/3
00:23:24: STP: VLAN0001 Fa0/3 -> listening
00:23:24: STP: VLAN0001 Topology Change rcvd on Fa0/3
00:23:24: STP: VLAN0001 sent Topology Change Notice on Fa0/2
00:23:39: STP: VLAN0001 Fa0/3 -> learning
00:23:54: STP: VLAN0001 sent Topology Change Notice on Fa0/2
00:23:54: STP: VLAN0001 Fa0/3 -> forwarding


ブロッキングになっているFa0/3のポートが,リスニング→ラーニング→フォワーディングと遷移しているのがわかります。
(ポートの遷移については,シスコのWebページなどを参考にして下さい。)
最初に出ている10個のメッセージは,これまでSwitchA経由で来ていたBPDUが来なくなったことを表しています。
BPDUは2秒に1回の間隔でルート・ブリッジが送ります。
スイッチは,このBPDUが20秒間来なくなってはじめて経路が変わったと判断するわけです。
リスニングは,BPDUを改めて送受信して経路を計算する時間で,これは15秒。
ラーニングは,MACアドレスを学習してアドレス・テーブルを作る時間で,これも15秒です。
つまり,経路が切り替わるまでに50秒(20秒+15秒+15秒)かかったわけです。
ちなみに,この20秒間は「Max Age」,二つの15秒間は「Foward Delay」などと呼ばれています。

次に,三角形の状態から,SwitchBとSwtchCがつながるケーブルを抜いてみます。

00:30:25: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to down
00:30:25: %LINK-3-UPDOWN: Interface FastEthernet0/2, changed state to down
00:30:25: STP: VLAN0001 new root port Fa0/3, cost 38
00:30:25: STP: VLAN0001 Fa0/3 -> listening
00:30:27: STP: VLAN0001 sent Topology Change Notice on Fa0/3
00:30:40: STP: VLAN0001 Fa0/3 -> learning
00:30:55: STP: VLAN0001 Fa0/3 -> forwarding


今度は,最初の20秒間を飛ばして,30秒(15秒+15秒)で経路が切り替わりました。
というのも,SwitchBとSwtchC間のリンクがダウンしたことは,SwitchCは知ることができます。
なので,BPDUが来なくなったことを20秒間待つことなく,すぐにラーニングに移行したわけです。

スパニング・ツリーの用語や基本については,以下のページが参考になります。
●Catalyst2950/2955スイッチ ソフトウエア コンフィギュレーションガイド
http://www.cisco.com/japanese/warp/public/3/jp/service/manual_j/sw/cat29/50dscg/chapter13/11380_12_13.shtml

スパニングツリー・ラボ
STPの基本動作
ルート・ブリッジの設定
パス・コストの設定
PortFast
UplinkFast
BackboneFast
PVST
RSTP
MSTP