ラディア・パールマンと出会い、スパニングツリープロトコルがイーサネットのループを防ぎ、冗長化を可能にして大規模ネットワークを安定化させた仕組みを学びましょう。

イーサネットは最初、同じ建物内のコンピュータをつなぐ単純な手段でした。オフィスやキャンパス、データセンターに広がるにつれて期待は変わりました:ローカルネットワークは「あると便利」だったものから、メール、ファイル共有、プリンタ、電話、そして最終的にはビジネスワークフロー全体の配管のような存在になりました。その配管が壊れると、上流のサービスはすべて止まります。
ネットワークを作る人々はまた重要な信頼性の教訓を学びました:デバイス間に一つの経路しか設計していないと、ケーブルやスイッチの単一障害で広範囲がダウンします。明らかな解決策は冗長化—追加のリンクと追加のスイッチです。
しかしレイヤ2の世界では、冗長化には危険な副作用があります:ループです。
ラディア・パールマンはスパニングツリープロトコル(STP)を設計しました。これは、イーサネットネットワークがループで壊れることなく冗長性を持てるようにする仕組みです。彼女の貢献は「より太いパイプを作る」ことではなく、スイッチが分散して協調し、安全なフォワーディング構造に合意し、トポロジ変化に自動で適応する実用的手法を示した点にあります。
STPは、存在しないか誤設定されていないときにのみ意識されるタイプのシステムです。正しく動作していれば特別なことは見えません:トラフィックは流れ、リンクはアップのままで、ネットワークは障害を許容します。STPはループを防ぐために必要最小限の経路をブロックしつつ、アクティブ経路が切れたときに代替経路を準備しておく、そんな静かな働きをします。
イーサネットループがどのように見えるか、なぜストームや障害を引き起こすのかを具体的に示します。次にSTPのコアアイデアを説明します――どのように冗長性を保ちながらループを排除するのか、スイッチがどのようにしてどのリンクをフォワードし、どのリンクを待機状態にするかをわかりやすく解説します。読了までに、STPがなぜレイヤ2スイッチングの基盤となったのか、そしてイーサネットが初期のオフィス用途をはるかに超えて拡張してもパールマンの設計が重要である理由の直感的なモデルが得られるでしょう。
初期のイーサネットネットワークは小さくて単純なことが多く、数台のマシンが共有セグメントに接続されていたり、その後いくつかのスイッチ(古い用語では「ブリッジ」)がセグメントをつないでいました。ケーブルが一本抜けても問題は分かりやすかった。
組織が部屋やフロア、ビルを増やすと、ネットワークはきれいな設計図のように成長することは稀です。生き物のように増えていきます:ここにスイッチを追加、あそこに“緊急”配線、いつの間にか恒久化した一時的な回避策。
こうした成長の過程で実用上余分なリンクが追加されます:
個々の変更は無害に見えることがありますが、集まると同じスイッチ間に複数の経路ができあがります。
冗長化は稼働時間を改善するため望ましいです。一つのリンクが切れてもトラフィックは別経路を通り、ユーザーは作業を続けられます。
しかしレイヤ2(スイッチング)では、イーサネットは自動的に一つの経路を選んで他を無視する仕組みを持っていません。スイッチは学習したアドレスに基づいてフレームを転送し、調整のないまま複数経路が存在するとループが発生します。
ここが本質的な緊張です:より多くのケーブルがかえってネットワークを壊すことがある。冗長化のために追加した接続自体が、トラフィックが無限に循環する条件を作り出してしまうのです。スパニングツリーは冗長性の利点を保持しつつ、こうした偶発的でネットワーク全体を巻き込む障害を防ぐために生まれました。
イーサネットのスイッチングループは、同じスイッチ間に二つ以上の有効なレイヤ2経路があるときに発生します。多くは誰かがバックアップケーブルを追加したり、両方のアップリンクを同じネットワークに差したり、スイッチを制御機構なしにリング状につないでしまったときです。レイヤ2にはホップ制限がないため、フレームは無限に循環できます。
一部のトラフィックは意図的にフラッディングされます:ブロードキャスト(ARP要求など)や「宛先不明」フレーム(スイッチがまだMACテーブルにアドレスを学習していない場合)。ループでは、そのフラッディングされたフレームがコピーされてループ内を回り、さらにコピーされ……と増え続けます。
単純な例:PCがARPで「10.0.0.5は誰?」と尋ねると、ループがあると各スイッチがブロードキャストを複数ポートに繰り返し送出し、重複したコピーが他のスイッチに戻ってきます。非常に短時間で、リンクとスイッチのCPUは重複処理で圧迫され、本来のトラフィックの余地がほとんどなくなります。
スイッチは送信元MACアドレスがどのポートから来たかを見てデバイスの位置を学習します。ループでは同じデバイスのフレームがミリ秒単位で異なるポートに到着するため、スイッチはそのMACの位置を何度も書き換えて「心変わり」します。その結果、トラフィックは誤ったポートに送られ、次にフラッディングされ、再び誤学習されることになります。
これらの影響は人々が認識する症状につながります:突然のネットワーク全体の遅延、断続的な切断、電話の切断、Wi‑Fiが「つながっているが使い物にならない」、場合によってはスイッチが飽和して応答を停止し完全な障害を起こすこともあります。一本の誤ったパッチケーブルが、接続した二台以上の設備に影響を与えるのです。
イーサネットの冗長性は、スイッチ間に「複数の可能な経路」があることから生まれます。ケーブルが切断されたとき、トラフィックは別経路を使えます。問題は余分な経路が偶然円を作ることがあり、そしてイーサネットフレームには循環を止める「TTL(生存時間)」がない点です。
スパニングツリープロトコル(STP)はシンプルな約束でこれを解決します:冗長リンクは物理的に接続したまま、しかし論理的にいくつかを無効にすることで、アクティブなネットワークをループのない木にするのです。
余分な道路を作って救急車が迂回できるようにした都市を考えてみてください。すべての道を制約なく開けると、運転者が同じ区画をぐるぐる回る混乱した環状ルートが生まれるかもしれません。
STPは交通規制のように機能します:
パールマンの設計の重要な点は、すべてのスイッチを中央コントローラで制御しないことです。各スイッチが参加し、小さなメッセージを交換してどのリンクがフォワードし、どれが待機するかについて独立に同じ結論に達します。
これによりSTPは現実のネットワークで実用的になります:スイッチを追加したり、リンクを外したり、故障が起きてもネットワークは安全なフォワーディングパターンへ収束します。
正しく運用すればSTPは通常対立する二つの成果を同時に実現します:
STPの役割は単純です:イーサネットの冗長性を維持しつつトラフィックが永遠に回り続けるのを防ぐこと。これを実現するために、スイッチ全体で「今この瞬間に使うべき最良のリンク集合(スパニングツリー)」を合意し、余剰なリンクは待機状態にします。
STPはまずルートブリッジを選出します。ルートはネットワーク全体の基準点です。優先度(設定値かデフォルト)と固有のスイッチ識別子を組み合わせた値が低い方が勝ちます。
各スイッチは「ルートまでの最良経路はどれか?」を求めます。STPは各リンクにパスコストを割り当て(高速リンクは通常より低コスト)、スイッチは経路上のコストを合計して最小の合計となる経路を選びます。
非ルートスイッチがその最良経路でルートに到達するために使うポートがルートポートになります。
各共有接続(セグメント)に対して、STPはルートに向かってトラフィックをフォワードするスイッチを一つだけ選びます。これはそのセグメントの指定ポートです。セグメント上でルートへの最良経路を広告する側が、指定ポートの役割を得ます。
ルートポートでも指定ポートでもないポートはブロッキング(古い表現)や類似の非フォワーディング状態になります。ブロッキングはケーブルを切るわけではなく、通常のイーサネットフレームをフォワードしないようにするだけです。アクティブなリンクが故障した場合、STPは待機していたバックアップ経路のブロックを解除してネットワークを維持します。
四台のスイッチを使った簡単な例でSTPを具体化しましょう:
STPはまず一つの参照点(ルートブリッジ)を選びます。各スイッチはブリッジIDを広告し、最も低いIDが勝ちます。
ここではS1が最も低いブリッジIDを持っていると仮定し、全員がS1がルートであることに合意します。
非ルートスイッチはそれぞれ一つのルートポートを選びます:S1への最良経路を提供するポートです。
各リンクセグメントごとにSTPは一つの指定ポートを選びます。ルートポートでも指定ポートでもないポートはブロッキングになります。
この例ではループを切るのはS3–S4のリンクです。S3が既にS2経由でルートに到達できるので、STPはS3のS4側ポート(あるいはタイブレーク次第でS4側ポート)をブロッキングにすることができます。
結果:すべてのケーブルは差さったままですが、任意の二点間にアクティブな経路は一つだけになり、ループは発生しません。
アクティブ経路が切れた場合(例:S2–S3がダウンしたとする)、STPは再評価を行います。以前ブロックされていたS3–S4のリンクはフォワーディングへ移行し、S3 → S4 → S1経由で接続を回復できます。
この変化は瞬時ではありません。STPは安全にフォワード状態を更新してループを再発しないように収束する時間(コンバージェンス)を必要とします。
スパニングツリーが機能するためには、ネットワーク内のすべてのスイッチが同じルールに従う必要があります。企業ネットワークはマルチベンダーで構成されることが多いため標準が重要です。共有プロトコルがなければ、あるベンダーの“ループ防止”機能が別のベンダーの機器を理解できず、冗長化が障害に変わる可能性があります。
伝統的なSTPはIEEE 802.1Dで定義されています。規格の条文を読む必要はありませんが重要なのは、802.1Dが異なるベンダー間でルートブリッジの選出、パスコストの計算、フォワード/ブロックポートの決定方法について共通の言語を提供している点です。
後でRSTPやMSTPなどの新しい変種に移行しても、振る舞いが標準化されているため機器間で協調できるのです。
スイッチは小さな制御フレームである**BPDU(Bridge Protocol Data Unit)**を使って協調します。BPDUはスイッチがルートを誰と見なしているか、ルートまでの距離(コスト)、タイミング情報などを運び、スイッチ同士がトポロジの共通認識を持てるようにします。
BPDUは継続的に交換されるため、リンクが切れればBPDUのやり取りも変わり、スイッチは再収束して以前ブロックされていた経路を開けることができます。
実務上の曲折として、ベンダーごとに同じ設定に異なる名前を付けることがあります。port cost、edge/PortFast、bpdu guard のような設定はメニューや表現が異なりますが、基礎概念は一貫しています。802.1Dが何を目指すかに翻訳して考えると理解しやすくなります。
古典的なSTP(IEEE 802.1D)はループを解消しましたが、リンクやスイッチ障害後の「回復」が非常に遅いことがありました。理由は単純で、STPは保守的だったからです。ポートはすぐにフォワードに移行せず、定められたタイマに従って状態を遷移しました。デフォルトのタイマだと再収束に数十秒(多くは30〜50秒)かかり、音声通話が切れたりアプリがタイムアウトしたり、ユーザーが「ネットワークが落ちている」と判断するほどです。
Rapid Spanning Tree Protocol(RSTP、IEEE 802.1w)は目的は同じ—冗長性を保ちつつループを防ぐ—ですが、スイッチが合意に達する方法を変えました。
長い固定タイマを待つ代わりに、RSTPはスイッチ間の迅速なハンドシェイクを使ってどのポートが安全にフォワードできるかを確認します。また、以下のような即時遷移が認められます:
要するに:RSTPは正しいリンクをブロックする点は同じですが、変化ごとに最悪ケースとして扱うのをやめ、より速く回復します。
ネットワークが大きくなると、すべてに対して単一のツリーを使うのは制約になります。特に多くのVLANや複雑なトポロジのときです。Multiple Spanning Tree Protocol(MSTP、IEEE 802.1s)は複数のスパニングツリーインスタンスを作成し、VLAN群をそれぞれのインスタンスにマッピングできます。
これにより:
STP → RSTP → MSTP を通じての主要な改善点は一貫しています:冗長性を維持し、ループを防ぎ、より速く予測可能にフォワーディングを回復することです。
スパニングツリーの最も過小評価されがちな利点は、"余分なケーブルとスイッチ"を予測可能な信頼性に変える点です。企業規模では多数のクローゼット、多くのアクセススイッチ、絶え間ない移設/追加/変更があり、レイヤ2の冗長性は贈り物にも罠にもなり得ます。STPはそれを前者にしやすくします。
大規模ネットワークが故障する原因は単一リンクの断線よりも、回復操作が混乱することです。STPは何かが変わったときにネットワークが制御された方法で反応する手段を提供します:
多くの組織は自分たちのトポロジがループフリーだと思っていてもSTPを有効にしたままにしています。理由は実用的です:人はミスをするし、ドキュメントは古くなり、予期しないレイヤ2経路が現れる。STPがオンなら、誤って追加されたパッチコードは建物全体の障害ではなく"ブロックされたポート"を生み出す可能性が高くなります。
現代のデータセンターはルーティングされたリーフ–スパインファブリック(レイヤ3)や特定のレイヤ2マルチパス技術を好み、クラシックなSTPの収束に頼らずアクティブ/アクティブの帯域を確保することが多いです。それでもSTP(RSTP/MSTPなどを含む)はキャンパスネットワークやエッジセグメント、純粋なレイヤ3が実用的でない場面では広く使われています。
大規模になると、STPの本当の成果は技術的なもの以上に運用性にあります:専門家だけでなく一般的な運用チームが冗長化を扱えるようにした点が重要です。
STPの概念は単純です—レイヤ2ループを防ぎつつバックアップ経路を残す—しかしいくつかの根強い誤解が人々にSTPを無効化させたり、誤設定させたり、最悪の場合それが障害に繋がるよう“最適化”させてしまいます。
確かに現代のネットワークはレイヤ3ルーティング、MLAG、オーバーレイ設計に頼ることが増え、古典的なIEEE 802.1Dが不要に思える場合があります。しかしSTP(RSTP/MSTPなどの新形態を含む)は、イーサネットで偶発的にループができる場所すべてに安全網を提供します:アクセススイッチ、イベント用の一時ネットワーク、ラボ、小規模な支店など。STPを無効にすると、単純な配線ミスがネットワーク全体のVLANを巻き込むブロードキャストストームに発展することがあります。
ブロックポートは“死んでいる”わけではありません。予め検証された待機経路です。STPはある程度の能動容量を犠牲にして安定性を得るトレードオフをしています。STPを切ってすべてのリンクをアクティブにしようとしたり、VLANを平坦化したり、アンマネージドスイッチを追加したりすると、一見効率的に見えるかもしれませんが、最初のループがネットワークを溶かします。
冗長化は設計されている場合にのみ有益です。スイッチ間に余分なクロスリンクを無計画に追加すると、ループの可能性が増えてSTPの振る舞いが予測しづらくなります。結果は意図しないトラフィック経路、ブロックされたアップリンク、障害後の長い再収束時間などです。
STPを有効にしていても、誤った設定は実際の障害を招きます:
要点:STPは単なるチェック項目ではなく制御プレーンです。意図を文書化し、変更を展開する前に検証してください。
STPの問題は多くの場合「ネットワークが遅い」として現れてからレイヤ2問題だと気づかれます。いくつかの焦点を絞ったチェックで何時間もの推理を省けます。
イーサネットループやSTPの不安定性があると、よく以下が見られます:
基本から始めましょう:
良いSTPの運用はほとんどがプロセスの問題です:
STP以外のネットワーク診断の幅広いチェックリストが必要なら、/blog/network-troubleshooting-basics を参照してください。
STPは“静かなインフラ”の良い例で、人為的な失敗(意図の不明確さ、文書化されていない配線、不整合な設定、アドホックなトラブルシュート)で壊れる傾向があります。リスクを減らす実践的な方法の一つは、STP運用のための軽量な内部ツールやルーブックを作ることです。
Koder.ai を使えば、スイッチ出力を取り込んで現在のルートブリッジをハイライトしたり、予期しないブロックポートをフラグ付けしたり、トポロジ変更イベントを時系列で追跡するような小さなダッシュボードやユーティリティを簡単に作れます。Koder.aiはソースコードのエクスポートやアプリのデプロイ/ホスティング(ロールバックとスナップショット付き)をサポートするので、属人的なスクリプトを誰かのノートパソコン上に置くのではなく、保守される内部サービスに変えるのに便利です。
ラディア・パールマンのスパニングツリーの仕事は、最も重要なインフラの一部が派手に見えないこと—混乱を防ぐことに尽きる—を思い出させてくれます。イーサネットが冗長リンクを使えるようにしながらループを作らない実用的な方法を与えたことで、STPは「バックアップ経路を追加する」ことを危険な実験ではなく安全なデフォルトに変えました。この変化が、企業やキャンパス、データセンターでより大きく耐障害性の高いレイヤ2ネットワークを可能にしました。
STPは必ず何かがうまくいかなくなることを前提にしています:ケーブルが間違ったポートに差される、スイッチが再起動する、リンクがフラップする。運用者がミスをしないことを期待する代わりに、ミスを吸収して安全な状態に収束するシステムを構築しています。この教訓はネットワーキングを超えた普遍的なものです:障害モードを設計要件の第一級に扱いましょう。
スパニングツリーは意図的に一部のリンクをブロックして全体の安定性を守ります。その“無駄な容量”はトレードオフです。良いシステムはしばしば余裕を残します—時間、チェック、ガードレールを多めにとる—のは破滅的な故障を避けるために有益だからです。
多数のコンポーネントが協調する必要がある場合、各コンポーネントが同じ分散ルールに従い小さな制御メッセージで合意に達する方が、人が毎回手動で決めるより安全です。STPはこれを実現した好例で、手動でポートを閉じる手間を減らしています。
覚えておくべきポイントは少数です:冗長化を作る、人的ミスを想定する、安全な選択を自動化する。これらの考え方こそが、スパニングツリーが静かな必需品になった理由です。
さらにわかりやすいネットワーキング入門が必要なら、/blog をご覧ください。
レイヤ2のループは、同じセグメント間でスイッチに二つ以上の有効な経路が存在し、閉路(サイクル)が形成される状態を指します。イーサネットフレームはレイヤ2でホップ制限を持たないため、ブロードキャストや宛先不明のユニキャストなどのフラッディングトラフィックが無限に循環・増幅され、リンクとスイッチのCPUを圧迫します。
冗長化は代替経路を追加しますが、調整がなければスイッチはすべての経路で転送を行うかもしれません。すると、フラッディングされたフレームが繰り返し複製されるループが生じ、ブロードキャストストームやMAC学習の不安定化を引き起こします。つまり、余分なパッチケーブル一つでネットワーク全体が壊れることがあります。
STPは冗長リンクを物理的に残したまま一部のポートを論理的に無効化し、アクティブなトポロジをループのない木(スパニングツリー)にします。アクティブ経路が障害を起こしたときは、以前にブロックされていたポートをフォワーディングに切り替えて接続を回復します。
STPはレイヤ2ドメイン全体の参照点としてルートブリッジを選出します。ルートブリッジはブリッジID(優先度+ユニークID)が最も低いスイッチです。意図したコアや配布層スイッチがルートになるよう設定すると、経路が予測しやすくなります。
各非ルートスイッチは、ルートへの合計経路コストが最も低くなるポートを一つだけ選び、それがルートポートになります。経路コストは通常リンク速度に基づき、速いリンクほど低コストとして扱われます。タイブレークにはID情報が使われ、決定は決定論的になります。
各スイッチ間の共有セグメント上で、STPはセグメントに対して必ず一つの**指定ポート(designated port)**を選び、そのポートがセグメントのトラフィックをルート方向にフォワードします。セグメント上でルートへの最良経路を広告する側が指定ポートになるというルールで決まります。
そのポートは通常のユーザートラフィックを転送しない状態になります。つまりループに参加しないようにフォワーディングを止めるだけで、物理ケーブル自体は接続されたままです。トポロジ変化が起きた場合、そのブロックポートがフォワーディングに昇格して新しい経路を提供できます。
BPDUs(Bridge Protocol Data Units)はSTPの制御フレームで、スイッチ同士がルート候補・ルートまでのコスト・タイミング情報などのトポロジ情報を交換するために使います。BPDUsを継続的にやり取りすることで、障害や変更を検出し、ループのないトポロジへ再収束できます。
古典的なSTP(IEEE 802.1D)は、ポートが段階的な状態(blocking → listening → learning → forwarding)を順に経るため、再収束に数十秒(典型的には30〜50秒)かかることがありました。RSTP(IEEE 802.1w)は高速なハンドシェイクと急速移行を採用し、特にエッジポートでは即時にフォワーディングできるなど、復旧時間を大幅に短縮します。
簡単なチェックリスト:
これらはSTPやループ疑いの初期診断で有効です。
STPは概念としては単純ですが、いくつかの誤解が原因で人為的な障害を招きます。例えば「STPはもう時代遅れだ」と無効化するのは危険ですし、「ブロックされたリンクは無駄だ」としてSTPを切ると、ループがネットワークを溶かします。設定ミス(ルートのプライオリティ設定ミス、STPモードの混在、edgeポート誤適用など)も実運用で大きな障害になります。STPは単なるチェックボックスではなく制御平面なので、意図を文書化し、変更を検証してから広げることが重要です。