STP【STPに関する設定と確認】

CCNAの試験に向けて学習中。
復習に見返せるようにメモしていきます。
ほぼ自分の勉強メモです。
過度な期待はしないでください。

前回投稿記事
-
こちらの [STP【STPの概要】](https://qiita.com/k-yasuhiro/items/b6f5ceb6a03a6ebd532d)投稿記事と
こちらの [STP【STPに関する機能】](https://qiita.com/k-yasuhiro/items/fef6e7ceb985c478c436)投稿記事の続きです

3.STPに関する設定と確認
-
#### 3-1.STPの確認
##### ■ 3-1-1.STPの状態の確認
STPの状態を確認するには、<b>特権EXECモード</b>で次の<font color="Red"><b>show spanning-tree コマンド</b></font>を
実行します。

```
# show spanning-tree [vlan < VLAN番号 >]
```
>
オプションとして、[vlan <VLAN番号>]を指定すると該当するVLANに関連する状態だけが表示されます。
指定しないと、スイッチポートが有効になっているVLANの数だけSTPの状態が表示されます。

show spanning-treeコマンドの実行結果を確認していきます。
先ずは、<b>ルートブリッジのスイッチの確認</b>
<img width="700" alt="ファイル名" src="https://i.gyazo.com/9b688d99e9b02eeffef7f82f0b0efa4a.png">

|項番|説明　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　|
|:---:|:---|
|①|VLAN1 におけるSTPのステータス情報|
|②|STPモードの情報。 [ ieee ] は PVST+ を示す|
|③|ルートブリッジのブリッジプライオリティ|
|④|ルートブリッジのMACアドレス|
|⑤|このスイッチ自身がルートブリッジである場合に表示される情報|
|⑥|ルートブリッジによりアドバタイズされるSTPの各種タイマーの情報|
|⑦|このスイッチ自身のブリッジプライオリティ。プライオリティ値 + VLAN IDの値の合計値|
|⑧|このスイッチ自身のMACアドレス|
|⑨|このスイッチ自身に設定されているSTPの各種タイマーの情報|
|⑩|MACアドレステーブルのエージングタイム※1|
|⑪|STPポートの役割を示す※2|
|⑫|STPポートのステータスを示す※3|
|⑬|そのポートのコスト値を示す※4|
|⑭|ポートIDには（Prio.Nbr）、ポートのプライオリティと番号を表示|
|⑮|ポートタイプの情報を表示※5|
>
※1　エージングタイムとは、MACアドレステーブルのエントリの有効期限を表します。
　　デフォルトでは、<b>「300秒」</b>でエントリは削除されます。
※2　<font color="Red">[Root] はルートポート</font>、<font color="Red">[Desg] は指定ポート</font>、<font color="Red">[Altn] は非指定ポート</font>
※3　<font color="Red">[FWD] はフォワーディング</font>、<font color="Red">[LIS] はリスニング</font>、<font color="Red">[LRN] はラーニング</font>、<font color="Red">[BLK] はブロッキング</font>
※4　<font color="Red">[2] は10Gbps</font>、<font color="Red">[4] は1Gbps</font>、<font color="Red">[19] は100Mbps</font>、<font color="Red">[100]は10Mbps</font>
※5　<font color="Red">[P2p] はポイントツーポイント（全二重）</font>、<font color="Red">[Shared] は間にハブ等が接続されている共有リンク</font>、
　　<font color="Red">[P2p Edge] はエッジポート（PortFastが設定されているポート）</font>

続いて、<b>ルートブリッジ以外のスイッチの確認</b>
<img width="700" alt="ファイル名" src="https://i.gyazo.com/5cedd11e055c5c2e66ddb5bcc299e232.png">
ルートブリッジの場合と異なる点は、ルートブリッジまでのパスコストが表示されている事と、
どのポートがルートブリッジに向かうポートかが表示されています。

|項番|説明　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　|
|:---:|:---|
|⑯|ルートブリッジまでのパスコストが表示|
|⑰|どのポートがルートブリッジに向かうポートかが表示|

<br>
##### ■ 3-1-2.STPが動作しているインターフェイスの確認
STPが動作しているインターフェイスを確認するには、<b>特権EXECモード</b>で
次の<font color="Red"><b>show spanning-tree interface コマンド</b></font>を実行します。

このコマンドを実行すると、各インターフェイスがVLAN事にどの役割を与えられているかを
確認出来ます。表示内容は、<font color="Green">show spanning-tree コマンドのインターフェイス情報と同じ</font>です。

```
# show spanning-tree interface < インターフェイス >
```
>
＜インターフェイス＞には、fastEthernet 0/0のように設定したいインターフェイスを指定

<br>
##### ■ 3-1-3.障害発生時の確認

動作の確認の為には <font color="Red"><b>debugコマンド</b></font>を使用します。debugコマンドは、パケットのやりとりや、
状態の変化を細かく確認でき、障害原因の究明に役に立ちます。

debugコマンドは、何かが発生する度に継続的に画面に状態を表示させる為、CPUに負荷が
掛かりやすいので、必要な時だけ動かし、それ以外の時には停止させておくのが良い。

STP動作の確認を開始するには、<b>特権EXECモード</b>で
次の<font color="Red"><b>debug spanning-tree events コマンド</b></font>を実行します。

```
# debug spanning-tree events
```

debug spanning-tree events コマンドを停止するには、<b>特権EXECモード</b>で
次の<font color="Red"><b>no debug spanning-tree events コマンド</b></font>を実行します。

```
# no debug spanning-tree events
```

<br>
ルートブリッジと繋がっていたインターフェイスがダウン等の障害が発生した場合、
下記の例だと、「Fa1/2」が新しくルートポートになり、リスニング状態になります（①）。
その後、転送遅延タイマーの15秒が経過した後に、ラーニング状態になります（②）。
また、その15秒後にフォワーディング状態に遷移します（③）。


```
# debug spanning-tree events
（省略）
*Mar  1 00:04:44.607: STP: VLAN1 Fa1/2 -> listening ★★<--新しくルートポートになる①
（省略）
*Mar  1 00:04:59.607: STP: VLAN1 Fa1/2 -> learning ★★<--15秒経過（15秒経過）②
（省略）
*Mar  1 00:05:14.607: STP: VLAN1 Fa1/2 -> forwarding ★★<--15秒経過（30秒経過）③
```
このように、タイマーによる状態遷移が確認出来ます。
障害が起きても自動で経路が切り替わり、この例の場合３０秒程で通信が回復します。

<br>
#### 3-2.トポロジ変更に関するオプション
STPのトポロジを変更させて事前に管理者が意図する構成にする為のコマンドを確認します。

##### ■ 3-2-1.ブリッジプライオリティの変更

ブリッジプライオリティを変更するには、<b>グローバルコンフィギュレーションモード</b>で
次の<font color="Red"><b>spanning-tree vlan priority コマンド</b></font>を実行します。

```
(config）# spanning-tree vlan < VLAN番号 > priority < プライオリティ >
```
>
＜VLAN番号＞には、対象のVALNの番号を指定します
＜プライオリティ＞には、ブリッジプライオリティの値を指定します。
＜プライオリティ＞は、<font color="Red">4096の倍数</font>で指定します。
プライオリティに指定できる値（0, 4096, 8192, 12288, 16384, 20480, 24576, 28672, 32768,..61440)

ルートブリッジにしたいスイッチでは、ブリッジプライオリティを小さくします。
ブリッジプライオリティを変更してルートブリッジを変更すると、各スイッチのポートの役割も
変更されます。

<br>
また、任意のスイッチをルートブリッジにする方法は、ダイナミックにルートブリッジを
指定する方法もあります。

ダイナミックにルートブリッジを指定するには、<b>グローバルコンフィギュレーションモード</b>で
次の<font color="Red"><b>spanning-tree vlan root priority コマンド</b></font>を実行します。

```
(config）# spanning-tree vlan < VLAN番号 > root priority
```

このコマンドを実行すると、指定したVLAN上のルートブリッジに選出されているスイッチの
ブリッジプライオリティをチェックし、そのスイッチのブリッジプライオリティより小さい値が
自動的に設定され、自身がルートブリッジに選出されます。

例えば、現在のルートブリッジのブリッジプライオリティが 16384だった場合、
コマンドを実行したスイッチのブリッジプライオリティはその値より小さい 12288に
自動的に設定されます。

<br>
##### ■ 3-2-2.パスコストの変更
ポートのパスコストを変更する事で、ポートの役割を変更出来ます。
ポートのパスコストを変更するには、<b>グローバルコンフィギﾕレーションモード</b>で
次の<font color="Red"><b>spanning-tree vlan cost コマンド</b></font>を実行します。

```
(config）# spanning-tree vlan < VLAN番号 > cost < パスコスト値 >
```
>
コストは、1〜200,000,000の間で指定出来ます。
デフォルト値は、[2] は10Gbps、[4] は1Gbps、[19] は100Mbps、[100]は10Mbps

<br>
##### ■ 3-2-3.パスコストのデフォルト値の変更
パスコストのデフォルトでは、ショート法が採用されていますが、コマンドによって
ショート法とロング法を切り替える事が出来ます。

パスコストのデフォルト値を変更するには、<b>グローバルコンフィギュレーションモード</b>で
次の<font color="Red"><b>spanning-tree pathcost method コマンド</b></font>を実行します。

```
(config）# spanning-tree pathcost method < short | long >
```

<br>
##### ■ 3-2-4.ポートプライオリティの変更
ポートプライオリティを指定するには、<b>インターコンフィギュレーションモード</b>で
次の<font color="Red"><b>spanning-tree vlan port-priority コマンド</b></font>を実行します。

```
(config-if）# spanning-tree vlan < VLAN番号 > port-priority < プライオリティ >
```
>
ポートIDのプライオリティも役割の選択基準になります

<br>
#### 3-3.PortFastの設定と確認

STPでは、PCやルータがなどが接続されているポートでも通常の状態遷移を行いますが、
PortFastを設定する事でこれらのポートを即座にフォワーディング状態に遷移させる事が可能です。

PortFastを設定するには、<b>インターフェイスコンフィギュレーションモード</b>で
次の<font color="Red"><b>spanning-tree portfast コマンド</b></font>を実行します。

```
(config-if）# spanning-tree portfast  [ default | disable ]
```
>
「default」と設定すると、全てのインターフェースでPortFastが有効になります。
「disable」と設定すると、指定したインターフェースだけ無効にする事が出来ます。

※ PortFastの設定を行うと以下のようなメッセージが出力されます、

```
%Warning: portfast should only be enabled on ports connected to a single
host. Connecting hubs, concentrators, switches, bridges, etc... to this
interface  when portfast is enabled, can cause temporary bridging loops. Use with CAUTION

%Portfast has been configured on GigabitEthernet0/1 but will only
have effect when the interface is in a non-trunking mode.
```
「ハブやスイッチなどが接続されたポートでは、フレームのループが発生するかもしれないため
注意して使用してください」といった警告メッセージです。
<br>

PortFastの設定後、debug spanning-tree events コマンドを実行して動作の確認を
してみると、

```
*Mar  1 00:01:04.607: STP: VLAN0001 Fa0/1 -> jump to forwarding from blocking
```
<font color="Red">「jump to forwarding from blocking」</font>と表示されれば、ブロッキングからフォワーディングに
遷移出来ている事が確認出来ます。

<br>
#### 3-4.BPDUガードの設定と確認

##### ■ 3-4-1.BPDUガードの有効化
BPDUガードを有効化にするには、<b>グローバルコンフィギュレーションモード</b>または、
<b>インターフェイスコンフィギュレーションモード</b>で使用します。

<br>
▶︎ グローバルコンフィギュレーションモードの場合
グローバルコンフィギュレーションモードの場合、PortFastが設定されているポートの全てで
BPDUガードが有効になります。<b>グローバルコンフィギュレーションモード</b>でBPDUガードを
有効にするには <font color="Red"><b>spanning-tree portfast bpduguard default コマンド</b></font>を実行します。

```
(config）# spanning-tree portfast bpduguard default
```

BPDUガードを無効にするには、noを付けて実行します。

```
(config）# no spanning-tree portfast bpduguard default
```

<br>
▶︎ インターフェイスコンフィギュレーションモードの場合
インターフェイスコンフィギュレーションモードでは、PortFastが設定されているかどうかに関係なく
そのインターフェイスのみで有効になります。
<b>インターフェイスコンフィギュレーションモード</b>でBPDUガードを
有効にするには <font color="Red"><b>spanning-tree bpduguard コマンド</b></font>を実行します。

```
(config）# spanning-tree bpduguard < enable | disable >
```
>
＜enable＞を指定すると有効になり、＜disable＞を指定すると無効になります。


##### ■ 3-4-2.BPDUガードの設定の確認

<img width="500" alt="ファイル名" src="https://i.gyazo.com/ca76f174f4da35daa4d329ff67cea543.png">
BPDUガードが有効になっているFa0/3ポートにBPDUが届い際に、インターフェイスを確認すると、

```
FastEthernet 0/3 is down, line protocol is down (err-disabled)
```
と表示されていれば、Fa0/3ポートがエラーディーゼル状態になった事を示している。

エラーディーゼル状態になったポートは、スイッチを外してサーバを接続しても
デフォルトの設定では自動復旧しません。
手動で復旧させるには、<font color="Red">一度shutdown コマンドを実行してから no shutdown コマンドを
実行すれば</font>復旧します。

また、以下のrecoveryコマンドを設定しておけば300秒（デフォルト）ごとに自動的に
ポートを復旧させる事が出来ます。

```
(config) # errdisable recovery cause bpduguard
```

<br>
#### 3-5.ルートガードの設定と確認

ルートガードを有効にするには、<b>インターフェイスコンフィギュレーションモード</b>で
次の<font color="Red"><b>spanning-tree guard root コマンド</b></font>を実行します。

```
(config-if）# spanning-tree guard root
```
ルートガードを無効にするには、noを付けて実行します。

```
(config-if）# no spanning-tree guard root
```

<br>
<img width="600" alt="ファイル名" src="https://i.gyazo.com/c4e3e465d805fe89b37c3cb9ad04c0fc.png">
ルートガードを使用すれば、ルートガードを適用したポートで上位BPDUを受信しても 
<font color="Red">root-inconsistent（ルート不整合）</font>になりポートがブロックされることから、既存のSTPトポロジーは
保護され、通信断の問題は発生しません。
なお、不正なBPDUを受信したポートはroot-inconsistent状態になりますが、
不正BPDUを受信しなくなると root-inconsistent から回復してフレームの転送ができるようになります。


ルートガードの設定がされているインターフェイス情報を確認すると、

```
Interface　 Role  Sts　 Cost　　 Prio.Nbr　　Type
Fa0/3　　　　Desg　BKN*　１９　　　　128.3　　　　P2p *ROOT-Inc
```
インターフェイスのTypeに 「*ROOT-Inc」表示され、ルート不整合となっている事が確認出来ます。
Stsに表示されている 「BKN*」はbrokenという意味です。

<br>
#### 3-6.RSTPの設定と確認

RSTPを利用するには、全てスイッチで <b>spanning-tree mode rapid-pvst コマンド</b>を実行し、
動作モードをRSTPに変更する必要があります。
RSTPとSTPは相互性がある為、RSTPとSTPは混在させる事は可能ですが、RSTPとSTPは混在していると
RSTPの高速なコンバージェンスを利用出来ません。
その為、全てのスイッチで動作モードをRSTPに変更させる必要があります。

動作モードをSTPからRSTPに変更させるには、<b>グローバルコンフィギュレーションモード</b>で
次の<font color="Red"><b>spanning-tree mode rapid-pvst コマンド</b></font>を実行します。

```
(config）# spanning-tree mode < pvst | rapid-pvst >
```
>
＜pvst＞は、STP（IEEE802.1D）のモード。正確には PVST+ として動作するモード
＜rapid-pvst＞は、RSTP（IEEE802.1W）のモード。正確には rapid-PVST+ として動作するモード


<br>
spanning-tree mode rapid-pvst コマンドの実行結果を確認していきます。
<img width="800" alt="ファイル名" src="https://i.gyazo.com/5978749809597ef150988dfaf65afc58.png">
Spanning tree enabled protocolが、「rstp」に変わっています。
これによりスイッチが現在 rapid-pvstで動作していることが確認出来ます。