障害発生時のRSTPの動作について、CMLで環境を構築し説明します。
ネットワーク構成
CMLで下記の環境を構築します。全スイッチでRSTP設定を有効化します。(Server1とPC1が接続されているポートはportfastの設定を入れています。)
初期構築時のRSTPの収束に関しては、下記を参照してください。
hostname L2SW-A
spanning-tree mode rapid-pvst
interface GigabitEthernet0/2
spanning-tree portfast edge
hostname L2SW-B
spanning-tree mode rapid-pvst
hostname L2SW-C
spanning-tree mode rapid-pvst
hostname L2SW-D
spanning-tree mode rapid-pvst
interface GigabitEthernet0/2
spanning-tree portfast edge
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
正常時の通信経路
PC1とServer1間の正常時の通信経路は下記の通りです。
障害時の動作(パターン1)
L2SW-BとL2SW-Dの間のリンク障害を想定し、障害時のSTPの動作を確認します。
PC1からServer1へ連続Pingを実施し、通信断時間を測定します。
ping 192.168.1.1
PC1:~$ ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=42 time=20.089 ms
64 bytes from 192.168.100.1: seq=1 ttl=42 time=14.472 ms
64 bytes from 192.168.100.1: seq=2 ttl=42 time=30.604 ms
障害発生
L2SW-BとL2SW-Dの双方で下記コマンドを実行します。※CMLの場合、対向機器のインターフェースをシャットダウンしても、自機器のインターフェースのダウンを検知しないため、双方で”shutdown”コマンドを実施します。
interface GigabitEthernet0/1
shutdown
RSTPの収束
Gi0/1がダウンすると、代替ポートであるGi0/0がすぐにルートポートに選出され、データフレームの転送を開始します。
デバッグログの確認
07:00:00.123: RSTP(1): updt roles, root port Gi0/1 going down
07:00:00.123: RSTP(1): Gi0/0 is now root port
通信断時間の確認
PC1で実施していた連続Pingを確認すると、通信断は発生していないことが分かります。(断時間無しで、高速で収束しているということになります。)
PC1:~$ ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=42 time=20.089 ms
64 bytes from 192.168.100.1: seq=1 ttl=42 time=14.472 ms
64 bytes from 192.168.100.1: seq=2 ttl=42 time=30.604 ms
64 bytes from 192.168.100.1: seq=3 ttl=42 time=16.690 ms
64 bytes from 192.168.100.1: seq=4 ttl=42 time=16.347 ms
64 bytes from 192.168.100.1: seq=5 ttl=42 time=15.160 ms
64 bytes from 192.168.100.1: seq=6 ttl=42 time=16.089 ms
64 bytes from 192.168.100.1: seq=7 ttl=42 time=31.115 ms
64 bytes from 192.168.100.1: seq=8 ttl=42 time=21.137 ms
64 bytes from 192.168.100.1: seq=9 ttl=42 time=13.791 ms
64 bytes from 192.168.100.1: seq=10 ttl=42 time=22.462 ms
64 bytes from 192.168.100.1: seq=11 ttl=42 time=23.208 ms
64 bytes from 192.168.100.1: seq=12 ttl=42 time=60.705 ms
64 bytes from 192.168.100.1: seq=13 ttl=42 time=17.790 ms
64 bytes from 192.168.100.1: seq=14 ttl=42 time=27.346 ms
64 bytes from 192.168.100.1: seq=15 ttl=42 time=33.553 ms
^C
--- 192.168.100.1 ping statistics ---
16 packets transmitted, 16 packets received, 0% packet loss
round-trip min/avg/max = 13.791/23.784/60.705 ms
障害時の動作(パターン2)
L2SW-AとL2SW-Bの間のリンク障害を想定し、障害時のSTPの動作を確認します。
PC1からServer1へ連続Pingを実施し、通信断時間を測定します。
ping 192.168.1.1
PC1:~$ ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=42 time=29.249 ms
64 bytes from 192.168.100.1: seq=1 ttl=42 time=31.311 ms
64 bytes from 192.168.100.1: seq=2 ttl=42 time=23.499 ms
障害発生
L2SW-AとL2SW-Bの双方で下記コマンドを実行します。※CMLの場合、対向機器のインターフェースをシャットダウンしても、自機器のインターフェースのダウンを検知しないため、双方で”shutdown”コマンドを実施します。
interface GigabitEthernet0/0
shutdown
RSTPの収束
各スイッチががトポロジーチェンジのBPDUを送信/転送します。
L2SW-DがトポロジーチェンジのBPDUを受け取り、Gi0/0をルートポートに変更し、データフレームの転送を開始します。
デバッグログの確認
Gi0/0がダウンした後、Gi0/1からBPDUを受け取り、アグリーメントBPDUを返しています。
07:00:06.475: RSTP(1): updt roles, root port Gi0/0 going down
07:00:06.485: RSTP(1): updt roles, received superior bpdu on Gi0/1
07:00:06.485: RSTP(1): Gi0/1 is now root port
07:00:06.487: RSTP(1): transmitting an agreement on Gi0/1 as a response to a proposal
Gi0/1からBPDUを受け取り、Gi0/0をルートポートに変更します。その後、Gi0/1を指定ポートとして、L2SW-BとBPDUのやりとりを行なっています。
07:00:06.606: RSTP(1): updt roles, received superior bpdu on Gi0/1
07:00:06.606: RSTP(1): Gi0/0 is now root port
07:00:06.606: RSTP(1): Gi0/1 blocked by re-root
07:00:06.606: RSTP(1): Gi0/1 is now designated
07:00:06.610: RSTP(1): transmitting a proposal on Gi0/1
07:00:06.612: RSTP(1): received an agreement on Gi0/1
通信断時間の確認
PC1で実施していた連続Pingを確認すると、通信断は発生していないことが分かります。(断時間無しで、高速で収束しているということになります。)
PC1:~$ ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=42 time=29.249 ms
64 bytes from 192.168.100.1: seq=1 ttl=42 time=31.311 ms
64 bytes from 192.168.100.1: seq=2 ttl=42 time=23.499 ms
64 bytes from 192.168.100.1: seq=3 ttl=42 time=17.640 ms
64 bytes from 192.168.100.1: seq=4 ttl=42 time=13.438 ms
64 bytes from 192.168.100.1: seq=5 ttl=42 time=52.984 ms
64 bytes from 192.168.100.1: seq=6 ttl=42 time=20.134 ms
64 bytes from 192.168.100.1: seq=7 ttl=42 time=24.682 ms
64 bytes from 192.168.100.1: seq=8 ttl=42 time=29.362 ms
64 bytes from 192.168.100.1: seq=9 ttl=42 time=27.219 ms
64 bytes from 192.168.100.1: seq=10 ttl=42 time=24.986 ms
64 bytes from 192.168.100.1: seq=11 ttl=42 time=22.877 ms
64 bytes from 192.168.100.1: seq=12 ttl=42 time=18.016 ms
64 bytes from 192.168.100.1: seq=13 ttl=42 time=32.573 ms
64 bytes from 192.168.100.1: seq=14 ttl=42 time=23.935 ms
64 bytes from 192.168.100.1: seq=15 ttl=42 time=18.397 ms
64 bytes from 192.168.100.1: seq=16 ttl=42 time=20.007 ms
^C
--- 192.168.100.1 ping statistics ---
17 packets transmitted, 17 packets received, 0% packet loss
round-trip min/avg/max = 13.438/25.312/52.984 ms
以上で、RSTP(ラピッドスパニングツリープロトコル)の障害時動作の説明は完了です!