HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

スパニングツリープロトコルのインタラクティブツアー

An interactive tour of the spanning tree protocol (vincent.bernat.ch)

10 pointsby zdw1 コメント

要約

この記事は、ネットワークループを防ぐために設計されたスパニングツリープロトコル(STP)の進化形であるRSTP(Rapid Spanning Tree Protocol)について、インタラクティブなデモンストレーションを交えながら解説します。ネットワークの基本的な仕組みから、ルートブリッジの選出、ポートの役割割り当て、トポロジー変更通知、そしてRSTPが現代のネットワークでなぜ重要なのかまでを網羅しています。Radia PerlmanによるSTPの詩的な説明も紹介されています。

全文翻訳

警告 この投稿にはインタラクティブな例が含まれています。それらを視覚化して操作するには、RSSリーダーを離れる必要があります。警告 この投稿にはインタラクティブな例が含まれています。それらを視覚化して操作するには、JavaScriptを有効にする必要があります。 イベントのために3日間のオフィススペースを借りたと想像してください。あなたはいくつかのイーサネットスイッチを素早く設置し、床にケーブルをテープで固定して、全員をオンラインにします。残念ながら、あなたの最も不器用な同僚であるスタンが、コーヒーを取りに行くたびにケーブルを1本抜いてしまいます。追加のケーブルを接続することもできますが、そうするとブロードキャストストームが発生します。イーサネットパケットがループして増殖し、何もできなくなるまで続きます。そこで登場するのがスパニングツリープロトコル(STP)です。STPは、ループのないツリーを残すために、予備のケーブルをちょうど良い数だけブロックします。スタンが再びやらかしたとき、それは1秒でツリーを再構築し、あなたの1人サポートクルーであるブロビーがケーブルを再接続する時間を与えます。 自分で確かめてみてください。以下の図は、ブラウザで実際のSTP実装を実行しています。 :demo A1 @0,0 prio=4096 A2 @0,1 A3 @0,2 A4 @0,3 B1 @1,0 prio=8192 B2 @1,1 B3 @1,2 B4 @1,3 C1 @2,0 prio=8192 C2 @2,1 C3 @2,2 C4 @2,3 A1 -- A2 hazard=0 A2 -- A3 hazard=0 A3 -- A4 hazard=0 B1 -- B2 B2 -- B3 B3 -- B4 C1 -- C2 hazard=0 C2 -- C3 hazard=0 C3 -- C4 hazard=0 A1 -- B1 cost=10 B1 -- C1 cost=10 A4 -- B4 cost=20 B4 -- C4 cost=20 Leo @-0.3,0.7 proto=none icon=👦🏻 Mia @-0.3,1.3 proto=none icon=👧🏽 Joy @0.3,0.7 proto=none icon=👱🏻‍♀️ Roy @0.3,1.3 proto=none icon=👨🏾 A2 -- Leo hazard=0 A2:edge A2 -- Mia hazard=0 A2:edge A2 -- Joy hazard=0 A2:edge A2 -- Roy hazard=0 A2:edge Max @-0.3,1.7 proto=none icon=👨🏽 Zoe @-0.3,2.3 proto=none icon=👩🏾 Ada @0.3,1.7 proto=none icon=👵🏾 Amy @0.3,2.3 proto=none icon=👩🏼 A3 -- Max hazard=0 A3:edge A3 -- Zoe hazard=0 A3:edge A3 -- Ada hazard=0 A3:edge A3 -- Amy hazard=0 A3:edge Eli @0.7,0.7 proto=none icon=👦🏼 Jay @0.7,1.3 proto=none icon=👨🏻 Kai @1.3,0.7 proto=none icon=🧑🏽 Ben @1.3,1.3 proto=none icon=👱🏼 B2 -- Eli hazard=0.2 B2:edge B2 -- Jay hazard=0.2 B2:edge B2 -- Kai hazard=0.2 B2:edge B2 -- Ben hazard=0.2 B2:edge Ava @0.7,1.7 proto=none icon=👩🏻 Lea @0.7,2.3 proto=none icon=🧑🏾‍🦱 Ivy @1.3,1.7 proto=none icon=🧕🏽 Rex @1.3,2.3 proto=none icon=👴🏿 B3 -- Ava hazard=0.2 B3:edge B3 -- Lea hazard=0.2 B3:edge B3 -- Ivy hazard=0.2 B3:edge B3 -- Rex hazard=0.2 B3:edge Ana @1.7,0.7 proto=none icon=👩🏿 Eve @1.7,1.3 proto=none icon=👧🏼 Abe @2.3,0.7 proto=none icon=🧓🏿 Ian @2.3,1.3 proto=none icon=🧔🏾 C2 -- Ana hazard=0 C2:edge C2 -- Eve hazard=0 C2:edge C2 -- Abe hazard=0 C2:edge C2 -- Ian hazard=0 C2:edge Ned @1.7,1.7 proto=none icon=👨🏼‍🦳 Lou @1.7,2.3 proto=none icon=🧑🏿 Fay @2.3,1.7 proto=none icon=👧🏻 Sue @2.3,2.3 proto=none icon=👩🏽‍🦰 C3 -- Ned hazard=0 C3:edge C3 -- Lou hazard=0 C3:edge C3 -- Fay hazard=0 C3:edge C3 -- Sue hazard=0 C3:edge 注 この記事はビデオとしても利用可能ですが、インタラクティブなデモンストレーションを試すために、ここで読み続けることをお勧めします。 基本 歴史的間奏 ルートブリッジの選出 ポートへの役割割り当て トポロジー変更通知 セキュリティ なぜ今日RSTPなのか? ネットワークはどれくらい大きくなれるか? RSTPはどれくらい速いか? MSTPについて インタラクティブな例について 基本# 1980年代に設計されたスパニングツリープロトコルは、「ラピッド」フレーバー(RSTP)と「VLAN対応」バリエーション(MSTP)に進化しました。健全なネットワークエンジニアなら誰でも、BGP EVPN VXLANのようなより良い代替手段があることを知っています。しかし、どのスイッチもそれを話すため、古き良きスパニングツリープロトコルは依然としてニッチを埋めています。私たちはRSTPに焦点を当てます。これは2004年に元のプロトコルに取って代わりました。 ネットワークループを排除するために、RSTPは複雑なステートマシンを実装しています。タイマー、リンク状態の変更、そしてブリッジがネイバーから受信するリンクローカル制御フレームが、その遷移を駆動します。これらのイーサネットフレームは、ブリッジプロトコルデータユニット(BPDU)です。それらが動作している様子を以下で確認できます。「開始」ボタンを押してください。 :protocol rstp A1 @0,1 C11 @1,0 prio=4096 icon=🌳 C12 @1,2 prio=4096 icon=🌳 C21 @2,0 prio=4096 icon=🌳 C22 @2,2 prio=4096 icon=🌳 A2 @3,1 H1 @0,0.2 proto=none icon=💻 H2 @0,1.8 proto=none icon=🖨️ H3 @3,0.2 proto=none icon=📠 H4 @3,1.8 proto=none icon=📺 A1 -- C11 A1 -- C12 A2 -- C21 A2 -- C22 C11 -- C12 C11 -- C21 C11 -- C21 C11 -- C22 C12 -- C21 C12 -- C22 C21 -- C22 A1 -- H1 A1:edge A1 -- H2 A1:edge A2 -- H3 A2:edge A2 -- H4 A2:edge しばらくすると、トポロジーはツリーに収束します。ルートC11から、各ブリッジへのパスがあり、ループはありません。右上隅には、この状態に達するまでにかかった時間が表示されたツリーアイコン🌳が表示されます。リンクを切断して、プロトコルが1秒未満でC12に到達する代替パスを見つける様子を確認してください。シミュレーションを停止したり、ステップバイステップで進めたり、初期状態にリセットしたり、または「カタツムリ」モード🐌で遅くしたりできます。表示されている全ての情報について心配しないでください。後で説明します。 注 スクロール中も、現在のシミュレーションは表示されたままなので、読みながら確認できます。この動作を無効にするには、このボックスのチェックを外してください。 全ての例は、MSTPD—RSTPのオープンソースユーザー空間実装—によってブラウザで実行されます。 歴史的間奏# 2014年にインターネット殿堂入りしたRadia Perlmanは、DECで彼女が発明したSTPの祖先を、後に米国特許に含まれたこの詩で要約しました。 I think that I shall never see A graph more lovely than a tree. A tree whose crucial property Is loop-free connectivity. A tree which must be sure to span So packets can reach every LAN. First, the root must be selected. By ID, it is elected. Least cost paths from root are traced. In the tree, these paths are placed. A mesh is made by folks like me, Then bridges find a spanning tree. ― Radia Perlman, Algorhyme. ルートブリッジの選出# ツリーを構築するために、RSTPはまず最も低いブリッジ識別子を持つブリッジをルートブリッジとして選出します。ブリッジ識別子は、優先度とMACアドレスを組み合わせたものです。8192.6e:2b:10:a0:5f:29。以下の例では、S1とS2はそれぞれ4096と8192の優先度を持っています。S1がルートになります。S4は12288の優先度を持ち、S3はデフォルトの優先度32768を維持します。S4がルートになります。S5とS6は特定の優先度を持たないため、最も低いMACアドレスが勝ち、S5がルートになります。 :protocol rstp S1 @0,0 prio=4096 S2 @0,1 prio=8192 S1 -- S2 S3 @1,0 S4 @1,1 prio=12288 S3 -- S4 S5 @2,0 S6 @2,1 S5 -- S6 最初に、各ブリッジは自身をルートとして広告します。 Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) Root Identifier: 8192.02:00:00:01:00:01 Bridge Identifier: 8192.02:00:00:01:00:01 ブリッジがより良いルートブリッジを広告するBPDUを受信すると、その新しい情報をネイバーに伝播します。 Spanning Tree Protocol Protocol Identifier: Spanning Tree Protocol (0x0000) Protocol Version Identifier: Rapid Spanning Tree (2) BPDU Type: Rapid/Multiple Spanning Tree (0x02) Root Identifier: 4096.02:00:00:00:00:00 Bridge Identifier: 8192.02:00:00:00:00:01 ポートへの役割割り当て# 2番目のステップは、各ポートに役割を割り当てることです。RSTPは5つの役割を定義しており、それぞれが文字で表されます:ルート(R)、指定(D)、代替(A)、無効(X)、またはバックアップ(B)。各非ルートブリッジは、ルートへの最もコストの低いパスを持つポートであるルートポートを選択します。明示的に指定しない限り、各ブリッジはリンクコストを速度から導き出します。1 Gbpsの場合は20,000です。同率の場合、最も低いポート識別子が勝ちます。 BPDUが受信したBPDUよりも「優れている」場合、残りの各ポートは指定ポートになります。そうでなければ、代替ポートになります。後で、ルートポートがダウンした場合、「最良の」代替ポートが新しいルートポートになります。最良のBPDUのタイブレーカーは次のとおりです。最も低いルートブリッジ識別子、ルートへの最も低い累積コスト、最も低いブリッジ識別子、そして最も低いポート識別子です。 :protocol rstp S1 @1,0 prio=4096 icon=🌳 S2 @0,1 S3 @2,1 S1 -- S2 S1 -- S3 S1 -- S3 S2 -- S3 上記の例では、収束後、S1はr