このドキュメントでは、スパニング ツリー プロトコル(STP)タイマーと、このタイマーを調整するために従うべきルールについて説明します。
注:このドキュメントでは、通常の802.1DスパニングツリーのSTPタイマーの調整方法についてのみ説明します。このドキュメントでは、Rapid Spanning Tree Protocol(RSTP; 高速スパニング ツリー プロトコル)(IEEE 802.1w)や Multiple Spanning Tree(MST; 多重スパニング ツリー)プロトコル(IEEE 802.1s)については説明していません。 RSTP と MST の詳細は、下記のドキュメントを参照してください。
このドキュメントでは、STP について十分に理解していることが前提となっています。STP の操作の詳細については、『Catalyst スイッチでのスパニングツリー プロトコル(STP)についての説明と設定方法』を参照してください。
注意:このドキュメントは、読者がプロセスに精通しているか、または精通した人の指示を受けられる場合にのみ、ネットワーキングの問題の解決に役立ちます。STP に精通していない場合、変更を行うことによって次のいずれかの現象が起こる可能性があります。
不安定な動作
アプリケーション速度の低下
CPU 使用率の急激な上昇
LAN のメルトダウン
詳細については、『802.1D:ローカルエリアネットワークおよびメトロポリタンエリアネットワークのIEEE規格:Media Access Control(MAC)ブリッジ( Clause 8)を参照してください。
このドキュメントの内容は、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。
ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。
STP のタイマーには、次のものがあります。
hello(ハロー):ハロー タイムは、Bridge Protocol Data Unit(BPDU; ブリッジ プロトコル データ ユニット)がポートに送られる間隔です。この時間はデフォルトでは 2 秒ですが、1 ~ 10 秒の間で調整できます。
forward delay(転送遅延):転送遅延は、リスニングおよびラーニングの状態で経過する時間です。この時間はデフォルトでは 15 秒ですが、4 ~ 30 秒の間で調整できます。
max age(最大経過時間):最大経過時間タイマーは、ブリッジ ポートがコンフィギュレーション BPDU の情報を保存するまでの最大の経過時間を制御します。この時間はデフォルトでは 20 秒ですが、6 ~ 40 秒の間で調整できます。
これら 3 つのパラメータは、各コンフィギュレーション BPDU に含まれています。また、各 BPDU のコンフィギュレーションには、別の時間に関係するパラメータが含まれており、これは message age(メッセージ経過時間)と呼ばれています。メッセージ経過時間は、固定値ではありません。message age(メッセージ経過時間)には、ルート ブリッジが最初に BPDU を発信してからの経過した時間が含まれています。ルート ブリッジでは message age(メッセージ経過時間)の値を 0 としてすべての BPDU を送信し、この後、通過するすべてのスイッチでこの値に 1 が加算されます。実質的に、この値には、BPDU を受信した側がルート ブリッジからどのくらい離れているかという情報が含まれます。次の図はこの概念を示しています。
新しいコンフィギュレーション BPDU が受信された際に、BPDU の情報がポートに記録されている情報と同等かそれ以上の場合、BPDU の情報がすべて保存されます。経過時間タイマーの実行が開始されます。経過時間タイマーは、受信時にコンフィギュレーション BPDU に含まれていた message age(メッセージ経過時間)からスタートします。タイマーを更新する別の BPDU が受信されるまでに経過時間タイマーが max age(最大経過時間)に達した場合、そのポートの情報はエージング アウトされます。
このセクションの図に当てはめた例を次に示します。
スイッチBとスイッチCは、メッセージ経過時間が0のスイッチAからコンフィギュレーションBPDUを受信します。Aに向かうポートでは、情報がエージングアウトします(最大経過時間–0)。この時間はデフォルトで20秒です。
スイッチDとスイッチEは、メッセージ経過時間1のスイッチBからのBPDUを受信します。Aに向かうポートでは、情報がエージングアウトします(最大経過時間 – 1)。この時間はデフォルトで19秒です。
スイッチFは、メッセージ経過時間が2のスイッチEからBPDUを受信します。Eに向かうポートでは、情報がエージングアウトします(最大経過時間 – 2)。この時間はデフォルトで18秒です。
STP は IEEE 802.1D で定義されています。「スパニング ツリー プロトコル タイマー」セクションで説明したタイマーに加え、IEEE では STP に関連する次のパラメータも定義されています。
diameter of the STP domain(dia):この値は、端末が接続された任意の 2 つのポイントの間にあるブリッジの最大数です。IEEE では、デフォルトの STP タイマーに最大直径 7 ブリッジを考慮するように推奨しています。
bridge transit delay(transit delay):この値は、ブリッジがフレームを受信してから同じフレームを送信するまでに経過する時間です。これは、論理的にはブリッジにおける遅延です。IEEE の推奨する、ブリッジでの最大伝送遅延は 1 秒です。
BPDU transmission delay(bpdu_delay):この値は、ポートで BPDU が受信されてからコンフィギュレーション BPDU が別のポートへ実際に伝送されるまでの遅延です。IEEE の推奨する、最大の BPDU 伝播遅延は 1 秒です。
message age increment overestimate(msg_overestimate):この値は、各ブリッジが BPDU を転送する前に message age(メッセージ経過時間)に追加する増分値です。「スパニング ツリー プロトコル タイマー」セクションで説明したとおり、Cisco スイッチは(おそらく他のすべてのスイッチも)、BPDU を転送する前に message age(メッセージ経過時間)に 1 秒加算します。
lost message(lost_msg):この値は、ブリッジ型ネットワークの端末から相手側の端末に BPDU が移動する間に失われる可能性のある BPDU の数です。IEEE では、消失する可能性のある BPDU 数を 3 に設定するように推奨しています。
transmit halt delay(Tx_halt_delay):この値は、ポートのブロックが必要と判断されてからブリッジが実際にポートをブロッキング状態に移行するまでに必要な最長時間です。IEEE では、このパラメータを 1 秒に設定することを推奨しています。
medium access delay(med_access_delay):この値は、デバイスが初回伝送時にメディアへのアクセスを取得するのに必要な時間です。これは、CPU がフレーム送信を決定してから、フレームが実際にブリッジを離れ始める瞬間までの時間です。IEEE では、この最長時間を 0.5 秒に設定することを推奨しています。
これらのパラメータから、他の値を計算できます。その他のパラメータと計算を次に示します。この計算では、すべてのパラメータに IEEE の推奨するデフォルト値を使用するものと仮定しています。
End-to-end BPDU propagation delay:この値は、BPDU がネットワークの 1 つの端末から相手側の端末へ移動するのに必要な時間です。直径が7ホップ、失われる可能性がある3つのBPDU、およびハロータイムが2秒であると仮定します。この場合、式は次のとおりです。
End-to-end_BPDU_propa_delay = ((lost_msg + 1) x hello) + ((BPDU_Delay x (dia – 1)) = ((3 + 1) x hello) + ((1 x (dia – 1)) = 4 x hello + dia – 1 = 4 x 2 + 6 = 14 sec
Message age overestimate:このパラメータは、BPDU が発信されてからのメッセージ経過時間を勘定するためのものです。各ブリッジがBPDUメッセージの経過時間を1秒増加すると仮定します。式は次のようになります。
Message_age_overestimate = (dia – 1) x overestimate_per_bridge = dia – 1 = 6
Maximum frame lifetime:この値は、ブリッジ型ネットワークに送信されたフレームが、宛先に到着する前にそのネットワークに存続する最長時間です。式は次のようになります。
Maximum_frame_lifetime = dia x transit_delay + med_access_delay = dia + 0.5 = 7.5 = 8 (rounded)
Maximum transmission halt delay:この値は、ポートのブロックが決定されてから、実際にブロックされるまでに必要な時間です。IEEE では、このイベントの最大値として 1 秒がカウントされています。式は次のようになります。
Maximum_transmission_halt_delay = 1
このセクションでは、各パラメータに推奨値を使用した場合の max age(最大経過時間)と forward delay(転送遅延)のデフォルト値を算出する方法について説明しています。推奨値は diameter が 7、hello time が 2 秒です。
max age(最大経過時間)には、ネットワークの周囲にあるスイッチが安定した状態(つまり、ルートが保持されている状態)にある場合、ルート情報がタイムアウトされることはないという事実が反映されます。 max age(最大経過時間)の値には、BPDU transmission delay の合計と message age increment overestimate が反映される必要があります。したがって、max age(最大経過時間)の式は次のようになります。
max_age = End-to-end_BPDU_propa_delay + Message_age_overestimate = 14 + 6 = 20 sec
この計算によって、IEEE がどのようにして推奨される max age(最大経過時間)のデフォルト値を算出しているかがわかります。
ポートがリスニング状態に移行することは、アクティブな STP トポロジに変更があって、ポートがブロッキングからフォワーディングになることを示します。したがって、転送遅延の発生するリスニングおよびラーニングの期間には、次の連続した時間が含まれる必要があります。
最初のブリッジ ポートがリスニング状態になってから(さらに、その後の再設定の間リスニング状態を維持し)、ブリッジ型 LAN の最後のブリッジがアクティブなトポロジの変更を受信するまでの時間
また、max age(最大経過時間)の計算に使用するのと同じ遅延(message age overestimate と BPDU propagation delay)が反映される必要があります。
最後のブリッジが、前のトポロジで受信されるフレームの転送を停止するための時間(maximum transmission halt delay)から、前のトポロジで転送される最後のフレームが消えるまでの時間(maximum frame lifetime)
この時間は、フレームの重複を防ぐために必要です。
したがって、転送遅延(リスニング時間 + ラーニング時間)の 2 倍の時間には、これらすべてのパラメータが含まれます。式は次のようになります。
2 x forward delay = end-to-end_BPDU_propagation_delay + Message_age_overestimate + Maximum_frame_lifetime + Maximum_transmission_halt_delay = 14 + 6 + 7.5 + 1 = 28.5 forward_delay = 28.5 /2 = 15 (rounded)
すべてのパラメータのうち、調整が可能なのは次のものだけです。
注:これらのパラメータを調整できるかどうかは、ネットワークによって異なります。
hello: 1 ~ 6
最大経過時間
転送遅延
diameter(直径):これはネットワークによって異なります。
次の値はいずれも変更しないでください。これらの値は、IEEE の推奨値のままにします。
lost_msg = 3
transit_delay = 1
bpdu_delay = 1
msg_overestimate = 1
Tx_halt_delay = 1
med_access_delay = 0.5
maximum_transmission_halt_delay = 1
BPDU が 3 つも失われたり、1 つのスイッチを通過するのに 1 秒もかかったりすることがありそうもない現代のネットワークでは、これらの値はマージンが非常に大きく取られているように見えるかもしれません。しかし、これらの値は次のようなストレス状態で起こる STP ループを防止するために存在することを忘れないでください。
非常に高い CPU 使用率
ポートの過負荷
したがって、これらのパラメータを固定値として考慮する必要があります。「スパニング ツリー プロトコル(STP)タイマーのデフォルト値」セクションに示した式を使用すると、次のようになります。
max_age = End-to-end_BPDU_propa_delay + Message_age_overestimate = ((lost_msg + 1) x hello) + ((BPDU_Delay x (dia – 1)) + (dia – 1) x overestimate_per_ bridge = (4 x hello) + dia – 1 + dia – 1 = (4 x hello) + (2 x dia) – 2 forward_delay = (End-to-end_BPDU_propa_delay + Message_age_overestimate + Maximum_frame_lifetime + Maximum_transmission_halt_delay ) / 2 = ((lost_msg + 1) x hello) + ((BPDU_Delay x (dia – 1)) + ((dia – 1) x overestimate_per_bridge) + (dia x transit_delay) + med_access_delay + Maximum_transmission_halt_delay) / 2 = ((4 x hello) + dia – 1 + dia – 1 + dia + 0.5 + 1) / 2 = ((4 x hello) + (3 x dia) – 0.5) / 2
以上の計算の後、最後に次の 2 つの式が残っています(0.5 を丸めた場合)。
max_age = (4 x hello) + (2 x dia) – 2 forward_delay = ((4 x hello) + (3 x dia)) / 2
コンバージェンス時間を向上させるために STP タイマーを調整する場合は、これら 2 つの式に厳密に従う必要があります。
次に例を示します。ブリッジ型ネットワークの直径(diameter)が 4 の場合、次のパラメータを使用する必要があります。
hello = 2 (default) then max_age = 14 sec forward_delay = 10 sec If hello = 1 then max_age = 10 sec forward_delay = 8 sec
注:HELLO = 1 は、最小の値です。diameter(直径)が 4 の場合、このパラメータで max age(最大経過時間)を 10 秒より低く、また forward delay(転送遅延)を 8 秒より低く調整することはできません。
STP パラメータを少なくするには、hello time を 1 秒に下げるのが最も簡単で確実な方法です。ただし、hello time を 2 秒から 1 秒に下げると、各ブリッジで送受信される BPDU が 2 倍になることを忘れないでください。この増加によって、BPDU を 2 倍処理する必要が出るため、CPU の負荷が加算されます。VLAN やトランクが複数ある場合には、この負荷が問題となる可能性があります。
直径(diameter)は、ネットワーク設計によってまったく異なります。直径(diameter)とは、ブリッジ型ネットワーク内の任意の 2 つのスイッチをリンクさせるために横断するスイッチ(発信元と宛先を含む)の、最悪の場合を想定した最大数です。直径を算出する際には、同じスイッチを二度通過することはありません。このドキュメントの「スパニング ツリー プロトコルのタイマー」セクションの図では、直径(diameter)が 5 になっています(パス F-E-B-A-C)。
ここで、このセクションの図を確認します。この図では、いくつかのアクセス スイッチ(スイッチ C、D、および E)が 2 つのディストリビューション スイッチ(スイッチ A および B)に接続しています。 ディストリビューション スイッチとコアの間には、レイヤ 3(L3)の境界があります。ブリッジ ドメインは、ディストリビューション スイッチで終わっています。STP の直径(diameter)は 5 です。
C-A-D-B-E
D-A-C-B-E
直径(diameter)が 5 より大きいスイッチのペアはないことが図からわかります。
「スパニング ツリー プロトコルのタイマー」セクションで説明しているとおり、各 BPDU には hello、forward delay(転送遅延)、および max age(最大経過時間)という STP タイマーが含まれています。IEEE ブリッジは、ローカルなタイマー値の設定には関係しません。IEEE ブリッジでは、ブリッジが受け取る BPDU 内のタイマーの値が考慮されます。実際には、STP のルート ブリッジに設定されているタイマーだけが重要です。ルートが失われると、新しいルートが起動して、そのローカルなタイマー値がネットワーク全体に適用されます。したがって、同じタイマー値をネットワーク全体に設定する必要はありませんが、ルート ブリッジとバックアップ ルート ブリッジでのタイマーの変更は最低限設定する必要があります。
Catalyst OS(CatOS)ソフトウェアが稼働する Cisco スイッチを使用する場合は、ルートを設定し、式に従ってパラメータを調整できるマクロがいくつかあります。diameter(直径)と hello time を設定するには、set spantree root vlan dia diameter hello hello_time コマンドを発行します。以下が一例です。
Taras> (enable) set spantree root 8 dia 4 hello 2 VLAN 8 bridge priority set to 8192. VLAN 8 bridge max aging time set to 14. VLAN 8 bridge hello time set to 2. VLAN 8 bridge forward delay set to 10. Switch is now the root switch for active VLAN 8.
STP ネットワークの直径(diameter)が設定されていても、コンフィギュレーションにも show コマンドの出力にも設定されている直径(diameter)の値は表示されません。