高速スパニングツリー(RSTP)は、STPの切り替わり動作を高速化する為に作られました。RSTP同期メカニズムにより、切り替え時間を大幅に高速化することができました。
RSTP同期のイメージ
スイッチがジャンケンをするイメージを持ってください。例えば、以下のような構成を考えます。

SW1とSW2それぞれの電源を起動します。起動直後は、まだ、周りのスイッチの情報がわからないため、ルートブリッジは自分自身だと思っています。 そこで、SW1とSW2間でルートブリッジ関連の情報をお互い出し合い、ジャンケンをします。

この勝負はSW1の勝ちです。SW2は自身の他のポートをDiscarding状態にして、SW1へ負けました・・・と送ります。 RSTPでのDiscarding状態はSTPでのブロッキング状態と似ており、データ転送を行わない状態を示します。

ここで、負けた方のポートがルートポート、勝った方のポートは指定ポートになります。 次に、SW2のDiscarding状態のポートで対向のスイッチと同じようにジャンケンをし、これを順次実行していきます。

これがRSTP同期のイメージです。 実際の動作は、ルートブリッジ情報をBPDU提案(プロポーサル)としてお互いのスイッチが投げ合い、条件の悪い方が、BPDU同意(アグリーメント)を送ります。
RSTP同期の構成
以下のような構成を考えます。

SW1とSW2間のRSTP同期
まず、SW1とSW2間でRSTP同期を見ていきます。SW1、SW2それぞれが自身をルートブリッジとして、 お互いのBPDU提案(プロポーサル:Proposal)を送信します。自分自身がルートブリッジだと思っているので、コストはゼロです。

SW1の優先度が4096でルートブリッジになる設計しているので、SW1が勝ちます。 その場合は、SW2は、SW4との接続など他のポートを一旦、Discarding状態にして、SW1にBPDU合意(アグリーメント:agreement)を送信します。

BPDU アグリーメントを受信したポートは指定ポート(DP)、BPDU アグリーメントを送信したポートはルートポート(RP)になります。

SW2とSW4間のRSTP同期
SW2とSW4間でRSTP同期を見ていきます。SW2は、SW1がルートブリッジだと合意しています。 SW4はまだ、自分自身がルートブリッジだと思っています。

SW2とSW4でBPDUプロポーサルを送り合い、SW2のBPDUの方が条件が良いため、SW4がBPDU アグリーメントを送信します。

BPDU アグリーメントを受信したポートは指定ポート(DP)、BPDU アグリーメントを送信したポートはルートポート(RP)になります。
SW1とSW3間のRSTP同期
上の同じ動きをします。最終的には、SW1〜SW3間のポートの役割は以下のようになります。

SW3〜SW4間のRSTP同期
最後にSW3とSW4のRSTP同期を見ていきます。 SW3、SW4それぞれ、BPDUプロポーサルを送信します。

この場合、SW3のBPDUの方が条件が良いため、SW4がBPDU アグリーメントを送信するように見えますが、ここではBPDUアグリーメントは送信しません。
BPDUアグリーメントを送信したポートは必ずルートポートにならないといけません。SW4では、Fa0/24ではなく、Fa0/23の方がポート識別子が小さいため、ルートポートになります。そのため、BPDUアグリーメントを投げず、無視します。

SW3から見ると、BPDUプロポーサルを送信しているのに、アグリーメントが返ってきません。そのため、SW3はSW4をRSTPに対応していないスイッチなんだと解釈し、通常のSTPのポートとして、動作します。
結局、SW3〜SW4間は通常のSTPと同じような動作となります。
SW3〜SW4間では、指定ポートはSW3側になり、30秒(Discarding:15秒+Learing:15秒)後に、転送状態になります。SW4側はDisgarding状態(ブロッキング状態)であり、RSTPでは、2番目のルートポートの候補という意味で、オルタネートポート(alternate port)と呼ばれます。

SW3〜SW4間のリンクは通常STPのように30秒時間がかかりますが、それ以外のポートは瞬時にポートを転送状態に推移させます。
結局、SW3〜SW4間のリンクはSW4がDisgarding状態であるため、通常は使われず、転送状態が遅れても問題にはなりません。
また、RSTPのBPDUプロポーサル、BPDUアグリーメントはスイッチが1対1(point-to-point)で接続されている必要があります。
最後までお読み頂きありがとうございました。
コメント