こんにちは!ネットワークの世界へようこそ。国内外のさまざまなプロジェクトで大規模なインフラを設計・構築してきた、プロトコルを愛してやまないインフラアーキテクトです。
新人のエンジニアの皆さん、あるいは「これからネットワークを本格的に学びたい!」という皆さん。スイッチを複数台つないだときに発生する、あの恐ろしい「ループ(ぐるぐる回るパケットの嵐)」を防ぐための仕組み、「STP(Spanning Tree Protocol:スパニングツリープロトコル)」という言葉を聞いたことはありますか?
「教科書を読むと、英語の専門用語やタイマーの数字がたくさん出てきて、頭が痛くなってしまう……」
そんな方も安心してください。今回は、小難しいビット数や英語のヘッダー構造はいったん脇に置いておきましょう。ネットワークを流れるパケットを「郵便配達」や「道路の交通整理」のような身近な例え話に置き換えて、STPがどのようにして安全にネットワークを切り替えているのか、そのドラマチックな「状態遷移」の裏側を、一歩ずつ丁寧に紐解いていきます!
—
なぜSTPが必要なの?「郵便局のパンク」で考えるループの恐怖
まずは、なぜスイッチ同士をつなぐときに「STP」というお節介な仕組みが必要なのか、イメージから理解していきましょう。
もし、オフィスのスイッチ(ハブ)同士を「念のため」と二重に(ループ状に)つなげてしまったとします。このとき、宛先がわからない手紙(ネットワーク用語でいう「ブロードキャストパケット」など)が流れると、何が起こるでしょうか。
1. スイッチAが「この手紙、誰宛てか分からないから、すべてのルートに送っておこう!」と、つながっているポート全部にコピーして送ります。
2. それを受け取ったスイッチBも「あ、私宛てじゃない。別のルートに転送しなきゃ!」と、またコピーして送り返します。
3. これが永遠に繰り返されます。
これは、現実世界で言えば「宛先不明の手紙が、郵便局の間を猛スピードで行ったり来たりしながら、その過程でなぜか何万通にも自己増殖し、最終的に郵便局のトラックも仕分けオフィスもパンクしてしまう」ような状態です。これが、ネットワークの通信を完全に麻痺させる「ブロードキャストストーム」の正体です。
この大惨事を防ぐために、STPという「交通整理の警備員」がスイッチの中に常駐し、「普段はあえて1つの道路を通行止め(ブロック)にしておき、メインの道路が崩落したときだけ、通行止めを解除して迂回路を通す」という仕事をしてくれているのです。
—
STPを支える「3つのタイマー」とお手紙
この警備員たちが連携を取るために使っているのが、BPDU(Bridge Protocol Data Unit)と呼ばれる「定期連絡のお手紙」です。そして、道路(ポート)の安全を確認するために、警備員たちは「3つのタイマー(時間)」を厳格に守っています。
まずは、この3つの時間ルールを覚えておきましょう。
| タイマー名 | デフォルトの時間 | 役割(現実世界に例えると?) |
| :— | :— | :— |
| Hello Time | 2秒 | 「生きてる?」と定期的にお互いへ声をかける間隔 |
| Max Age | 20秒 | 「連絡が途絶えて20秒経ったら、道路が崩落したとみなす」というタイムアウト時間 |
| Forward Delay | 15秒 | 道路を開通させる前に、安全確認をするための「一時停止」の時間 |
特に重要なのが、Max Age(20秒)と Forward Delay(15秒)です。これらの時間が、ポートの「状態遷移」にどう関わってくるのか、いよいよ本題の遷移プロセスを見ていきましょう!
—
信号機のように変わる「5つのポート状態」
通行止めされていた道路が、メイン道路の障害を検知して、車が通れるようになるまでには、いくつかのステップを踏みます。いきなり「はい、開通!」としてしまうと、まだ古い情報が残っていてループが発生してしまうかもしれないからです。
警備員(スイッチ)は、以下の5つの状態を順番にクリアしながら、慎重に道路を開通させていきます。
[Blocking] ──(障害発生 / Max Age 待ち)──> [Listening] (15秒)
│
(Forward Delay)
▼
[Forwarding] <──(Forward Delay)────── [Learning] (15秒)
それぞれの状態を、実況中継風に見ていきましょう。
1. Blocking(ブロッキング)状態:通行止め
- 状態: 車(データパケット)の通行は「禁止」です。
- 警備員の動き: お互いの定期連絡(
BPDU)を聞くことだけをしています。 - 例えるなら: 「ここは通行止めです!ただし、本部からの無線連絡(
BPDU)は受信できるように、耳だけは澄ませておきます」という状態です。
2. Listening(リスニング)状態:周りの様子を伺う(15秒)
メインの道路が土砂崩れなどで通れなくなったとき、ついにこのポートの出番が来ます。
- 状態: まだ車(データパケット)は通せません。
- 警備員の動き: 「おーい、こっちの道路を代わりに使おうと思うんだけど、誰か反対している人はいないかー?」と、周りのスイッチに自分の情報を載せたお手紙を送受信して、調整を始めます。
- 期間: ここで
Forward Delay(15秒)の間、じっと耳を傾けます。 - 例えるなら: 通行止めの看板を外す前に、「本当にここに車を流して大丈夫か?別の場所でループが起きていないか?」を周りの警備員と無線で確認し合っている時間です。
3. Learning(ラーニング)状態:誰がどこにいるかメモする(15秒)
周りから反対意見が出なければ、次は「お勉強」の時間に入ります。
- 状態: まだ車(データパケット)は通せません。
- 警備員の動き: 通過しようとする車(パケット)の「送信元MACアドレス」を見て、「なるほど、この車(デバイス)はこっちの方向にいるんだな」という対応表(MACアドレステーブル)を頭の中に書き込んでいきます。
- 期間: ここでもう一度
Forward Delay(15秒)を消費します。 - 例えるなら: 「よし、道路を開通させるぞ。でもその前に、どんな車がここを通ろうとしているのか、事前にメモ(学習)しておこう。いきなり通すと、どこに届ければいいか分からなくて迷子になっちゃうからね」という準備時間です。
4. Forwarding(フォワーディング)状態:全面開通!
- 状態: お待たせしました!車(データパケット)の双方向の通行が「完全許可」されます。
- 警備員の動き: 通常通り、データを右から左へ、左から右へと高速に転送します。
- 例えるなら: 「お待たせしました!安全確認も、ルートの学習もバッチリです。どうぞ通ってください!」と、青信号を点灯させた状態です。
5. Disabled(ディセーブルド)状態:お休み
- 状態: そもそもケーブルが抜けているか、管理者がコマンドでポートを「シャットダウン」している状態です。警備員は完全に居眠り(稼働停止)しています。
—
結局、通信ができるようになるまで「何秒」かかるの?
ここが試験や実務でもよく問われる、とても面白いポイントです。
実は、障害の起き方によって、開通までの時間が「30秒」か「50秒」かに分かれます。
パターンA:自分の目の前のケーブルが切れた場合(直接障害)
自分の目の前のリンクが切れたときは、スイッチは「あ、目の前が切れた!」と一瞬で気づきます。
そのため、Max Age(20秒)を待つ必要がありません。すぐに代替ポートを Listening に移行させます。
Listening(15秒) +Learning(15秒) = 合計 30秒 で復旧!
パターンB:自分から見えない遠くの場所で障害が起きた場合(間接障害)
自分とは直接つながっていない、隣の隣のスイッチの間で障害が起きたような場合、スイッチはすぐには気づけません。
「あれ?いつも2秒おきに来る定期連絡(BPDU)が来ないぞ……?」と、じっと待ちます。
- 定期連絡が途絶えてから「本当に壊れたんだな」と判断するまでの時間(
Max Age) = 20秒 - そこから
Listening(15秒) +Learning(15秒) = 30秒 - 合計 50秒(20秒 + 30秒) で復旧!
「えっ、ネットワークが切れてから復旧するまでに50秒もかかるの!?」と思いましたよね。そうなんです。現代のWeb会議やオンラインゲームの基準からすると、50秒の通信断は致命的です。そのため、現代の実務では、この弱点を克服して数秒(あるいはミリ秒単位)で切り替える「RSTP(Rapid Spanning Tree Protocol)」という高速版が主流になっています。
ですが、そのRSTPの仕組みを理解するためにも、この基礎となるクラシックなSTPの「タイマーの役割」を理解しておくことが絶対に欠かせないのです!
—
現場で役立つ!Ciscoスイッチでの設定と状態確認
それでは、インフラエンジニアとして実務に役立つよう、CiscoのCatalystスイッチを例に、設定コマンドと状態確認の方法を見ていきましょう。
1. スパニングツリーの状況を確認する
実務でトラブルシューティングを行う際、最もよく叩くコマンドがこれです。
Switch# show spanning-tree vlan 1
このコマンドを叩くと、以下のような情報が出力されます(読みやすいようにコメントを入れています)。
VLAN0001
Spanning tree enabled protocol ieee <-- 標準のSTP(PVST+等)が動作中
Root ID Priority 32769
Address 000a.00b0.00c0
This bridge is the root <-- このスイッチが親分(ルートブリッジ)です!
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Gi0/1 Desg FWD 4 128.1 P2p <-- 「FWD」はForwarding(開通中)
Gi0/2 Altn BLK 4 128.2 P2p <-- 「BLK」はBlocking(通行止め中)
上記出力の Sts(Status)の部分に注目してください。
BLK:BlockingLIS:ListeningLRN:LearningFWD:Forwarding
障害発生時にこのコマンドを連打すると、BLK -> LIS -> LRN -> FWD と、タイマー通りに状態が変わっていくリアルな挙動を観察することができます。パケットが生きて動いていることを実感できる、とてもワクワクする瞬間です!
2. 【実務の知恵】タイマー値の調整(安易な変更は禁物!)
実は、これらのタイマー(Max Age や Forward Delay)は、コマンドで変更することができます。しかし、「早く切り替えたいから」といって安易に短くするのは非常に危険です。
! --- 警告:実務で変更する場合は、ネットワーク全体の規模を考慮し慎重に行ってください ---
Switch(config)# spanning-tree vlan 1 hello-time 2
Switch(config)# spanning-tree vlan 1 max-age 20
Switch(config)# spanning-tree vlan 1 forward-time 15
もし、ネットワーク全体の規模(スイッチの台数)が大きいのに、これらのタイマーを極端に短くしてしまうと、「一時的な処理の遅れ」を「ルートの崩落」と勘違いして、スイッチたちが一斉に再計算を始めてしまい、ネットワークが不安定になる(バタつく)原因になります。設計時にはデフォルト値を尊重し、高速化が必要な場合はRSTPなどの上位プロトコルを導入するのが業界のベストプラクティスです。
—
まとめ:一歩ずつ、プロトコルの深淵へ
今回は、STPのポート状態遷移と、それを制御するタイマーの役割について解説しました。
- Blocking(通行止め)から Forwarding(開通)までは、安全確認(
Listening)とお勉強(Learning)のステップを踏む。 - 安全確認とお勉強の時間は、それぞれ
Forward Delay(15秒) ずつ。 - 通信ができるようになるまで、直接の障害なら 30秒、遠くの障害なら 50秒(
Max Ageの20秒が加算される)かかる。
一見、数字ばかりで無機質に見えるプロトコルの世界ですが、その1秒1秒のタイマー設定には、先人たちが「どうすればループによる大破滅を防ぎつつ、安全にネットワークを切り替えられるか」を考え抜いた知恵と歴史が詰まっています。
これを機に、ぜひ実機やシミュレーターでコマンドを叩いて、ポートの状態が変わっていく様子をその目で観察してみてください。きっと、ネットワークがもっと面白くなるはずです。
皆さんのインフラエンジニアとしての第一歩を、心から応援しています。一歩ずつ、楽しみながら理解を深めていきましょう!
コメント