高速スパニングツリー(RSTP:Rapid Spanning Tree Protocol)は、STP の切り替わりを速くするために作られたプロトコルです。STP ではタイマーの満了を待ってポートを転送状態にしますが、RSTP では、隣のスイッチとの「同期」(プロポーサルとアグリーメントのやり取り)によって、待ち時間なしでポートを転送状態にできます。
この記事では、RSTP の同期がどのように進むのかを、4台のスイッチの構成で順に確認します。
- RSTP の同期(プロポーサルとアグリーメント)のイメージ
- 同期によって、ルートポートと指定ポートがすぐに転送状態になる流れ
- アグリーメントが返ってこないポートが、タイマーで転送状態になる理由
RSTP 同期のイメージ
スイッチどうしがジャンケンをするイメージを持ってください。例えば、SW1 と SW2 をつないで電源を入れたとします。起動した直後は、まだ周りのスイッチの情報がわからないので、どちらも自分がルートブリッジだと思っています。
そこで、SW1 と SW2 は、ルートブリッジについての情報を出し合ってジャンケンをします。この情報が BPDU のプロポーサル(Proposal)です。自分がルートブリッジだと思っているので、ルートまでのコストは 0 です。
この勝負は、ブリッジ ID の小さい SW1 の勝ちです。負けた SW2 は、自分のほかのポートをいったん Discarding 状態にしてから、SW1 に「負けました」と返します。これが BPDU のアグリーメント(Agreement)です。ほかのポートを止めてからアグリーメントを返すことで、新しい経路ができた瞬間にループが起きるのを防いでいます。この動作を同期(sync)と呼びます。
RSTP の Discarding 状態は、STP のブロッキング状態に近く、データの転送をしない状態です。
アグリーメントを返した側(負けた側)のポートはルートポート、アグリーメントを受け取った側(勝った側)のポートは指定ポートになり、どちらもすぐに転送状態になります。次に、SW2 は Discarding にしたポートで、その先のスイッチと同じようにジャンケンをします。これを順番に繰り返していくのが、RSTP の同期のイメージです。
RSTP 同期の構成
次のような構成で、実際の流れを見ていきます。SW1 の優先度を 4096 にして、SW1 がルートブリッジになるように設計しています。各リンクのコストは 10 です。
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 のポートは指定ポート(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 から見ると、プロポーサルを送ったのにアグリーメントが返ってきません。アグリーメントが届かない指定ポートは、すぐには転送状態にならず、従来の STP と同じように、タイマーを待って段階的に転送状態に移ります。
そのため、SW3 と SW4 の間では、指定ポートは SW3 側になり、Discarding(15 秒)と Learning(15 秒)を経て、30 秒後に転送状態になります。SW4 側の Fa0/24 は Discarding 状態のままです。RSTP では、このポートを代替ポート(Alternate Port)と呼びます。ルートポートが使えなくなったときに、次のルートポートになる候補という意味です。
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 秒)で転送状態になる |
| 条件 | ポイントツーポイントのリンクであること。端末側はエッジポートにする |
コメント