ひよっこエンジニアの備忘録

日常とかSEとしての備忘を書いていきます。

STP動作メモ

STP(SpanningTree Protocol:IEEE802.1D)
●ルートブリッジ選定
☆ルートブリッジ=ブリッジID(BID)が最小のスイッチ


BIDとは
→スイッチごとに一意な8バイトの値
→ブリッジプライオリティ(2バイト)+MACアドレス(6バイト)
 =BID(8バイト)

ブリッジプライオリティは2バイトのため0~65535の間の4096区切りで
定義される。(デフォルト中間地点の32768)

ブリッジプライオリティはデフォルト固定値のため、
基本的には最少MACアドレスのSWがルートブリッジとなる。

またブリッジプライオリティは4096区切りであれば手動で設定変更できるが、
自動で変更する以下マクロコマンドも存在する。
・(config)#spanning-tree vlan root primary
 →指定したVLAN内でブリッジプライオリティを最小にする
・(config)#spanning-tree vlan root secondary
 →指定したVLAN内でブリッジプライオリティを2番目に小さい値にする
 ※ブリッジプライオリティをデフォルト値であれば以下になる。
 ・primaryは24576「32768-8096=24576」
 ・secondaryは28672「32768-4096=28672」

なお「show span」で確認すると設定値よりもブリッジプライオリティが
若干高く見えるが、VLANIDがブリッジプライオリティ値に加算されるため。


●Roleの決定
ルートポート(RP)→BPDUを受信するポート
指定ポート(DP)→BPDUを送信するポート
非指定ポート(NDP)→RP、DPどちらにも選ばれなかったポート、
           通称ブロッキングポート

選定要素は下記の通り
・ルートブリッジへのパスコスト合計値が最小
→パスコストはリンクごとの帯域で決定(10G-2/1G-4/100M-19/10M-100)
・送信元ブリッジIDが最少
・送信元ポートIDが最少
→ポートIDは下記2バイトの値
 ポートプライオリティ(デフォルト128)+ポートインデックス(Fa0/1、0/2...)
→ポートプライオリティを弄ってなければ若番ポートの方が小さい値となる

●ポート状態憑依
ブロッキング
→最大遅延タイマー(デフォルト20秒)
→BPDU受信・データフレームは転送しない状態。
 直接接続されたリンク障害はブロッキングを飛ばしてすぐにリスニングへ移行
②リスニング
→転送遅延タイマー(デフォルト15秒)
→BPDU送受信・データフレームは転送しない状態。ここでBPDUを交換してRoleを確定させる
③ラーニング
→転送遅延タイマー(デフォルト15秒)
→BPDU送受信・データフレームは転送しない状態。MACアドレステーブルを構築し
 データフレーム転送準備を行う(まだデータフレームは転送しない)
フォワーディング
→BPDU送受信・データフレームを転送する状態。
※リンクダウンしているポートはDisable状態となりフレームを転送しない
※各種タイマー値は手動で変更可能だがルートブリッジのタイマー値に従う。
 (エッジスイッチのタイマー値を変えてもルートブリッジがデフォルトのままなら意味ない)

●STP ToolKit
・Portfast
→サーバやPC向けポートに設定する技術。STPのコンバージェンスタイマー50秒を飛ばして
 即フォワーティングへ移行する。
・BPDUガード
→PortfastポートでBPDUを受診した場合、ポートをerr-disable状態にする機能。
 不正なスイッチが接続されることを防ぐ。
・BPDUフィルタ
→PortfastポートでのBPDU送信を抑制する機能。
 グローバルで設定する場合とポートに設定する場合で動作が異なるため注意が必要。
 ▲グローバル…PortfastポートでBPDUを受信した場合、Portfast状態を解除し
        通常のSTPポートとしてBPDUを送受信させる
 ▲ポート単位…PortfastポートでBPDUを受信した場合、BPDUを無視する(自分から送信もしない)
