こんにちは!ネットワークの世界へようこそ。インフラやネットワークの勉強を始めると、最初は「ルーター?スイッチ?IPアドレス?」と、覚えることが山積みで目が回ってしまいそうになりますよね。
特に、スイッチングハブ同士を繋いで冗長化(予備の経路を作ること)をしようとした瞬間、ネットワーク全体が麻痺してしまう「ネットワークの暴走(ループ)」という恐ろしい現象に直面したことはありませんか?
今回は、そのループを防ぐためにスイッチ同士がこっそり裏側でやり取りしている、STP(Spanning Tree Protocol:スパニングツリープロトコル)の心臓部、BPDU(Bridge Protocol Data Unit)の仕組みについて、身近な例えを交えながら優しく紐解いていきたいと思います。一歩ずつ、じっくり理解していきましょう!
—
1. なぜスイッチはループでパッチギしてしまうのか?
まずは、なぜネットワークのループがそんなに厄介なのか、現実世界に置き換えて考えてみましょう。
想像してみてください。あなたは巨大なオフィスの郵便係です。ある日、上司から「重要なお知らせを全フロアに配ってくれ」と頼まれました。あなたは一生懸命、フロアAとフロアBを繋ぐ通路に手紙を投げ入れました。
しかし、もしフロアAとフロアBの間に「ぐるっと一周できる二本の通路(環状道路)」があったらどうなるでしょうか?
あなたが投げ入れた手紙は、右回りと左回りの両方に分かれて進み、一周してあなたの背中に戻ってきます。あなたは「お、新しい手紙だ!」と勘違いして、それをまた両方の通路に投げ入れます。手紙は倍々ゲームで増え続け、あっという間にオフィスの通路は手紙の山で埋め尽くされ、誰も身動きが取れなくなってしまいますよね。
これが、ネットワークの世界で起きるブロードキャストストーム(パケットの無限ループ)です。スイッチという賢い機器は、自分宛てでないパケットを見ると「とりあえず他の全ポートにコピーしてばらまけ!」という習性を持っているため、予備の経路(冗長経路)があると、見事にこの無限の迷宮にハマってしまうのです。
2. そこで登場するのが「STP」と「BPDU」という名の交通整理
「予備の経路が欲しいけれど、ループは絶対に防ぎたい!」
このわがままな悩みを解決してくれるのが、STPというプロトコルです。
STPは、スイッチ同士が定期的に会話を交わし、「よし、この通路とこの通路は普段は通行止め(ブロック)にしておこう。メインの通路が通れなくなった時だけ、予備として開通させよう」と、ネットワーク全体の「木(ツリー)の形」を計算して決めてくれる交通整理の警察官のような存在です。
そして、このスイッチ同士の会話に使われる「秘密のメッセージ用紙」こそが、今回主役のBPDU(ビーピーディーユー)なのです。
BPDUは「ネットワーク界の住民票付き回覧板」
BPDUは、スイッチが2秒に1回という高頻度で隣のスイッチに送りつけている特別なフレームです。この中には、いわば「我が社のプロフィール」がぎっしり詰まっています。
郵便配達に例えるなら、BPDUは以下のような情報が書かれた回覧板です。
1. 「うちのスイッチは、こういう名前(ID)で、これくらい偉い(優先度が高い)です!」
2. 「ルート(中心地)までの道のりは、あとどれくらい遠い(コスト)ですか?」
3. 「この回覧板は、あと何秒で期限切れになりますか(タイマー値)?」
スイッチたちは、このBPDUを互いに見せ合いっこすることで、「誰がリーダー(ルートブリッジ)になるべきか」「どのポートを塞ぐべきか」を完璧に計算しているのです。
—
3. BPDUのフィールド構成を優しく解剖する
それでは、実際にBPDUの中身(フィールド構成)を覗いてみましょう。英語の小難しい名前が並んでいますが、怖がらなくて大丈夫です。一つずつ紐解いていきましょう。
| フィールド名 | 優しく噛み砕いた解説 | 現実世界での例え |
| :— | :— | :— |
| プロトコルID | 「これはSTPのルールで書かれた手紙ですよ」という目印 | 封筒に書かれた「【重要・STP回覧板】」のスタンプ |
| バージョンID | STPの何世代目のルールを使っているか(RSTPなど) | 使用しているマニュアルの版数(第2版など) |
| メッセージタイプ | これが通常の定期連絡なのか、構成変更の通知なのか | 「定例連絡です」か「緊急連絡です」かのチェックボックス |
| ルートID(Root ID) | ネットワーク全体の「一番偉い親玉スイッチ」は誰か | 「我が村の村長さん」の名前 |
| ルートパスコスト | その親玉スイッチに行くまでに、どれくらい通信費(コスト)がかかるか | 「村長官邸までの距離(ガソリン代)」 |
| ブリッジID(Bridge ID) | このBPDUを発行した「本人のスイッチ」の身分証 | 「私自身の名前と身分証明書番号」 |
| ポートID | スイッチの数ある差込口(ポート)のうち、どれから出したか | 「どこの玄関ドアから手紙を出したか」 |
| メッセージエイジ | この手紙が旅立ってから、どれくらい時間が経ったか | 「手紙が書かれてからの経過時間」 |
| マックスエイジ | 「この時間を過ぎたらこの手紙は古すぎるので捨ててください」という寿命 | 「手紙の有効期限」 |
| ハロータイム | 次のBPDUを出すまでの間隔(通常2秒) | 「次に回覧板を回すまでのインターバル」 |
| フォワードディレイ | 状態が変わった時に、慌てずに待つ時間(トランジション時間) | 「信号が変わってから実際に渡り始めるまでの安全確認時間」 |
このように見てみると、BPDUとは「誰が一番偉くて、どうやって中心地へ行くべきか」をみんなで共有するための連絡帳であることがよく分かりますよね。
—
4. 現場のエンジニアはどう設定している?(実務設定サンプル)
さて、ここからは実務的なお話を少しだけ。
現代のネットワークでは、CatalystやCisco系スイッチを用いて、このSTPやBPDUの振る舞いをエンジニアが手動でチューニングすることがよくあります。
例えば、エンドユーザー(パソコンやIP電話)が接続される末端のポートに対して、うっかり変なスイッチを繋がれて勝手にループを作られないように、あるいはポートが繋がった瞬間に無駄なSTPの計算(待ち時間)が発生しないように、PortFast(ポートファスト)やBPDUガードという機能を設定します。
以下に、Cisco IOS風の設定サンプルを記載します。日本語のコメントを参考に、現場の空気を感じ取ってみてください。
! ==========================================
! スイッチの末端ポート(PC接続用ポート)の設定
! ==========================================
configure terminal
! 対象のインターフェイス(例: GigabitEthernet 0/1)を指定します
interface GigabitEthernet0/1
! 【1】アクセスポートとして設定します
switchport mode access
! 【2】PortFast有効化:
! パソコンが繋がった瞬間、STPの待ち時間をスキップして即座に通信を許可します
spanning-tree portfast
! 【3】BPDUガード有効化:
! もしこのポートにユーザーが勝手にスイッチを繋ぎ、BPDU(回覧板)を送ってきたら、
! ループを防ぐために即座にこのポートをシャットダウン(遮断)します!
spanning-tree bpduguard enable
exit
この設定を入れておくことで、オフィスのレイアウト変更などでユーザーが勝手にハブを持ち込んで配線を変えてしまっても、ネットワーク全体がループの暴走に巻き込まれるのを未然に防ぐことができるのです。まさに現場の守り神のような機能ですね。
—
5. おわりに
いかがでしたでしょうか?
今回は、ネットワークの裏側で静かに働き続けるSTPと、その通信の要であるBPDUのフレーム構造について解説しました。
- ループを防ぐために、スイッチたちはBPDUという回覧板で会話している。
- 中身には「誰が一番偉いか(ルートID)」「どれくらい遠いか(コスト)」などが書かれている。
- 実務では、この仕組みを安全にコントロールするためにBPDUガードなどの機能が使われている。
ネットワークのパケットやフレームは、一見すると無機質な1と0の羅列ですが、その背景には「どうやったら安定してデータを届けられるか」というエンジニアたちの知恵と工夫のドラマが詰まっています。
今回の記事が、皆さんのインフラ学習のワクワクを少しでも広げるきっかけになれば幸いです。それではまた、次の技術の旅でお会いしましょう!
コメント