【STP①】ループとSTP基本

stp-part1

検証中に島HUBの接続を間違ってしまったんだけど、ネットワーク全体が使えなくなってしまったの・・・なんであんなことになったのかしら?

チャーチルさん

ポン先生

もしかしてループしていたんじゃない?だとすれば島HUBだけじゃなくてネットワーク全体へ影響があるよ。。。

ネットワークにおいてループは最も避けるべき天敵の一つです。ループの恐ろしさと回避方法はネットワークエンジニアとしては必ず把握しておきましょう。

前提としてL2通信の仕組みを理解しておいた方が記事は読みやすいです。

ネットワークにおけるループ

この章の項目
  • ループ発生の仕組み → ブロードキャストの無限転送

  • ループの問題点 → 他の通信ができなくなる

ループ発生の仕組み → ブロードキャストの無限転送

ネットワークにおけるループとは「無限ループ」の事です。以下のネットワークを例に考えてみましょう。

ループ構成例

例えばPC③からPC①への通信は、PC③→スイッチC→スイッチA→PC①の経路で転送されます。

ユニキャスト通信

これはユニキャスト通信なので問題無いです。ユニキャストとは宛先アドレスが一つの通信です。この場合、単純にPC①のMACアドレスめがけてトラフィックが流れるだけなので話は単純ですが、問題はブロードキャストです。

ブロードキャストの場合、ネットワーク全体に送信します。代表例としてはARPです。最初PC③はPC①のMACアドレスを知らないので「PC①のMACアドレスを教えてくれ~」の通信をネットワーク全体に投げます

スイッチはブロードキャストを受信すると受信ポート以外の全てのポートへ転送します。つまりスイッチCは1番、2番ポートへブロードキャストを転送します。

ブロードキャストの転送

通常であればブロードキャストは末端のデバイスに着信すればそれで終わりです。しかしループ構成の場合、「スイッチが受信ポート以外の全てのポートにブロードキャストを転送する」が無限に繰り返されます

スイッチC→スイッチA→スイッチB→スイッチC→・・・
スイッチC→スイッチB→スイッチA→スイッチC→・・・

ブロードキャストの転送(繰り返し)

ブロードキャストの仕様上、再度同じスイッチに着信した際に自動的に止めるような仕組みが無いので延々に周り続けてしまうのです。(例えばスイッチCが一度ブロードキャストを転送し、それがまたスイッチCに戻ってきても自分が過去に転送したブロードキャストかどうかを判定するプロセスが無いので再度同じように転送します。)

ブロードキャストの転送(ループの発生)

ループの問題点 → 他の通信ができなくなる

こうなってしまうと大問題で、他の正常な通信が殆どできなくなります。ループは結線した瞬間から発生し、一瞬でトラフィック量が爆発的に増えます。帯域的に圧迫してしまいますし、スイッチのリソース(CPU)がブロードキャスト通信の処理に追われます。

実際にループを発生させるとスイッチのCPU使用率が100%になったりします。こうなってしまうとスイッチは他に何もできません。PCから見ると全く通信できないorたまにパケットが通った?程度のレベルになるのでいずれにしてもほぼ通信できないという理解でOKです。

このようにブロードキャストが際限なくループする現象をブロードキャストストームと言います(ブロードキャストのストーム(Storm, 嵐))。ブロードキャストストームはブロードキャストドメイン内にのみに届きます。

このブロードキャストドメインを区切るのがVLANであり、VLANを適切に設定することで万が一ブロードキャストストームが発生しても届く範囲を絞る事ができます。

ポン先生

似た単語がたくさん出てきたから一度整理しよう^^;

  • ブロードキャスト:ネットワーク全体に投げる通信のこと
  • ブロードキャストストーム:ブロードキャストがループする事象のこと
  • ブロードキャストドメイン:ブロードキャストが届く範囲のこと

Spanning Tree Protocol

ネットワークでループが良くないのは分かったし、結線する時は気を付けるようにするけどループが発生した時にブロードキャストストームを防ぐ仕組みはないの?

チャーチルさん

ポン先生

あるよ。STPという仕組みで実装できるよ。

STP(Spanning Tree Protocol)は広く一般的に使われている仕組みです。この章ではSTPの基本的な動作を確認します。

この章の項目
  • STPの機能1:ループの防止
  • STPの機能2:L2通信の冗長化

STPの機能1:ループの防止

結論としては下図のような「ブロッキングポート」を生成し一部区間の通信を止める事によってループを抑制します

ブロッキングポートとループの防止

ブロッキングとはSTPのステータスの一つです。ブロッキングになったポートは通常の通信は転送しなくなります。つまりスイッチBのポート1⇔スイッチCのポート2間はブロードキャストも転送されなくなるためループも解消されます。論理的には下図と同じと言っても良いでしょう。
※あくまで通信が通らないというイメージ図です。物理的には接続されています。

ブロッキング中の論理的なイメージ

STPのメリットは主に以下のポイントです。

STPのメリット
  • 物理的なケーブル抜線やポートシャットダウン無しで通信を止めてくれる
  • どのポートをブロッキングにするかを自動的に計算してくれる

いずれにしてもAutomaticにループを防いでくれるというポイントですね。どのポートをブロッキングにするかの設計や設定はもちろんあるのですが、一旦ここはループを検知したらSTPが勝手にブロッキングしてループを防いでくれると覚えておきましょう。

STPの機能2:L2通信の冗長化

ループ防止とは別にSTPの機能を利用して冗長化することもできます。例えば以下のようにスイッチA⇔スイッチC間ポートの障害でリンクダウンした場合です。PC③→PC①の通信はこのポートを経由していたので通信できなくなりました。

障害発生(スイッチA⇔スイッチC間)

ここでSTPのメリットとしてループの自動検知がありました。今まではスイッチA、B、CでループしていたためスイッチCのポートをブロッキングとしていました。一方、ポートリンクダウンということはこの時点でループは無くなっています。そしてSTPはループの発生だけでは無くループの解消も検知できます。よって障害発生後スイッチCのブロッキングポートも自動的に解除されスイッチB経由で通信できるようになるという訳です。

ブロッキングポートの解除と通信復旧

上記に関してもやはり自動的に検知して動作してくれる点が大きなメリットです。障害発生時はいかにユーザ影響を抑えて切り替えられるかがポイントになります。障害発生時にネットワーク管理者が対応できるとは限らないので自動的に切り替わる仕組みは企業のネットワークにおいて非常に重要になります。

元々はループを防ぐ目的でのSTPだったけど、この場合は

  • わざとループ構成にする
  • STP設定でブロッキング(ループ通信を防ぐ)
  • 障害発生したらブロッキング解除で切り替え

というコンボでネットワークを作っていて面白いね!

チャーチルさん

まとめ

ポイント
  • ループさせるとブロードキャストストームが発生

  • 他の通信ができなくなるので大問題

  • STPはブロッキングポートでループを防止する

  • ループ発生時は自動検知、ブロッキングポートは自動生成

  • STPは障害発生時の冗長化手段としても利用可

STPはスイッチの設計では高い頻度で出てくる技術です。一方その仕組や設計上の項目は多く、本当に奥が深いです。この記事では細かい数字や設定の話は抜きにして「STPで何ができるのか」の部分だけにフォーカスしました(細かい話は別記事で)。ネットワークエンジニアとしては一生レベルで付き合う技術なので履修必須科目ですがまずはどういったものなのか、どんなメリットがあるのかを理解しましょう。