2.STP
2.STP
2-1 STPとは IEEE802.1D デフォルトで有効
〇要するに:
ループ構造のネットワークの一部ノードを停止して木の幹みたいに切り開き、
フレームのループを防ぐプロトコル。あくまでスイッチングループの回避であって、
ルーティングループの回避でないことに注意。
なお障害発生時ににはちゃんと停止ノードを自動で切り替えてくれる。
なんでループ構造にしちゃうかというと、シングルポイント障害を冗長構成で乗り切るため。
しかしフレームのループは帯域が埋まっちゃうし、
場合によってはSWの複数ポートで同じフレームを何度も受信するので
MACアドレステーブルが何度も書き換わって負荷はかかるわ不安定になるわ良いことなし。 ※ スイッチでなくブリッジが主体だった頃にできたプロトコルなので、
Bridgeという呼称がよく出てくるが気にしない。
〇BPDU:
STP自動で動けるのは、スイッチ同士が一定間隔で情報交換をしているから。
STPが有効なスイッチはBridge Protocol Data Unit:BPDUというフレームを交換する。
一度後述するルートブリッジが決まってしまうと、
そのルートブリッジからSTPが有効な各スイッチへ届くよう、
01-80-C2-00-00-00へマルチキャストするようになる。
・ BPDUには通常動作用のConfiguration BPDUと、
トポロジ変更通知用のTopology Change Notification BPDUがある。
TCN BPDUは細かく分けると、下記のデータ構造の中のTypeと、 flag(1byte)の中の2ビットの組み合わせによって3つに分かれる。
・TCN BPDU(Topology Change Notification)
ルートブリッジじゃないノードにおいてリンク障害が発生するか、
もしくはBPDUがMax Age分届かない状態のときにHello Time(def:2s)ごとに発信する。
トポロジの変更をルートブリッジに向けて通知するBPDUになる。
Typeは普段が0x00のところ、このデータは0x80になっている。
・TC BPDU(Topology Change):
フラグのTCビットが1になっている。
BPDUを受信したルートブリッジがネットワーク全体にトポロジの変更を通知するために、
Max Age(def:20s)+Forward Delay(Def:15s)の間発信する。
※TCを受信し、トポロジ変更を認識した各SWはTCを転送し、MACアドレステーブルのエージングタイムを縮める。
(Def:300s→15s=Forwarding Delay)
・TCA BPDU(Topology Change Ack):
フラグのTCビットとTCAビットが1になっている。
TCNを受信したときのAcknowledgeとして発信する。
注!:TCNはルートブリッジに届くまで転送される。
TCNを受信した非ルートブリッジはTCAを返信するが、
自身もTCNを生成してルートブリッジへ発信する。
BPDUフレームはイーサネットヘッダとFCSの間に挟まれている計35バイトのデータ。下記左端はバイト数。
2 Protocol ID 常に0
1 Protocol Version .1Dの場合は0x00
1 BPDU Type Conf.BPDUなら0x00、TCNなら0x80、 RSTP:IEEE802.1wなら0x02
1 Flag 位相変更の通知のハンドシェイクに使う。使うのは2ビット分で、頭のTCとケツのTCAビットのみ。
8 Root ID ルートブリッジのIDだが、スイッチ起動時は自身のIDになる
4 Root Path Cost ルートブリッジへの距離:パスコストの累積
8 Bridge ID 自身のブリッジID = Priority + MAC address
2 Port ID BPDUを送信したポートのID = Port Priority + Port番号
2 Message Age ルートブリッジまでのホップ数
2 Max Age BPDUを最後に受信してからルートブリッジがイカれてんな、と判断するまでの最大経過時間。def:20s
2 Hello Time BPDUの送信感覚:def:2s
2 Forward Delay forward状態までの遅延時間:def:15s
listening や learningにポートの状態をとどめておく時間
〇ポートの状態
Disable: 何もしない。STPが無効のとき、あるいはリンクアップしていない(shutdown)とき。
Blocking:データフレームは送受信せす、BPDUは受信するだけ。
基本的にBPDUを受信している限りは状態が維持されるが、
1.Max Age(def:20s)ぶんBPDUを受信しなかったり、
2.直接接続しているリンクがダウンしたり
3.スイッチを起動したりリンクアップした直後のブロッキング状態の場合は
Listeningに移行する。※2.3は即時。
Listening:Blockingの次の状態。データフレームは送受信せず、BPDUは送受信する。
この状態でスイッチ間でBPDUを交換し、ルートブリッジやポートの役割を決定する。
Forwarding Delay(def:15s)分だけ継続
Learning:Listeningの次の状態。データフレームは送受信しないが、その送信元MACアドレスだけ
テーブルに追加する、(フレーム自体は破棄)BPDUはリスニング同様送受信する。
Forwarding Delay分だけ継続。
Forwarding:Learningの次の状態。データフレームは送受信し、送信元MACアドレスも学習。
BPDUを送受信する。ずっと状態を継続する。
・すべてのスイッチポートがBlockingかForwardingに落ち着く状態を「収束:Convergence」という。
これが短ければよいが、無印STPは1つのポートで20+15*2=50sかかる計算になる。
〇ポートの種類
指定ポート:DP。NW内にルートブリッジから最も近いポート:要するにだいたいルートブリッジのポート。
ルートポート:RP。ルートブリッジに最も近いSWのポート:要するに指定ポートの対向ポート。
非指定ポート:NDP。優先度が低く選ばれなかったポート。
〇ルートパスコスト
10Gbps=2
1Gbps=4
100Mbps=19
10Mbps=100
●2-2 STPはいい動きをしているね
・数珠繋ぎの3台のスイッチがあるとする。
□
/ \
.□――□
3台のスイッチの各ポートは、起動時にblocking→listeningになって
ブリッジIDからルートブリッジを選定、指定ポート、ルートポート、非指定ポートを決定。
次いで優先度が低くルートブリッジから遠くて対向ポート番号も大きい非指定ポートはブロッキングに。
指定ポートとルートポートはフォワーディングになる。
・障害がおこると、ルートブリッジが直接検知するか、TCN、TCでNDPをRPにする。
ーーーーーーーーーぶっちゃけあとはほとんど、上記原則の応用でわかる。
●2-3~2-5
・CSTとはCommon Spanning Treeのこと。どのVLANでもおんなじトポロジのスパニングツリーになる。
トラフィックは全部、非ブロッキングポートで処理されるので負荷分散なにそれ美味しいの状態。
・PVST+とは:Per Vlan Spanning Tree Plusのこと。VLANごとに、DP NDP RPの構成を変え、ロードバランシングする。
リンク障害が起こった時だけ、CSTと同様に全VLANで同じフォワーディングポートが使われるようになる。
Catalystスイッチではだいたいデフォ有効。
(conf)#spanning-tree mode pvst
・MSTとは:Multiple Spanning Treeのこと。MSTP(p:protocol)とも。IEEE802.1s
PVST+だと、VLANごとに全部バラバラの構成を処理していてスイッチに負荷がかかるし、
VlanごとにBPDUを送るから帯域を食ってしょうがない。
→共通のトポロジを持った複数のVLANグループをまとめて1つのSTPインスタンスとして扱う。
インスタンスごとに一つのルートブリッジを選出し、ブロッキング状態の非指定ポートを決定。
VLANごとがインスタンスごとになるので、帯域とスイッチへの負荷が減る。
2-6
覚えきれてないコマンド群
()#show spanning-tree detail:統計情報まで出るぜ
()#show spanning-tree root: VLANごとのルートブリッジが表示されるぜ
()#show spanning-tree interface: VLANごとのSTPポートの状態が表示されるぜ
(conf)#spanning-tree vlan 10 priority n*4096
(conf)#spanning-tree vlan 10 root priority →ダイナミックな設定。これを実行したスイッチのvlan10は、
強制的にルートブリッジになるようなIDを設定される。
(conf)#spanning-tree vlan 10 root secondary →上記と同様、2番目にプライオリティが低くなるように自動設定する。
2-7 PortFastとBPDUガード
要するに:Edgeのコンバージェンスは、ListeningもLearningも要らなくね?
起動したら即Forwardingでよくね?という設計思想のもと開発されたCisco独自機能。
Edge=ネットワークの枝葉の部分:アクセスポートで繋がってる端末などのこと。
例外的にトランクで繋がってるサーバも含むけど基本的にはほとんどアクセスポート。
Portfastを有効化すると、当該ポートはblockingからすぐForwardingに移行する。
Portfastを有効化したポートで、もしBPDUを受信した(エッジじゃないということになる)場合に
ポートをerr-disabledにする機能をBPDU Guardという。
コマンド?
→ifごとに有効化
(conf-if)#spanning-tree portfast
(conf-if)#spanning-tree bpduguard enable
もしくはSW全体で有効化
(conf)#spanning-tree portfast default
(conf-if)#spanning-tree portfast bpduguard degault
2-8 RSTP IEEE802.1w
・STPのコンバージェンスを早くしたい。50秒は掛かりすぎ。
(config)#spanning-tree mode rapid-pvst で有効化。
・リンクタイプの区別
全二重だったらポイントツーポイントリンク。高速コンバージェンス可能
半二重だったらシェアードリンク。これは従来のSTPと同じタイマー依存。
・Portfastで言うエッジのポート:Edge Portも織り込み済で、即Forwardingにさせられる。
・ポートの状態がまとまった
disable, blocking, listeningはMACアドレス学習もフレーム転送もしないので動作が一緒。
→まとめちゃえばよくね?ということで一括でDiscardingになりました。
learningとforwardingは一緒。
・非指定ポートの役割が細分化
Blockingにも2種類あるよな…ということで分けた。
1.Alternative Port :ルートポート上にリンク障害が発生したとき、即時Discarding→forwardingへ遷移しルートポートの役割を引き継ぐ。
覚え方:オルのル=ルート
2.Backup Port: あるセグメントで指定ポートを持つスイッチがそのセグメントに対して2本以上のリンク:冗長リンクを持ってるときに
その2本以上のうち1本はDiscardingになるが、指定ポートにリンク障害が発生したら
即時Discarding→forwardingに遷移し、指定ポートの役割を引き継ぐ。
・状態遷移の方法が超高速化:プロポーザルとアグリーメント
フラグで未使用だった6ビット分を使って
「俺が指定/代替orバックアップ/ルート ポートになりますよ」という提案を隣接ポート間で
proposal BPDUとしてお互いに送る。相手の提案でOKな場合、飲む方がagreement BPDUを送る。
agreementまでだいたい1秒かからない。
注意:
・rstpの状態確認:#show spanning-tree でよい
・#show spanning-tree vlan x でinterfaceが表示されたとき、
type Peer(STP)→対向はrstpでなくstpになってるということ。
1.C 2.B 3.C 4.D 5.B 6.A,E 7.A 8.bcd 9.cd 10 c RSTP: 11 A,E 12 A,D,F.G 13 a 14 a,D, F,.G