・ルートガード
→管理外のスイッチがルートブリッジになることを防ぐ機能。
 ルートガードが有効なポートで上位BPDU(プライオリティが小さい)を受信すると
 ルート不整合状態(root-inconsistent:BPDUの転送を止める)へ移行し
 ルートブリッジが変わることを防ぐ。ちなみにルートガードのみグローバルでは設定できない
・ループガード
→STPプロセス障害や単一リンク障害によりBPDU受信不可になった際、
 代替ポートやルートポートが指定ポートになりループが起こることを防ぐ機能。
 指定ポート以外のポートからBPDUを受信した場合、
 ルート不整合状態(root-inconsistent:BPDUの転送を止める)へ移行する

・UplinkFast
→NDPポートをもつスイッチの直接リンク障害発生時アップリンクを高速で切り替える。
 直接リンク障害発生時NDPポートを5sec以内にフォワーディング状態に切り替える
・BackboneFast
→NDPポートをもつスイッチの間接リンク障害発生時経路を高速で切り替える
 間接リンク障害発生時NDPポートをすぐにリスニング状態に切り替える
 ※フォワーディングではなく飽くまでもリスニング状態への移行となるため
  フォワーディング状態に切り替わるまでに
  転送遅延タイマー15sec ×2回分(リスニング/ラーニング)の30sec程度要する

●diameteroftheSTPdomain(dia)
→端末が接続された任意の2つのポイントの間にあるブリッジの最大数。
 IEEEでは、デフォルトのSTPタイマーに最大直径7ブリッジを考慮するように推奨。
●bridgetransitdelay(transitdelay)
 →論理的にはブリッジにおける遅延。
 IEEEの推奨するブリッジでの最大伝送遅延は1秒。
●BPDUtransmissiondelay(bpdu_delay)
→ポートでBPDUが受信されてからコンフィギュレーションBPDUが
 別ポートへ実際に伝送されるまでの遅延。
 IEEEの推奨する、最大のBPDU伝播遅延は1秒。
●messageageincrementoverestimate(msg_overestimate)
→各ブリッジがBPDUを転送する前にmessageage(メッセージ経過時間)に
 追加する増分値。
 Ciscoスイッチは(おそらく他のすべてのスイッチも)、
 BPDUを転送する前にmessageage(メッセージ経過時間)に1秒加算する。
●lostmessage(lost_msg)
→ブリッジ型ネットワークの端末から相手側の端末にBPDUが移動する間に
 失われる可能性のあるBPDUの数。
 IEEEでは、消失する可能性のあるBPDU数を3に設定するように推奨。
●transmithaltdelay(Tx_halt_delay)
→ポートのブロックが必要と判断されてからブリッジが実際にポートを
 ブロッキング状態に移行するまでに必要な最長時間。
 このパラメータを1秒に設定することを推奨。
●mediumaccessdelay(med_access_delay)
→デバイスが初回伝送時にメディアへのアクセスを取得するのに必要な時間。
 これはCPUがフレーム送信を決定してから、フレームが実際にブリッジを
 離れ始める瞬間までの時間。
 IEEEではこの最長時間を0.5秒に設定することを推奨。


●コマンド
<設定>
・portfast
→(config)#spanning-tree pordtfast default
 (config-if)#spanning-tree portfast
・uplink fast
→(config)#spanning-tree uplinkfast
・backbonefast
→(config)#spanning-tree backbonefast

・BPDUガード
→(config)#spanning-tree portfast bpduguard default
 (config-if)#spanning-tree bpduguard enable
・BPDUフィルタ
→(config)#spanning-tree portfast bpdufilter default
 (config-if)#spanning-tree bpdufilter enable
・ルートガード
→(config-if)#spanning-tree guard root
・ループガード
→(config)#spanning-tree loopguard default
 (config-if)#spanning-tree guard loop

<確認>
・show span
・show span sum
・show span de
・show span inconsistentports