Cisco IOS Layer2 – STP convergence (各種タイマーのチューニング方法)

スポンサーリンク

STP timerについてまとめます。hello, forward delay, max ageなどのパラメータを変更する事によってconvergence (収束) 時間をチューニングする事ができます。

コマンド一覧

このシナリオで重要なコマンド一覧は以下の通りです。

Switch(config)# spanning-tree vlan <vlan> hello-time <sec>
Switch(config)# spanning-tree vlan <vlan> max-age <sec>
Switch(config)# spanning-tree vlan <vlan> forward-time <sec>

構成図

以下の構成でSTPの動作確認を行います。SW1をRoot Bridgeとし、SW1, SW4間はcostが設定されています。なお、図中のR, D, BはそれぞれRoot, Designated, Blockingを表します。

NM-16ESWモジュールを使用したエミュレータで動作確認を行ったため、catalyst switchとはコマンドライン体系が異なる事に注意して下さい。また、ログを把握しやすくするためにntpの設定も投入しています。

 +------------+              +------------+
 |           |               |           | 
 |    SW 2    +D----------R+    SW 3   | 
 |           | f0/1      f0/1|           | 
 +-----+------+              +-----+------+
       Rf0/0                  f0/0D
       │                          │
       │                          │
       │                          │
       Df0/0                  f0/0R 
 +-----+------+              +-----+------+
 |           |    cost 1000  |           | 
 |    SW 1    +D----------B+    SW 4   | 
 |   (Root)  | f0/1      f0/1|           | 
 +------------+              +------------+
 [SW1]
vlan 2
!
spanning-tree vlan 1 priority 0
spanning-tree vlan 2 priority 0
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
 spanning-tree cost 1000
!
interface Vlan1
 ip address 192.168.0.1 255.255.255.0
!
ntp master

 [SW2]
vlan 2
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
!
interface Vlan1
 ip address 192.168.0.2 255.255.255.0
!
ntp server 192.168.0.1

 [SW3]
vlan 2
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
!
interface Vlan1
 ip address 192.168.0.2 255.255.255.0
!
ntp server 192.168.0.1

 [SW4]
vlan 2
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
 spanning-tree cost 1000
!
interface Vlan1
 ip address 192.168.0.2 255.255.255.0
!
ntp server 192.168.0.1

設定全文は下記ファイルです。詳細設定は下記を参照ください。

SW1
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname SW1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
spanning-tree vlan 1 priority 0
spanning-tree vlan 2 priority 0
!
!
!
!
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
 spanning-tree cost 1000
!
interface FastEthernet0/2
!
interface FastEthernet0/3
!
interface FastEthernet0/4
!
interface FastEthernet0/5
!
interface FastEthernet0/6
!
interface FastEthernet0/7
!
interface FastEthernet0/8
!
interface FastEthernet0/9
!
interface FastEthernet0/10
!
interface FastEthernet0/11
!
interface FastEthernet0/12
!
interface FastEthernet0/13
!
interface FastEthernet0/14
!
interface FastEthernet0/15
!
interface Vlan1
 ip address 192.168.0.1 255.255.255.0
!
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
ntp master
!
end
SW2
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname SW2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
!
interface FastEthernet0/2
!
interface FastEthernet0/3
!
interface FastEthernet0/4
!
interface FastEthernet0/5
!
interface FastEthernet0/6
!
interface FastEthernet0/7
!
interface FastEthernet0/8
!
interface FastEthernet0/9
!
interface FastEthernet0/10
!
interface FastEthernet0/11
!
interface FastEthernet0/12
!
interface FastEthernet0/13
!
interface FastEthernet0/14
!
interface FastEthernet0/15
!
interface Vlan1
 ip address 192.168.0.2 255.255.255.0
!
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
ntp server 192.168.0.1
!
end
SW3
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname SW3
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
!
interface FastEthernet0/2
!
interface FastEthernet0/3
!
interface FastEthernet0/4
!
interface FastEthernet0/5
!
interface FastEthernet0/6
!
interface FastEthernet0/7
!
interface FastEthernet0/8
!
interface FastEthernet0/9
!
interface FastEthernet0/10
!
interface FastEthernet0/11
!
interface FastEthernet0/12
!
interface FastEthernet0/13
!
interface FastEthernet0/14
!
interface FastEthernet0/15
!
interface Vlan1
 ip address 192.168.0.3 255.255.255.0
