Portfast とは
STP はスイッチ全体で有効になります。つまり、そのスイッチの全インタフェースで有効化されます。
スイッチ同士を接続するポートについては STP が有効になっていることによりループにならないよう経路冗長が可能になります。
ですが、PC やサーバ等の機器を接続するインタフェースにおいては通信ができるようになるまで 30 秒の時間が必要となってしまいます。
なぜならスイッチのインタフェースは PC が接続されると Block から Listen 状態に変わり、その 15 秒後に Learn 状態に変わり、その 15 秒後に Forward 状態になるからです。
状態遷移時の 15 秒は Forwarding Delay と呼ばれ、収束する前に (L2 ループとなる状態で) フレーム転送が開始されないように管理するタイマーです。
これは特にネットブート (PXE ブート) する PC 等にとってはクリティカルな問題ですし、それ以外の機器にとっても無駄な待ち時間です。この問題を解決するのが portfast です。
Portfast を設定すると、30 秒を待つことなく、Block からすぐに通信が可能な Forward 状態になります。
ただし、引き続き、そのポートで BPDU は送信しますし、もし優位な BPDU を受信した場合は状況把握次第、必要に応じて Block (代替ポート) にもなり得ます。
portfast の設定
アクセスポートの portfast 設定
Portfast には設定方法が2つあります。
1 つはインタフェースに設定するやり方です。trunk ポートに設定する場合は最後に trunk を付与します。
(config)# interface Giga 1/1 (config-if)# spanning-tree portfast
もう 1 つはスイッチの全アクセスポートに一括で設定するやり方です。この場合、逆に必要に応じてインタフェース単位で無効化をします。
(config)# spanning-tree portfast default (config)# interface Giga 1/2 (config-if)# spanning-tree portfast disable
spanning-tree portfast trunk
ケースとしてはレアですが、trunk ポートに設定することもできます。
(config)# interface Giga 1/24 (config-if)# spanning-tree portfast trunk
BPDU filter の概要と設定
前述の通り、portfast を設定しても STP 自体が無効化されるわけではないので、優位なスイッチが接続される BPDU の送受信はしますし、ルートブリッジの変更も起こり得ます。
ルートブリッジの変更は STP にとってインパクトのある問題です。Linux の仮想ブリッジ等で STP を送信してくるケースも考えられます。
このようなケースでは bpdu-filter と併用することがあります。bpdu-filter は基本としてインタフェース単位で設定します。
(config)# interface Giga 1/1 (config-if)# spanning-tree portfast (config-if)# spanning-tree bpdufilter enable
これにより BPDU の送受信を完全に止めることができます。この併用により事実上、このインタフェースで STP が無効化されます。
一方、以下コマンドによりスイッチ全体で有効化することも可能ですが、この場合はいったん BPDU を送信しないようになりますが、相手から BPDU を受信してしまうと STP が有効になります。
(config)# spanning-tree bpdufilter default
なので「余計な BPDU フレームは抑制したいけど念のため STP 自体は有効化しておきたい」という特殊なケースのみに利用します。
Portfast のメリット
メリットは「Listen, Learn 状態の省略」により「タイマー管理から解放されること」です。
STP のタイマーは安全を見て十分に長い時間を取っていますが、早めに収束しても Fowarding Delay タイマーにて計測される Listen ⇒ Learn 状態遷移を経過しないとフレーム転送は開始されません。
portfast 設定により Listen ⇒ Learn の状態遷移が省略できます。なお、直接リンク up/down するポートを想定するため、MaxAge のタイマーは元から不要です。
Portfast のデメリット
仮に「RSTP/MSTP が設定されたスイッチのポート同士を接続するケース」と「STP+postfast が設定されたポートにスイッチを接続するケース」を考えてみます。
RSTP/MSTP ではネゴシエーションにより確認が取れてからフレーム転送が開始されますので、安全です。一方、portfast の場合、安全を確認せずに見切りでフレーム転送をするわけですから、理論上は RSTP/MSTP よりも早くフレーム転送が開始されますが、一時的に L2 ループが発生する可能性があります。
インタフェース単位で bpdu-filter と併用した場合はそれが一時的ではなくなります。
これがまさに portfast のデメリットです。
Portfast と RSTP/MSTP の関係
Cisco の PVSTP+ には uplinkfast と backbonefast という拡張機能がありますが、portfast は一般的にこれらの機能と並んで紹介されます。
ですが uplinkfast と backbonefast は RSTP/MSTP 利用時には不要になるのに対し、portfast は引き続き RSTP/MSTP でも設定が必要となります。
その理由は、uplinkfast と backbonefast は RSTP/MSTP のネゴシエーション機能により「対向が RSTP/MSTP に対応している場合は」タイマーに依存せず速やかに収束できますが、portfast の接続機器は基本的に BPDU を送受信しないからです。
もう少し言うと、RSTP/MSTP は STP と下位互換性を保つ必要があるため、PC やサーバ等の機器を接続するポートは STP と同じ手順で状態遷移する必要があります。
なのでこれを回避するには結局 STP と同じく portfast を設定する必要があるのです。
portfast と edge ポート
Cisco では STP のポートの状態を以下の 3 つに分類しています。
- 標準 : 一般的な PVSTP+/PVRSTP+/MSTP を利用するポート
- エッジ : PVSTP+/PVRSTP+/MSTP を利用せず、PC やサーバ等の機器を接続するポート
- ネットワーク : Bridge Assurance という Cisco 独自機能が有効なポート (RSTP+/MSTP にて利用可能)
Bridge Assurance 機能が追加された影響のためか、portfast コマンドで edge が含まれるようになりましたが、エッジポートは PortFast と同義です。
Cisco IOS Release 12.2(33)SXI 以降では、PortFast オプションはエッジと標準です。エッジ ポートと PortFast ポートに違いはありません。
コメント