【スパニングツリー】RSTPがなぜ高速に切り替わるのか解説

高速スパニングツリー(RSTP:Rapid Spanning Tree Protocol)は、STP の切り替わりを速くするために作られたプロトコルです。STP ではタイマーの満了を待ってポートを転送状態にしますが、RSTP では、隣のスイッチとの「同期」(プロポーサルとアグリーメントのやり取り)によって、待ち時間なしでポートを転送状態にできます。

この記事では、RSTP の同期がどのように進むのかを、4台のスイッチの構成で順に確認します。

この記事でわかること
  1. RSTP の同期(プロポーサルとアグリーメント)のイメージ
  2. 同期によって、ルートポートと指定ポートがすぐに転送状態になる流れ
  3. アグリーメントが返ってこないポートが、タイマーで転送状態になる理由

RSTP 同期のイメージ

スイッチどうしがジャンケンをするイメージを持ってください。例えば、SW1 と SW2 をつないで電源を入れたとします。起動した直後は、まだ周りのスイッチの情報がわからないので、どちらも自分がルートブリッジだと思っています。

そこで、SW1 と SW2 は、ルートブリッジについての情報を出し合ってジャンケンをします。この情報が BPDU のプロポーサル(Proposal)です。自分がルートブリッジだと思っているので、ルートまでのコストは 0 です。

SW1 優先度 4096 SW2 優先度 32768 Proposal Root=SW1 Cost=0 Proposal Root=SW2 Cost=0 SW2 が同期:SW1 のほうが条件が良いので、SW1 以外のポートを Discarding にする Agreement SW1 側は指定ポート(DP)、SW2 側はルートポート(RP)。両方ともすぐに Forwarding
図1 RSTP の同期の流れ(SW1 と SW2)

この勝負は、ブリッジ ID の小さい SW1 の勝ちです。負けた SW2 は、自分のほかのポートをいったん Discarding 状態にしてから、SW1 に「負けました」と返します。これが BPDU のアグリーメント(Agreement)です。ほかのポートを止めてからアグリーメントを返すことで、新しい経路ができた瞬間にループが起きるのを防いでいます。この動作を同期(sync)と呼びます。

RSTP の Discarding 状態は、STP のブロッキング状態に近く、データの転送をしない状態です。

アグリーメントを返した側(負けた側)のポートはルートポート、アグリーメントを受け取った側(勝った側)のポートは指定ポートになり、どちらもすぐに転送状態になります。次に、SW2 は Discarding にしたポートで、その先のスイッチと同じようにジャンケンをします。これを順番に繰り返していくのが、RSTP の同期のイメージです。

RSTP 同期の構成

次のような構成で、実際の流れを見ていきます。SW1 の優先度を 4096 にして、SW1 がルートブリッジになるように設計しています。各リンクのコストは 10 です。

SW1(ルートブリッジ) SW2 SW3 SW4 cost = 10 cost = 10 cost = 10 cost = 10 優先度 4096 優先度 32768 MAC 0000.0000.0003 優先度 32768 MAC 0000.0000.0004 Fa0/23 Fa0/24
図2 検証構成

SW1 と SW2 の間の同期

まず、SW1 と SW2 の間の同期です。SW1、SW2 はそれぞれ自分をルートブリッジとして、BPDU のプロポーサルを送り合います。自分がルートブリッジだと思っているので、コストは 0 です。

SW1 の優先度は 4096 なので、SW1 が勝ちます。SW2 は、SW4 との接続など SW1 以外のポートをいったん Discarding 状態にして、SW1 に BPDU のアグリーメントを送ります。

BPDU のアグリーメントを受け取った SW1 のポートは指定ポート(DP)、アグリーメントを送った SW2 のポートはルートポート(RP)になり、すぐに転送状態になります(流れは図1と同じです)。

SW2 と SW4 の間の同期

次に、SW2 と SW4 の間の同期です。SW2 は、SW1 がルートブリッジだと合意しています。一方、SW4 はまだ自分がルートブリッジだと思っています。

SW2 と SW4 はプロポーサルを送り合います。SW2 のプロポーサル(Root=SW1、Cost=10)のほうが条件が良いので、SW4 がほかのポートを Discarding にして、アグリーメントを送ります。

SW2 Root=SW1 と合意済み SW4 まだ自分がルートだと思っている Proposal Root=SW1 Cost=10 Proposal Root=SW4 Cost=0 SW4 が同期:SW2 のほうが条件が良いので、ほかのポートを Discarding にする Agreement SW2 側は指定ポート(DP)、SW4 の Fa0/23 はルートポート(RP)
図3 SW2 と SW4 の間の同期