!
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
ntp clock-period 17179869
ntp server 192.168.0.1
!
end
SW4
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname SW4
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface FastEthernet0/0
 switchport mode trunk
!
interface FastEthernet0/1
 switchport mode trunk
 spanning-tree cost 1000
!
interface FastEthernet0/2
!
interface FastEthernet0/3
!
interface FastEthernet0/4
!
interface FastEthernet0/5
!
interface FastEthernet0/6
!
interface FastEthernet0/7
!
interface FastEthernet0/8
!
interface FastEthernet0/9
!
interface FastEthernet0/10
!
interface FastEthernet0/11
!
interface FastEthernet0/12
!
interface FastEthernet0/13
!
interface FastEthernet0/14
!
interface FastEthernet0/15
!
interface Vlan1
 ip address 192.168.0.4 255.255.255.0
!
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
ntp server 192.168.0.1
!
end

Spannning-Tree Role

仕様説明

Spanning Treeには以下の5つの状態が存在します。まずはBPDUのみを取り扱い、次にMACアドレスを学習し、最後にフレームを転送するようになります。このように段階を経る事によって、STP計算が収束する前のデータ転送を防ぐにようになっています。

状態 BPDU MACアドレスの学習 フレームの転送
disable 破棄 × ×
blocking 受信のみ × ×
listening 送受信 × ×
learning 送受信 ×
forwarding 送受信
状態 説明
disable 管理者が意図的に無効にしている状態です。
blocking スイッチ起動直後の状態でBPDUの受信のみを行う状態です。

また、STP計算を行った結果、ループしないよう意図的にブロックしているポートもblockingの状態になります。max age(20秒)経過するTopology Change BPDUを受信するとlisteningに遷移します。

listening BPDUを送受信し、どのスイッチがRoot Bridgeになるか探している状態です。この時点では、MACアドレスの学習は行いません。forwarding delay(15秒)経過するとlearningに遷移します。
listening MACアドレスを学習している状態です。forwarding delay(15秒)経過するとforwardingに遷移します。
forwarding フレームの転送を行う状態です。

Spannning-Tree 切り替わり

仕様説明

Spanning-Treeはトポロジを把握したり障害を検知したりするのにBPDU(Bridge Protocol Data Unit)と呼ばれるフレームを使用します。BPDUのフォーマットは以下の通りです。なお、Flag以降のフィールドはTCN BPDUでは存在しません。

byte field description
2 Protocol ID 今のところ常に0が使用されます。
1 version STPのバージョンを表します。802.1dならば0になります。
1 Type configuration BPDUならば0x00、TCN BPDUならば0x80です。
1 Flags MSB(左端)がTCA flag、LSB(右端)がTC flagです。
省略 以降、Root ID, Bridge ID, Max Ageなどが含まれます。

configuration BPDUと、TCN(Topology Change Notification) BPDUの2種類が存在します。さらにconfiguration BPDUは3つに分類されます。表にまとめると以下の通りです。

種類 説明
BPDU TCA flag = 0, TC flag = 0であるconfiguration BPDUです。

各スイッチは起動直後はこのBPDUを転送します。このフレームを各スイッチでやりとりした結果、自分のBridge IDが最も小さい(優先される)と判断した場合はこのBPDUを転送し続けます。

このBPDUは死活監視の意味も込められており、もしRoot Bridgeではないスイッチがmax age(20秒)間BPDUを受信できないとTopology Change Notification BPDUを送信します。

Topology Change Notification BPDU Message Typeが0x80であるBPDUです。

Root Bridgeではないスイッチにおいて、リンクダウンが発生するmax age(20秒)間BPDUを受信できないと、Topology Change Notification BPDUを送信し、Root Bridgeに障害を通知します。

Topology Change Ack BPDU TCA flag = 1, TC flag = 1であるconfiguration BPDUです。

Topology Change Notification BPDUに対する確認応答です。

Topology Change BPDU TCA flag = 0, TC flag = 1であるconfiguration BPDUです。

Topologyが変わった旨を全体に伝えるためのBPDUです。Root BridgeはTCN BPDUを受信すると、max age + forwarding delay(20秒 + 15秒)間 TC BPDUを送信し続けます。TC BPDUを受信したスイッチは、mac address tableのaging timerを通常の300秒から15秒に変更し、mac address tableの更新を試みます。

フレームの観察

