ネットワークのトラブルとして多く発生するL2ループを防ぐための仕組みである『STP(スパニングツリープロトコル)』について、CMLで環境を構築し説明します。
『RSTP(ラピッドスパニングツリープロトコル)』の説明は下記を参照してください。
L2ループの説明は下記を参照してください。
ネットワーク構成
CMLで下記の環境を構築します。全スイッチでVLAN1のSTP設定を有効化します。(デフォルトで有効になっています。)
hostname L2SW-A
spanning-tree vlan 1
hostname L2SW-B
spanning-tree vlan 1
hostname L2SW-C
spanning-tree vlan 1
hostname L2SW-D
spanning-tree vlan 1
hostname Server1
ifconfig eth0 192.168.100.1 netmask 255.255.255.0 up
route add -net 0.0.0.0/0 dev eth0
hostname PC1
ifconfig eth0 192.168.100.100 netmask 255.255.255.0 up
route add -net 0.0.0.0/0 dev eth0
各スイッチ・ポートの役割決定
ルートブリッジの選出
STPが有効になっているポートがリンクアップすると、各スイッチはBPDU(Bridge Protocol Data Unit)を送信します。受信したBPDUは、受信ポート以外に転送されます。
BPDUのフレームフォーマットについては、下記を参照してください。
BPDUには、ブリッジID(ブリッジプライオリティとMACアドレス)が含まれています。
ブリッジIDが一番小さいスイッチが、ルートブリッジとして選出されます。この構成の場合、ブリッジプライオリティは全スイッチがデフォルト(32768)のため、MACアドレスが一番小さい、L2SW-Aがルートブリッジとなります。
ルートポート(RP)の選出
次に、ルートポート(RP)と呼ばれるポートを選出します。ルートポートは各スイッチでルートブリッジに最も近いポートです。ルートブリッジ以外の各スイッチごとに1ポートが選出されます。
各スイッチからルートブリッジまでの距離に関しては、下記の順番で比較します。
1.経由するリンクの帯域に応じたコストの合計(ルートパスコスト)を比較
リンクの帯域 | コスト |
---|---|
10Gbps | 2 |
1Gbps | 4 |
100Mbps | 19 |
10Mbps | 100 |
2.ルートパスコストが同じ場合は、ブリッジIDを比較
L2SW-Dが受け取ったBPDUの比較
この構成の場合、以下の通りルートポートが選出されます。
指定ポート(DP)の選出
次に、指定ポート(DP – Designated Port)と呼ばれるポートを選出します。指定ポートは各リンクでルートブリッジに最も近いポートです。各リンクごとに1ポートが選出されます。
1.ルートブリッジは全てのポートが指定ポート
2.最も小さいルートパスコストのRPをもつスイッチ側のポート
この構成の場合、以下の通り指定ポートが選出されます。
非指定ポート(NDP)の選出
ルートポート/指定ポートに選出されなかったポートが、非指定ポート(NDP – NonDesignated Port)となります。非指定ポートは、BPDUは受信しますが、通信は行わないブロッキング状態のポートとなります。
この構成の場合、以下の通り非指定ポートが選出されます。L2SW-DのGi0/0がブロッキング状態になることにより、L2ループが解消されます。
各ポートの状態
各スイッチ・ポートの役割決定と同時に、ポートの状態遷移が行われます。STPでは下記5つのポート状態があります。
ポート状態 | 説明 |
---|---|
ディセーブル | ポートがシャットダウンされ、STPに参加しない状態。 |
ブロッキング(BLK) | BPDUの受信のみを行う状態。データフレームは転送されない。 |
リスニング(LIS) | BPDUの送受信を行い、スイッチ・ポートの役割を決定している状態。非指定ポートはブロッキングへ移行する。データフレームは転送されない。 |
ラーニング(LRN) | BPDUの送受信を行い、MACアドレスの学習を始める状態。データフレームは転送されない。 |
フォワーディング(FWD) | ルートポート・指定ポートとなり、データフレームの転送が可能な状態。 |
リスニング(LIS)orブロッキング(BLK)へ
ポートの役割が決定後、ルートポートと指定ポートはリスニング状態へ、非指定ポートはブロッキング状態に遷移します。※正しくは、非指定ポートに関してはリスニング状態を経由して、すぐにブロッキング状態に遷移します。
ラーニング(LRN)へ
リスニング状態のポートは15秒の転送遅延タイマーが経過した後、ラーニング状態に遷移します。
フォワーディング(FWD)へ
ラーニング状態のポートは更に15秒の転送遅延タイマーが経過した後、フォワーディング状態に遷移します。
デバッグコマンドによる状態遷移の確認
下記のコマンドを実行することで、ポート状態遷移のログが出力されます。
debug spanning-tree events
07:00:00.239: STP: VLAN0001 Gi0/0 -> listening
07:00:00.240: STP: VLAN0001 Gi0/1 -> listening
07:00:15.241: STP: VLAN0001 Gi0/0 -> learning
07:00:15.242: STP: VLAN0001 Gi0/1 -> learning
07:00:30.247: STP: VLAN0001 Gi0/0 -> forwarding
07:00:30.248: STP: VLAN0001 Gi0/1 -> forwarding
07:00:00.327: STP: VLAN0001 Gi0/0 -> listening
07:00:00.331: STP: VLAN0001 Gi0/1 -> listening
07:00:15.327: STP: VLAN0001 Gi0/0 -> learning
07:00:15.330: STP: VLAN0001 Gi0/1 -> learning
07:00:30.336: STP: VLAN0001 Gi0/0 -> forwarding
07:00:30.337: STP: VLAN0001 Gi0/1 -> forwarding
07:00:00.489: STP: VLAN0001 Gi0/0 -> listening
07:00:00.491: STP: VLAN0001 Gi0/1 -> listening
07:00:15.489: STP: VLAN0001 Gi0/0 -> learning
07:00:15.492: STP: VLAN0001 Gi0/1 -> learning
07:00:30.493: STP: VLAN0001 Gi0/0 -> forwarding
07:00:30.495: STP: VLAN0001 Gi0/1 -> forwarding
非指定ポートとなったGi0/0に関しては、リスニング状態から、すぐにブロッキング状態に遷移していることが分かります。
07:00:00.485: STP: VLAN0001 Gi0/0 -> listening
07:00:00.491: STP: VLAN0001 Gi0/1 -> listening
07:00:01.995: STP: VLAN0001 Gi0/0 -> blocking
07:00:15.492: STP: VLAN0001 Gi0/1 -> learning
07:00:30.494: STP: VLAN0001 Gi0/1 -> forwarding
各スイッチのSTPステータス
各スイッチで下記のコマンドを実行し、最終的なSTPのステータスを確認します。上記のとおり、ポートの役割が決定していることが分かります。
show spanning-tree
L2SW-A#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 5254.000f.0d54
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 5254.000f.0d54
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 15 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Desg FWD 4 128.1 P2p
Gi0/1 Desg FWD 4 128.2 P2p
Gi0/2 Desg FWD 4 128.3 P2p
L2SW-C#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 5254.000f.0d54
Cost 4
Port 2 (GigabitEthernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5254.001b.ef10
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 15 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Desg FWD 4 128.1 P2p
Gi0/1 Root FWD 4 128.2 P2p
L2SW-D#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 5254.000f.0d54
Cost 8
Port 2 (GigabitEthernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 5254.001c.ff7a
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 15 sec
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Gi0/0 Altn BLK 4 128.1 P2p
Gi0/1 Root FWD 4 128.2 P2p
Gi0/2 Desg FWD 4 128.3 P2p
以上で、STP(スパニングツリープロトコル)の状態遷移の説明は完了です!