本サイトはPRが含まれています。
STPで冗長化してるのだけど、お客さんに障害時の通信断時間を聞かれたの。でもそのあたり分かってなくて答えられなかったわ。何秒くらいで切り替わるの?
チャーチルさん
ポン先生
切り替わりにかかる時間を覚えておくことも大切だけど、まずは仕組みを理解しよう!条件や設定によって切り替わり時間は変わるよ。
この記事ではSTPの状態遷移について勉強します。例えば構築時や機器の不具合発生時はSTPスタータスを確認するので基本的な動作の知識は必要になります。結果も重要ですがその裏でどういった技術があるのかも一緒に確認しておきましょう。
他のSTP関連の記事を読んでいる事が前提となります。
HAL校長
目次
STPの状態遷移
- 状態遷移 → 4つの状態
- トポロジーチェンジ(障害発生時)
状態遷移 → 4つの状態
まずは改めてSTPの基本的な仕組みについて簡単におさらいです。STPはループネットワークにおいてブロッキングポートを自動的に計算するためにBPDUとうい情報をスイッチ間で交換します。これによってルートブリッジや指定ポート等各種必要なステータスが決まり、最終的にブロッキングポートも決定します。
ただし、この一連の流れは一足飛びに決まる訳では無くそれぞれステップを踏んで進みます。具体的には以下の通り、Blocking、Listening、Learning、Forwardingの4つの状態があります。
状態 | BPDU受信 | BPDU送信 | MACアドレス学習 | データ転送 |
---|---|---|---|---|
Blocking | ○ | ☓ | ☓ | ☓ |
Listening | ○ | ○ | ☓ | ☓ |
Learning | ○ | ○ | ○ | ☓ |
Forwarding | ○ | ○ | ○ | ○ |
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のステータスも変化しません。
50秒パターン
ここでスイッチA、Bの間で障害が発生したとします。この時スイッチBはBPDUを受信できません。また、スイッチCのブロッキングポートも同様にBPDUを受信できません。
20秒後(最大エージの時間経過後)、スイッチCは障害を検知します。ポートの状態をListening、Learningと遷移させBPDUを交換します。BPDUを基にSTPの再計算を開始し最終的にはForwarding状態となり通信が復旧します。ここまでの所要時間は50秒です。(上記と同じ流れです。)
30秒パターン
では次にスイッチAとスイッチCの間で障害が発生したケースを考えます。この時に重要なのが最大エージです。改めて、最大エージとは「障害が発生したとみなすまでの時間」です。通常は20秒間BPDUが来ない場合に障害が発生したと扱い再計算を開始します。
しかしスイッチCは自分がブロッキングポートを持っています。20秒待つまでもなくリンクダウンを検知した段階で障害だと分かるので、最大エージの部分は省略します。
よってすぐにListeningへ遷移します。その後の計算は同じですが、ポイントとしては最大エージ分待たずに遷移できるということで切り替わりにかかる時間は15+15=30秒となります。
ネットワークエンジニアを目指すならCCNAを取得しよう!
CCNAとはCisco社のメーカ認定資格です。CCNAの取得はネットワークエンジニアの基本的な知識やCisco製品の理解の証明になります。
特定メーカの資格で役に立つの?実際には他メーカの機種も扱うんじゃないの?
チャーチルさん
ポン先生
確かに業務上Cisco以外の機器を扱うことはあるだろうけど、最初にCiscoを勉強しておくと他の機器も理解しやすくなるんだ。
Ciscoは数あるネットワーク機器メーカの内の1社ですがディファクトスタンダードと言われています。つまり業界標準として位置付けられており、他メーカ機種でもCiscoのコマンドライン等を参考にしている事が多いです。そのため初見の機器でもCiscoと設定方法が似ており、「大体は分かる」なんてケースも多々あります。ネットワークエンジニアとしてはCiscoの学習はむしろ必須と言えるレベルでしょう。
また、Ciscoの資格と言っても独自仕様や製品の話だけでなく、ネットワークの一般的な知識も必要です。Cisco製品と言えベースはネットワークの標準規格に基づいて設計されており、CCNA取得でネットワークの一般的な知識も習得可能です。
上記理由からCCNAは非常におすすめの資格です。ネットワークエンジニアとして本格的に活躍したいのであれば是非チェックすべきでしょう。
【CCNAとは】難しい?勉強は?Cisco資格の登竜門 基本解説
まとめ
-
STPの4つの状態
-
Blocking:BPDU受信のみ
-
Listening:BPDU送信可
-
Learning:MACアドレス学習可
-
Forwarding:データ転送可
-
-
最大エージ:20秒、転送遅延:15秒
-
切り替わり時間:ケースによって50秒or30秒
この記事ではSTPの状態遷移についてまとめました。冗長構成において障害発生時の切り替わりの時間は最大級に重要なポイントであり設計の肝になります。もちろんユーザへの影響という観点だけで見れば早く切り替わった方が良いのですが、仕様や設計上調整しきれない部分もあります。ただ、ネットワークエンジニアとしては切り替わり時間の早さではなく、仕組みの理解を重視して欲しいと思います。構築時の試験や何かしらの不具合時の調査において、そもそもの仕組みを理解していないと諸々判断できないからです。まずは本来の正しい姿・仕組みを一から勉強していきましょう。