トポロジを把握したり障害を検知したりする最も基本的なBPDUは以下の通りです。Typeが0x00で、TCA flag, TC flagが0である事が読み取れます。また、Root Brigdge IDなど経路計算に必要な情報もBPDU内に含まれている事も把握して下さい。

Frame 65: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
IEEE 802.3 Ethernet 
Logical-Link Control
Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Spanning Tree (0)
    BPDU Type: Configuration (0x00)
    BPDU flags: 0x00
        0... .... = Topology Change Acknowledgment: No
        .... ...0 = Topology Change: No
    Root Identifier: 0 / 0 / cc:00:13:18:00:00
        Root Bridge Priority: 0
        Root Bridge System ID Extension: 0
        Root Bridge System ID: cc:00:13:18:00:00
    Root Path Cost: 0
    Bridge Identifier: 0 / 0 / cc:00:13:18:00:00
        Bridge Priority: 0
        Bridge System ID Extension: 0
        Bridge System ID: cc:00:13:18:00:00
    Port identifier: 0x8001
    Message Age: 0
    Max Age: 20
    Hello Time: 2
    Forward Delay: 15

Topology Chage Notification BPDUは以下の通りです。Typeが0x80である事が読み取れます。

Frame 16: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
IEEE 802.3 Ethernet 
Logical-Link Control
Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Spanning Tree (0)
    BPDU Type: Topology Change Notification (0x80)

Topology Chage Ack BPDUは以下の通りです。Typeが0x00で、TCA flag, TC flagが1である事が読み取れます。

Frame 17: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
IEEE 802.3 Ethernet 
Logical-Link Control
Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Spanning Tree (0)
    BPDU Type: Configuration (0x00)
    BPDU flags: 0x81 (Topology Change Acknowledgment, Topology Change)
        1... .... = Topology Change Acknowledgment: Yes
        .... ...1 = Topology Change: Yes
    Root Identifier: 0 / 0 / cc:00:05:d0:00:00
    Root Path Cost: 0
    Bridge Identifier: 0 / 0 / cc:00:05:d0:00:00
    Port identifier: 0x8001
    Message Age: 0
    Max Age: 20
    Hello Time: 2
    Forward Delay: 15

Topology Chage Ack BPDUは以下の通りです。Typeが0x00で、TCA flagが0で、TC flagが1である事が読み取れます。

Frame 19: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
IEEE 802.3 Ethernet 
Logical-Link Control
Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Spanning Tree (0)
    BPDU Type: Configuration (0x00)
    BPDU flags: 0x01 (Topology Change)
        0... .... = Topology Change Acknowledgment: No
        .... ...1 = Topology Change: Yes
    Root Identifier: 0 / 0 / cc:00:05:d0:00:00
    Root Path Cost: 0
    Bridge Identifier: 0 / 0 / cc:00:05:d0:00:00
    Port identifier: 0x8001
    Message Age: 0
    Max Age: 20
    Hello Time: 2
    Forward Delay: 15

トポロジ変化の観察

SW2, SW3間の障害をエミュレートします。SW2に以下のコマンドを投入します。

 +------------+              +------------+
 |           |               |           | 
 |    SW 2    +D----×----R+    SW 3   | 
 |           | f0/1      f0/1|           | 
 +-----+------+              +-----+------+
       Rf0/0                  f0/0D
       │                          │
       │                          │
       │                          │
       Df0/0                  f0/0R 
 +-----+------+              +-----+------+
 |           |    cost 1000  |           | 
 |    SW 1    +D----------B+    SW 4   | 
 |   (Root)  | f0/1      f0/1|           | 
 +------------+              +------------+
 [SW2]
SW2(config)#interface FastEthernet 0/1
SW2(config-if)#switchport trunk allowed vlan except 2
SW2(config-if)#^Z
SW2#
Jan  2 21:42:59.865: %SYS-5-CONFIG_I: Configured from console by console
SW2#

SW3に予めデバッグを有効にしておき、この障害時のデバッグログを観察します。

リンクダウンした場合はすぐに障害を検知する事ができますが、今回のリンクダウンしていないものの通信断は発生している状態(実践ではメディアコンバーター越しの障害がよくあるパターンです)では、BPDUが受信できなくなったmax age(約20秒)後に障害を検知している事が読み取れます。

CCNA試験対策本などの入門者向きの参考書を見ると、「障害を検知したスイッチは自身がRoot Bridgeかのように振舞う」と書かれています。より正確な言い方をすれば、障害を検知したスイッチは、TCN BPDUを送信すると同時に、TC BPDUを送信し続けます。

 [SW3]
