【入門編】 STPにおけるBPDU(Bridge Protocol Data Unit)のメッセージフォーマットと各種タイマー設定 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

こんにちは!ネットワークの世界へようこそ。インフラアーキテクトの私です。

日々のインフラ構築や運用現場で、スイッチ同士をLANケーブルで繋いだとき、「あ、ループしちゃった!」と冷や汗をかいた経験はありませんか? ネットワーク全体がパケットの嵐(ブロードキャストストーム)に飲み込まれ、一瞬で通信不能になるあの悪夢……。

それを未然に防いでくれるのが、L2世界の守護神 STP(Spanning Tree Protocol) ですよね。

今回は、そのSTPがスイッチ間で交わしているヒミツの暗号、BPDU(Bridge Protocol Data Unit) のメッセージフォーマットと、ネットワークの命運を握る「3つのタイマー」について、身近な例えを交えながら一歩ずつ優しく紐解いていきたいと思います。

難しい英語やビット数に拒絶反応が出そうな初学者の方も大丈夫です。コーヒーでも飲みながら、リラックスして読み進めてくださいね!

—

1. BPDUってなに? 郵便配達に例えてみよう

スイッチたちは、お互いに「ここにボクがいるよ!ループしてないかい?」と確認し合わないと、自分が今どんなネットワーク環境にいるのか分かりません。そのために、定期的にすれ違いざまに交換しているのが BPDU という制御用メッセージです。

これを分かりやすく例えるなら、「村の安全を守るための見回り報告の手紙(定期便)」 です。

スイッチという名の村人たちが、2秒に1回(デフォルトのHello Time)、隣の村人に向けて手紙を送り合います。「今の村のリーダーはボクだよ」「これだけの遠回りをしてここにたどり着いたよ」といった近況報告が書かれているわけです。

BPDUには大きく分けて2つの種類があります。

1. コンフィグBPDU(Configuration BPDU): 通常時の定期連絡用。村のリーダー(ルートブリッジ)が誰かを決めるための大切なデータが詰まっています。
2. TCN BPDU(Topology Change Notification): 「大変だ!さっきまで繋がっていた道が途切れたぞ!」という、緊急のトポロジ変更通知です。

—

2. BPDUの中身をのぞいてみよう(メッセージフォーマット)

それでは、彼らがやり取りしている「手紙」の中身、つまりBPDUのメッセージ構造を優しく分解してみましょう。

BPDUは、大きく分けると「共通ヘッダー」と「本体(ボディ)」に分かれています。難しそうな用語が並びますが、要するに「誰から届いた手紙で、今の状況はどうなっているか」が書かれているだけです。

📌 コンフィグBPDUの主なフィールド構造

  • プロトコルID(Protocol Identifier): 「これはSTPの手紙ですよ」というお約束のマーク(通常は 0x0000)。
  • プロトコルバージョン(Protocol Version): 「STPのバージョン何世の書き方か」を表します(通常のSTPなら 0x00)。
  • メッセージタイプ(Message Type): 「通常の手紙(0x00)」なのか「緊急のTCN手紙(0x80)」なのかを示します。
  • フラグ(Flags): ネットワークの状況変化(TCNやTCAなど)を伝えるチェックボックスのようなものです。
  • ルートID(Root Identifier): 「今、この世界で一番えらいボス(ルートブリッジ)は誰だと思っているか」のスイッチのID(MACアドレスとプライオリティの組み合わせ)。
  • ルートパスコスト(Root Path Cost): 「そのボス(ルートブリッジ)に行くまでに、どれくらいコスト(距離・手間)がかかるか」。
  • ブリッジID(Bridge Identifier): 「この手紙を書いた本人(今持っているスイッチ)」のID。
  • ポートID(Port Identifier): 「この手紙をどの差込口(ポート)から送り出したか」。
  • タイマー関連(Timer Values): 後述する Hello Time や Max Age、Forward Delay の値がここに書かれています。

—

3. ネットワークの命を握る「3つのタイマー」

BPDUのメッセージの中には、ネットワークの「時間の流れ」をコントロールする大切なタイマー情報が含まれています。ここが今回のハイライトです!

STPには、デフォルトで以下の3つの重要なタイマーが存在します。

[Hello Time: 2秒]  -> 定期便を出す間隔
[Max Age: 20秒]    -> 「リーダーからの手紙が来ないぞ…?」と疑い始めるまでのタイムリミット
[Forward Delay: 15秒] -> ポートが慎重に様子見(Listening/Learning)をする時間

それぞれの役割を、もう少し詳しく見ていきましょう。

