元バンドマンITエンジニアの語り場

技術とか趣味とか日々の至福と鬱憤とか

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を受信したポートで加算される」というのが大原則です。

 

 

下記の図をみてください。 

 

f:id:Mickey6:20190604001335p:plain

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ではないのです。

 

正しくは以下。

f:id:Mickey6:20190604003547p:plain


 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の小話でした〜。