SW3#debug spanning-tree events
Spanning Tree event debugging is on
SW3#
SW3#
Jan  2 21:43:17.950: STP: VLAN2 we are the spanning tree root
Jan  2 21:43:17.978: STP: VLAN2 heard root     0-cc00.04d0.0001 on Fa0/0
Jan  2 21:43:17.978: current Root has 32768-cc02.163c.0001
Jan  2 21:43:17.982:     supersedes 32768-cc02.163c.0001
Jan  2 21:43:17.982: STP: VLAN2 new root is 0, cc00.04d0.0001 on port Fa0/0, cost 1019
Jan  2 21:43:17.986: STP: VLAN2 sent Topology Change Notice on Fa0/0
SW3#

SW4に予めデバッグを有効にしておき、この障害時のデバッグログを観察します。

SW4はBPDUが受信できなくなったmax age(約20秒)後にSW3からのTC BPDUを受信します。TC BPDUを受信した直後にlisteningに遷移している事が読み取れます。また、そのforwarding delay(15秒)後にlearningに遷移し、さらにforwarding delay(15秒)後にforwardingに遷移している様子が読み取れます。

 [SW4]
SW4#
Jan  2 21:43:16.971: STP: VLAN2 new root port Fa0/1, cost 1000
Jan  2 21:43:17.027: STP: VLAN2 Fa0/1 -> listening
Jan  2 21:43:17.959: STP: VLAN2 heard root 32768-cc02.163c.0001 on Fa0/0
Jan  2 21:43:17.959: current Root has     0-cc00.04d0.0001
Jan  2 21:43:18.003: STP: VLAN2 Topology Change rcvd on Fa0/0
Jan  2 21:43:18.003: STP: VLAN2 sent Topology Change Notice on Fa0/1
Jan  2 21:43:32.046: STP: VLAN2 Fa0/1 -> learning
Jan  2 21:43:47.048: STP: VLAN2 sent Topology Change Notice on Fa0/1
Jan  2 21:43:47.048: STP: VLAN2 Fa0/1 -> forwarding
SW4#

timer tuning

仕様説明

Cisco機器では、STPに関するタイマーをチューニングする事ができます。

Switch(config)# spanning-tree vlan <vlan> hello-time <sec>
Switch(config)# spanning-tree vlan <vlan> max-age <sec>
Switch(config)# spanning-tree vlan <vlan> forward-time <sec>

動作確認

下記の設定をSW1に投入し、STPの収束が早くなるようにします。

 [SW1]
spanning-tree vlan 2 hello-time 1
spanning-tree vlan 2 max-age 10
spanning-tree vlan 2 forward-time 7

先程と同様のSW2, SW3間の障害をエミュレートします。デフォルトの状態では障害復旧に50秒かかりますが、STPチューニング後は24( = 10 + 7 * 2)秒で障害復旧している事が読み取れます。

 [SW2]
SW2(config)#interface FastEthernet 0/1
SW2(config-if)#switchport trunk allowed vlan except 2
SW2(config-if)#^Z
SW2#
Jan  2 21:48:28.063: %SYS-5-CONFIG_I: Configured from console by console
SW2#

 [SW4]
SW4#
Jan  2 21:48:35.135: STP: VLAN2 new root port Fa0/1, cost 1000
Jan  2 21:48:35.167: STP: VLAN2 Fa0/1 -> listening
Jan  2 21:48:36.103: STP: VLAN2 heard root 32768-cc02.163c.0001 on Fa0/0
Jan  2 21:48:36.103: current Root has     0-cc00.04d0.0001
Jan  2 21:48:36.119: STP: VLAN2 Topology Change rcvd on Fa0/0
Jan  2 21:48:36.123: STP: VLAN2 sent Topology Change Notice on Fa0/1
Jan  2 21:48:38.103: STP: VLAN2 Topology Change rcvd on Fa0/0
Jan  2 21:48:38.107: STP: VLAN2 sent Topology Change Notice on Fa0/1
Jan  2 21:48:42.183: STP: VLAN2 Fa0/1 -> learning
Jan  2 21:48:49.202: STP: VLAN2 sent Topology Change Notice on Fa0/1
Jan  2 21:48:49.206: STP: VLAN2 Fa0/1 -> forwarding
SW4#
タイトルとURLをコピーしました