① Hello Time(デフォルト:2秒)

  • 役割: ルートブリッジが「ボクは元気だよ!」とコンフィグBPDUをばら撒く間隔です。
  • 現実世界の例: 村のパトロール隊が「異常なし!」と2秒おきに笛を吹いて回るようなものです。この間隔が短すぎるとスイッチのCPUが忙しくなり、長すぎると障害検知が遅れます。

② Max Age(デフォルト:20秒)

  • 役割: スイッチが「最後にボスからの手紙を受け取ってから、何秒までならボスの生存を信じ続けるか」という寿命(タイムリミット)です。
  • 現実世界の例: もしボスの村から20秒間もパトロールの笛が聞こえなくなったら、「あれ?ボスに何かあったのかも……新しいリーダーを選ばなきゃ!」と、スイッチたちがざわつき始めるまでの時間です。
  • *ワンポイントアドバイス*: Hello Time の約10倍に設定されるのがお約束です。

③ Forward Delay(デフォルト:15秒)

  • 役割: ネットワークの構成が変わったとき、ポートがすぐに通信を始めず、「ちょっと待った!本当にループしない?」と安全確認(Listening状態とLearning状態)に費やす時間です。これが2回分(Listeningで15秒、Learningで15秒)挟まるため、一般的なSTPが通信を再開するまで合計30秒〜50秒ほどかかります。
  • 現実世界の例: 新しい道路が開通したとき、いきなり車を通さず、まずは警察官が立って安全確認(試運転)をするようなものです。安全第一ですね!

—

4. 実務で活かす!タイマーチューニングの勘所

「デフォルトのままでも動くなら、いじらなくていいのでは?」と思いますよね。その通り、小規模なネットワークならデフォルトで十分です。

しかし、スイッチが何台も連なる大規模なネットワークでは、障害が起きたときの「30秒〜50秒の通信断(ブラックアウト)」が業務に致命的な影響を与えることがあります。

だからといって、タイマーの値をテキトーに短くすると、「誤検知(フラッピングの嵐)」を引き起こす原因になります。特に Max Age や Hello Time をむやみにいじるのは禁物です。

どうしても収束時間を速くしたい近代的なネットワークの現場では、古いSTP(802.1D)ではなく、次世代規格である RSTP(Rapid Spanning Tree Protocol / IEEE 802.1w) を採用するのが現在のデファクトスタンダードです。RSTPであれば、タイマーに頼るのではなく「ハンドシェイク(対話)」によって数秒で経路を切り替えることができます。

とはいえ、CiscoなどのCLIでSTPのパラメータを確認・調整する基本コマンドは、インフラエンジニアの必須教養です。以下に実務でよく使う設定例を載せておきますね。

🛠️ 実践:Cisco IOSでのSTPプライオリティとタイマー確認・調整の例

# 現在のSTPの状態とタイマー設定を確認するコマンド
SW1# show spanning-tree vlan 1

VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32768
             Address     0011.2233.4455
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32768  (priority 32768 sys-id-ext 1)
             Address     0011.2233.4455
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

もし、このスイッチを強制的にルートブリッジ(村のボス)にしたい場合は、以下のようにプライオリティを下げます。

# 特権EXECモードに入り、グローバルコンフィグモードへ移行
SW1# configure terminal

# 特定のVLANに対してルートブリッジのプライオリティをプライマリ(最優先)に設定する
SW1(config)# spanning-tree vlan 1 root primary

# 独自のタイマー値を変更したい場合(※変更時はネットワーク全体で整合性を合わせる必要があります)
SW1(config)# spanning-tree vlan 1 hello-time 2
SW1(config)# spanning-tree vlan 1 forward-time 15
SW1(config)# spanning-tree vlan 1 max-age 20

# 設定を保存する
SW1(config)# end
SW1# write memory

—

まとめ:一歩ずつ、確かなインフラ知識を

今回は、BPDUのメッセージ構造と、STPの心臓部である3つのタイマーについて紐解いてきました。

  • BPDU はスイッチ同士が交わす「安全確認の手紙」であること。
  • Hello Time / Max Age / Forward Delay は、ネットワークの「生存確認」と「安全な待ち時間」を司る重要なタイマーであること。

ネットワークの裏側では、こうした小さなパケットたちが絶えず会話を交わし、私たちの安定した通信インフラを陰で支えてくれています。

「難しそう」に見えるプロトコルも、その背景にある「なぜこの仕組みが必要なのか(ループを防ぎたい、安全に通信したい)」というストーリーを理解すれば、ぐっと身近に感じられるはずです。

今回の解説が、あなたのインフラ学習の小さな一歩になれば幸いです。それではまた、次回の技術の深淵でお会いしましょう!

コメント

タイトルとURLをコピーしました