【STP⑤】STPの状態遷移と切り替わり時間

stp-part5

STPで冗長化してるのだけど、お客さんに障害時の通信断時間を聞かれたの。でもそのあたり分かってなくて答えられなかったわ。何秒くらいで切り替わるの?

チャーチルさん

ポン先生

切り替わりにかかる時間を覚えておくことも大切だけど、まずは仕組みを理解しよう!条件や設定によって切り替わり時間は変わるよ。

この記事ではSTPの状態遷移について勉強します。例えば構築時や機器の不具合発生時はSTPスタータスを確認するので基本的な動作の知識は必要になります。結果も重要ですがその裏でどういった技術があるのかも一緒に確認しておきましょう。

他のSTP関連の記事を読んでいる事が前提となります。

STPの状態遷移

この章の項目
  • 状態遷移 → 4つの状態
  • トポロジーチェンジ(障害発生時)

状態遷移 → 4つの状態

まずは改めてSTPの基本的な仕組みについて簡単におさらいです。STPはループネットワークにおいてブロッキングポートを自動的に計算するためにBPDUとうい情報をスイッチ間で交換します。これによってルートブリッジや指定ポート等各種必要なステータスが決まり、最終的にブロッキングポートも決定します。

ただし、この一連の流れは一足飛びに決まる訳では無くそれぞれステップを踏んで進みます。具体的には以下の通り、BlockingListeningLearningForwardingの4つの状態があります。

状態BPDU受信BPDU送信MACアドレス学習データ転送
Blocking
Listening
Learning
Forwarding

STPの状態遷移

Blocking

まず、スイッチが起動するとポートはBlockingから開始します。今までは最後にBlockingになるような流れで説明していましたが、正確には最初に全ポートBlocking→途中色々計算→最終的に特定ポートのみBlockingの流れです。(ループしている場合、まず最初にBlockingから開始しないとブロードキャストストームが発生してしまうので。)

Blocking状態ではBPDUの送信はせず、受信のみ行います。当然データ転送も一切行いません。

Listening

通常時、ルートブリッジは2秒毎に下位の非ルートブリッジにBPDUを送信します。非ルートブリッジ側も定期的にBPDUを受信することになりますが、20秒間BPDUを受信しないと障害と見なしてトポロジーを再計算します。再計算に伴いポートの状態をBlockingからListeningに変更します。ListeningになることでBPDUの受信・送信両方ができるようになります。

ポン先生

最初に待つ20秒間のことを最大エージと言うよ。

Learning

Listeningの状態で更に15秒間経過すると次はLearningというステータスに移行します。Learning状態でもデータの転送は行いませんがMACアドレスの学習はできるようになります。

ポン先生

この15秒は転送遅延と言うよ。同じSTPの用語だけど最大エージとは発動タイミングやデフォルトの秒数は違うから要注意だね。

Forwarding

Learning状態から更に転送遅延分(15秒)経過しそのポートがルートポートまたは指定ポートだった場合、Forwardingに移行します。STPではForwarding状態になって初めてデータ転送できるようになります。当然それ以外のポートはBlockingになります。

つまり通信可能になるまで20秒+15秒+15秒=50秒ということになります。

ご、50秒かぁ~結構かかるんだね・・・

チャーチルさん

ポン先生

秒数に関しては50秒パターンと30秒パターンがあるんだ。詳細は次の章で確認しよう。

トポロジーチェンジ(障害発生時)

では実際に障害が発生し切り替わる際の動作も確認しましょう。全体の大まかな流れは上記(初期状態からBlocking or Forwardingが決まるまで)と同じです。まず、正常時はルートブリッジから2秒毎にBPDUが送信されます。ネットワーク的な変化がなければSTPのステータスも変化しません。

BPDUの転送(正常時)

50秒パターン

ここでスイッチA、Bの間で障害が発生したとします。この時スイッチBはBPDUを受信できません。また、スイッチCのブロッキングポートも同様にBPDUを受信できません。

障害発生(スイッチA・B間障害)

20秒後(最大エージの時間経過後)、スイッチCは障害を検知します。ポートの状態をListening、Learningと遷移させBPDUを交換します。BPDUを基にSTPの再計算を開始し最終的にはForwarding状態となり通信が復旧します。ここまでの所要時間は50秒です。(上記と同じ流れです。)

STP状態遷移(スイッチA・B間障害)

30秒パターン

では次にスイッチAとスイッチCの間で障害が発生したケースを考えます。この時に重要なのが最大エージです。改めて、最大エージとは「障害が発生したとみなすまでの時間」です。通常は20秒間BPDUが来ない場合に障害が発生したと扱い再計算を開始します。

しかしスイッチCは自分がブロッキングポートを持っています。20秒待つまでもなくリンクダウンを検知した段階で障害だと分かるので、最大エージの部分は省略します。

障害発生(スイッチA・C間障害)

よってすぐにListeningへ遷移します。その後の計算は同じですが、ポイントとしては最大エージ分待たずに遷移できるということで切り替わりにかかる時間は15+15=30秒となります。

STP状態遷移(スイッチA・C間障害)

まとめ

ポイント
  • STPの4つの状態

    • Blocking:BPDU受信のみ

    • Listening:BPDU送信可

    • Learning:MACアドレス学習可

    • Forwarding:データ転送可

  • 最大エージ:20秒、転送遅延:15秒

  • 切り替わり時間:ケースによって50秒or30秒

この記事ではSTPの状態遷移についてまとめました。冗長構成において障害発生時の切り替わりの時間は最大級に重要なポイントであり設計の肝になります。もちろんユーザへの影響という観点だけで見れば早く切り替わった方が良いのですが、仕様や設計上調整しきれない部分もあります。ただ、ネットワークエンジニアとしては切り替わり時間の早さではなく、仕組みの理解を重視して欲しいと思います。構築時の試験や何かしらの不具合時の調査において、そもそもの仕組みを理解していないと諸々判断できないからです。まずは本来の正しい姿・仕組みを一から勉強していきましょう。