アグリーメントを受け取った SW2 のポートは指定ポート(DP)、アグリーメントを送った SW4 の Fa0/23 はルートポート(RP)になります。

SW1 と SW3 の間の同期

SW1 と SW3 の間でも、STEP 1 と同じ動きをします。SW1 側が指定ポート、SW3 側がルートポートになり、すぐに転送状態になります。

SW3 と SW4 の間の同期

最後に、SW3 と SW4 の間の同期です。SW3 と SW4 は、それぞれ BPDU のプロポーサルを送ります。

SW3 のプロポーサル(Root=SW1、Cost=10)は条件が良いので、SW4 がアグリーメントを返しそうに見えますが、ここではアグリーメントは送りません。アグリーメントを送るポートは、ルートポートになるポートだからです。

SW4 から見ると、ルートブリッジまでのコストは、SW2 経由(Fa0/23)でも SW3 経由(Fa0/24)でも 20 で同じです。コストが同じときは、BPDU を送ってきたスイッチのブリッジ ID を比べ、小さいほうのポートをルートポートにします。この構成では SW2 側の Fa0/23 がすでにルートポートになっていて、Fa0/24 はルートポートになりません。そのため、SW4 は Fa0/24 で受けたプロポーサルにアグリーメントを返しません。

SW3 指定ポート SW4(Fa0/24) 代替ポート Proposal Root=SW1 Cost=10 Agreement は返ってこない SW3:Discarding(15 秒)→ Learning(15 秒)→ Forwarding。SW4:Discarding のまま
図4 SW3 と SW4 の間では、アグリーメントが返ってこない

SW3 から見ると、プロポーサルを送ったのにアグリーメントが返ってきません。アグリーメントが届かない指定ポートは、すぐには転送状態にならず、従来の STP と同じように、タイマーを待って段階的に転送状態に移ります。

そのため、SW3 と SW4 の間では、指定ポートは SW3 側になり、Discarding(15 秒)と Learning(15 秒)を経て、30 秒後に転送状態になります。SW4 側の Fa0/24 は Discarding 状態のままです。RSTP では、このポートを代替ポート(Alternate Port)と呼びます。ルートポートが使えなくなったときに、次のルートポートになる候補という意味です。

プロポーサル/アグリーメントが成立したポート Discarding Forwarding すぐに転送 アグリーメントが返ってこない指定ポート(SW3 → SW4) Discarding(15 秒) Learning(15 秒) Forwarding 30 秒後に転送
図5 同期が成立したポートと、成立しなかったポートの転送までの時間
SW1(ルートブリッジ) SW2 SW3 SW4 DP RP DP RP(Fa0/23) DP RP DP ALT(Fa0/24) Discarding
図6 最終的なポートの役割

SW3 と SW4 の間のリンクは STP と同じように 30 秒かかりますが、それ以外のポートは同期によってすぐに転送状態になります。SW3 と SW4 の間のリンクは、SW4 側が Discarding なので普段は使われず、転送状態になるのが遅れても問題になりません。

補足
  • RSTP のプロポーサルとアグリーメントによる高速な切り替えは、スイッチどうしが 1 対 1(ポイントツーポイント)で接続されているリンクでだけ動きます。リンクタイプは、既定ではインターフェースのデュプレックスから判断されます(全二重ならポイントツーポイント)。
  • 端末をつなぐポートは、エッジポート(Cisco では PortFast)に設定すると、同期を待たずにすぐ転送状態になります。
  • RSTP のスイッチは、ポートで従来の STP(802.1D)の BPDU を受け取ると、そのポートだけ 802.1D の動作に切り替えます。アグリーメントが返ってこないこととは別の仕組みです。

まとめ

項目内容
プロポーサル指定ポートになろうとするポートが送る BPDU。ルートブリッジとコストの情報を出し合う
同期(sync)条件の悪い側が、ほかのポートをいったん Discarding にしてループを防ぐ
アグリーメント同期が終わった側が、ルートポートになるポートから返す。受け取った指定ポートと、送ったルートポートはすぐに転送状態になる
アグリーメントが返らない場合ルートポートにならないポート(代替ポート)は返さない。指定ポート側はタイマー(15 秒+15 秒)で転送状態になる
条件ポイントツーポイントのリンクであること。端末側はエッジポートにする

 

コメント