ネットワークの冗長化のために重要なスパニングツリープロトコル(Spanning Tree Protcol)。
CCNAの勉強や業務の中でも何度も触れる機会のあった技術ですが、その場でなんとなくわかっても、後々「あれ?どういう動きするんだっけ?」「そもそもなんで必要なんだっけ?」となることが多くありました。
しかし最近やっと理解できるようになったので、自分なりに分かり易く説明していきたいと思います。
※この記事で上げている例はスパニングツリープロトコルの種類の1つである、PVST+(Per VLAN Spanning Tree Plus)です。
スパニングツリープロトコルとは
スパニングツリープロトコル(以下、STP)とは、L2ネットワーク内でのループを防ぎ、スイッチを冗長化するためのプロトコルです。
通常、企業のネットワークは信頼性(通信が切れないこと)が求められるため、一部のネットワーク機器で障害が発生しても業務が滞らないようにさせたい場合、複数の機器を用いて冗長構成にします。
しかし、Layer2の通信であるARP(Address Resolution Protocol)などは、接続されているすべての機器にフレームを送信するため、ループ構成(送信元から送られたフレームが戻ってくる経路があること)になっていると、以下のように通信がグルグルと行き来してしまいます。
これをブロードキャストストームと言います。
ブロードキャストストームが発生すると、ネットワーク機器間のトラフィク量が増大し、機器のCPU使用率が上昇し続けることで通信が出来ない状態に陥ります。
そのため、L2ネットワークではループ構成にならないよう気を付ける必要があるのですが、ネットワークを冗長化させるためにはループ構成にしてネットワークを構築する必要があります。
そこで使われる機能がSTPで、ループ構成になっているネットワークを1本のツリー状にし冗長化を実現させます。
STPを使用した構成例
では実際にどのような構成で使用されるのか、私が経験したネットワーク構成を例に説明します。
まずは以下のような、ゲートウェイルータが主系・副系の2台ある構成です。(実際にはL2スイッチの下にはハブが繋がれています)
この構成では、通常時は主系のゲートウェイルータを通って通信していますが、主系のゲートウェイルータやその経路に障害が発生した場合、副系に切り替わるようHSRP(Hot Standby Router Protocol)を使い設定しています。
上の図の通り、主系・副系のゲートウェイルータとL2スイッチ間がループ構成となっているため、STPを有効にしないとブロードキャストストームが発生してしまいます。
そこで、主系・副系のゲートウェイルータとL2スイッチでそれぞれSTPを有効化します。
ちなみに、以下のような構成でもループ構成となります。
上記の場合、8の字状にループします。
STPの動作
続いて、STPにより経路がどのように決定されるのかを説明します。
BPDU(Bridge Protocol Data Unit)
まず、STPを有効にしたスイッチ(スイッチポートを持つルータもスイッチに含みます)からはBPDU(Bridge Protocol Data Unit)というフレームが送信されます。BPDUには以下のBPDUフレームフォーマットの情報が含まれており、これはSTP計算に必要な情報となります。スイッチはこのBPDUを送受信することで、他のスイッチの存在やネットワークの状況を把握することができます。
STPパスコスト
アクティブな経路を決定する際には、パスコストという各ポートの速度によって設定されている値が用いられます。このパスコストを合計した値が最小になる経路が、アクティブな経路として決定されます。
なお、パスコストはデフォルトで以下の値が設定されています。
ポート速度 | コスト値 |
10Gbps | 2 |
1Gbps | 4 |
100Mbps | 19 |
10Mbps | 100 |
ルートブリッジの選出
STPを有効にしているスイッチ間でルートブリッジが選出されます。ルートブリッジとは、ツリーの親となるスイッチのことで、そのスイッチを起点に経路が決定されます。
ルートブリッジの選出には、BPDUフレームに含まれる「ブリッジID」が比較されます。
ブリッジIDは「プライオリティ値」と「MACアドレス」で構成されており、デフォルトのプライオリティ値は「32768」ですが、この値は設定変更が可能です。
まず、ブリッジIDのプライオリティ値が比較され、プライオリティ値が最小の値を持つ機器がルートブリッジとして選出されます。しかし全ての機器でプライオリティ値が同じ場合は、ブリッジIDに含まれるMACアドレスが比較され、MACアドレスの値が最小の値を持つ機器がルートブリッジに選出されます。
通常は、ルートブリッジは意図的に決定するため、ルートブリッジを定義するスイッチで以下のコマンドを実施しプライオリティ値を変更します。
(config)# spanning-tree vlan10 priority 0
プライオリティ値は「0〜61440」の範囲内で4096単位で設定することができるため、セカンダリールートブリッジも定義したい場合は2番目に低い値を設定します。
ルートポートの選出
ルートブリッジが選出されると、ルートブリッジからBPDUが送信され、通過した非ルートブリッジのポートのパスコストの合計値が最小になるポートが「ルートポート(RP)」として選出されます。ルートポートは、1機器につき1つ選出されます。
ルートブリッジから送信されるBPDUのパスコストは0で送信され、非ルートブリッジのポートは受信したBPDUのパスコストに自身のパスコストを加算します。そのため以下図のようにSW2、SW3のポート①は0+19=19となり、SW2とSW3のポート②は19+19=38となります。よって、SW2、SW3のポート①がルートポートとなります。
指定ポートの選出
ルートポートが選出されると、次に「指定ポート(DP:Designated Port)」が選出されます。指定ポートとはルートブリッジに最も近い経路を判別するポートで、各スイッチ間のリンクで必ず1つ選出されます。
ルートブリッジに最も近いというのはパスコストが最小であることで、各リンクのスイッチのパスコストを比較し、値が小さいスイッチのポートが指定ポートに選出されます。なお、ルートブリッジは全ポートがパスコスト0であるため、必ず全ポートが指定ポートになります。
また、スイッチのパスコストが同じである場合はブリッジIDで比較され、値が小さいスイッチのポートが指定ポートに選出されます。ブリッジIDのプライオリティが同じ場合は、MACアドレスで比較されます。
非指定ポートの選出
指定ポートが選出されると、最後は非指定ポート(NDP:NonDesignated Port)が選出されます。非指定ポートはルートポートにも指定ポートにも選出されなかったポートが選出され、BPDUは受信するが通信は行われないブロッキング状態となります。
非指定ポートが選出されることでツリーが形成され、アクティブな経路が決定されます。
ポートの状態
STPにより経路決定がされるまでには、ポートは以下の状態を遷移します。
■ブロッキング(Blocking)
BPDUの受信のみ行われ、フレームの転送はされない状態。MACアドレスの学習も行われない。
■リスニング(Listening)
BPDUの送受信を行い、ポートの役割を選出している状態。MACアドレスの学習はされず、データ転送も行われない。
■ラーニング(Learning)
引き続きBPDUの送受信を行い、非指定ポートに選出された場合はブロッキングになる。受信したフレームのMACアドレスは学習するが、まだデータ転送は行われない。
■フォワーディング(Forwarding)
ルートポート、または指定ポートに選出された状態。データが転送されるようになる。
spanning-tree portfast
最後にSTPを利用した構成でよく使われる機能を説明します。
STPは上記で説明したように、経路決定するまでに複数の手順を踏むため、通信が開始できるようになるまでに数十秒時間がかかります。これにより、例えばSTPが有効になっているポートにDHCPでIPアドレスを取得するPCやサーバが接続された場合、通信が出来ない状態でDHCP要求が始まり、IPアドレスを取得出来ないなど弊害があります。
そのため、PCやサーバが接続されるポートでは次の設定をすることで、機器が接続されたポートは即座にフォワーディング状態になり通信が行えるようになります。
spanning-tree portfast
機器によっては、spanning-tree portfast edge とつける必要がある場合があります。またtrunkポートは spanning-tree portfast trunk を設定します。
ちなみに、機器の単体試験でポートの正常性確認をする際は、1つ1つポートを確認していくためこの設定を入れないと非常に時間がかかってしまいます。
コメント