STPの小話
現場でネットワークの設計とかをやっているとたまに遭遇するのが、L2のトポロジでまさかの複数ベンダーが登場、それぞれが所管のネットワーク機器を導入するなんてパターン。
しかもお客様の情シス担当者がベンダー間の仲介になるため、ベンダー間で直接設計についてコミュニケーションできないなんてことも。
実話に基づくと、
STP(Spanning Tree Protocol)の設計でこんなことがありました。
とある複数ベンダーがそれぞれの所管機器を導入、ベンダー間の取りまとめを情シスSE
が担当しているというまさに上記のパターン。
L2レベルで冗長性を確保する設計だったため、ベンダーAがSTPについての設計を担当していました。
ベンダーAが導入する機器をルートブリッジとしたスクエア構成。
しかし、それぞれのConfigや物理/論理構成には一定の機密性があるため、詳細については両ベンダーともオープンにできないという前提があります。双方の情報交換は必ず 情シスを挟むことになっている。当然情シスは自社のネットワークということになりますから全情報を入手しています。
(これもなんだかなあとは思いますが...)
ベンダーAは情シス担当に設計内容を伝える。情シス担当は必要と思われる情報をピックアップしてベンダーBに伝える。
ここで情シス担当はベンダーBに対して、ベンダーAが設計したSTPトポロジ
のうちベンダーBの機器に関わる部分のみ伝えました。
スイッチ①のポートAにコストを付与して、そのポートを非指定ポートにしてね。と。
STPの動きはややこしいところがあるので、想定通りにポートロール、ポートステートが決まるのか検証はしたいところですが、ベンダーBは誰がルートブリッジになるのかすらも知らされていないため、そんな情報だけでは検証のしようがありません。
追い討ちをかけるように、ベンダーAのコストの考え方に誤りがあったため、
ベンダーBは意味不明な検証作業を課せられます。
ここでSTPややこし話、ルートパスコストの加算方式について。
-------------------------------------------------------------------------------------------------
「ルートパスコストはBPDUを受信したポートで加算される」というのが大原則です。
下記の図をみてください。
SW2のポート2に重めのコストを明示的に付与してブロッキングポートの場所をコントロールしたいと。
一見騙されそうになりますが、この考え方は間違いで、SW2とSW3間のリンクで指定ポート、非指定ポートを決定するプロセスにおいてSW2のポート2に付与したコスト値はなんら関与しません。
上記図の場合、コスト100が効いてくるのは、SW1とSW2のポートロールを決定するプロセスです。どちらにせよ各スイッチのアップリンクがルートブリッジに最も近くなるだけなので、コストを付与しようがしまいが同じ結果になります。
では、SW2とSW3間のリンクでポートロールはどのように決まるのか。
まずSW2ポート2のルートブリッジまでの最短ルートパスコストは4+4=8です。
同様に、SW3ポート2のルートブリッジまでの最短ルートパスコストも4+4=8です。
この考え方が少しややこしくて、自身の最短ルートパスコストをみます。
SW2のポート2からルートブリッジまでの経路は一見SW3経由のように見えますが、SW2のポート1からの経路が最短となります。
なので、比較対象が4+4+100=108あるいは4+4+4=12ではないのです。
正しくは以下。
STPではポートロールは必ず以下順番で比較されるので、図の場合はブリッジIDが低いSW2のポート2が指定ポートになります。
【STPポートロール基準】値が低い方が優先
①ルートパスコスト
②BPDU送信元ブリッジID(プライオリティ→MACアドレスの順)
③BPDU送信元ポート番号
※BPDU送信元とは自身を指します
---------------------------------------------------------------------------------------------------
ベンダーAのコスト設定では、ブロッキングポートをコントロールできません。
Priorityが等しい場合はインターフェイスのmacアドレスに依存するため、たまたま想定していたポートがブロックされるかもしれないし、されないかもしれない、機器を交換したらそのタイミングで変わるかもしれないし、変わらないかもしれない。
上記構成でSW2のポート2をブロッキング状態にしたいのであれば、SW2のポート1にいい塩梅の、例えばコスト5を付与してあげるとOKです。
そもそも自動でルートブリッジから一番遠いポートをブロッキングにしてくれるのがSTPなので、果たしてわざわざ手を入れる必要があるのか、という疑問はありますが。
勝手にやらせておけばいいじゃない、と。
話が変わりますが、機器間のリンクをEtherChannelで論理リンク化していた場合のパスコストはどうなるのか。
これは完全備忘となりますが、
100Mのリンクを2本バンドルしたらパスコストは12に、3本バンドルしたら9になります。(1本だと19)
1Gリンクを2本束ねたら3になります。(1本だと4)
以外と情報落ちてないので、気になった方の検索にヒットしますように(笑)
以上STPの小話でした〜。