本サイトはPRが含まれています。
検証中に島HUBの接続を間違ってしまったんだけど、ネットワーク全体が使えなくなってしまったの・・・なんであんなことになったのかしら?
チャーチルさん
ポン先生
もしかしてループしていたんじゃない?だとすれば島HUBだけじゃなくてネットワーク全体へ影響があるよ。。。
ネットワークにおいてループは最も避けるべき天敵の一つです。ループの恐ろしさと回避方法はネットワークエンジニアとしては必ず把握しておきましょう。
前提としてL2通信の仕組みを理解しておいた方が記事は読みやすいです。
HAL校長
目次
ネットワークにおけるループ
-
ループ発生の仕組み → ブロードキャストの無限転送
- ループの問題点 → 他の通信ができなくなる
ループ発生の仕組み → ブロードキャストの無限転送
ネットワークにおけるループとは「無限ループ」の事です。以下のネットワークを例に考えてみましょう。
例えば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のメリットは主に以下のポイントです。
- 物理的なケーブル抜線やポートシャットダウン無しで通信を止めてくれる
- どのポートをブロッキングにするかを自動的に計算してくれる
いずれにしてもAutomaticにループを防いでくれるというポイントですね。どのポートをブロッキングにするかの設計や設定はもちろんあるのですが、一旦ここはループを検知したらSTPが勝手にブロッキングしてループを防いでくれると覚えておきましょう。
STPの機能2:L2通信の冗長化
ループ防止とは別にSTPの機能を利用して冗長化することもできます。例えば以下のようにスイッチA⇔スイッチC間ポートの障害でリンクダウンした場合です。PC③→PC①の通信はこのポートを経由していたので通信できなくなりました。
ここでSTPのメリットとしてループの自動検知がありました。今まではスイッチA、B、CでループしていたためスイッチCのポートをブロッキングとしていました。一方、ポートリンクダウンということはこの時点でループは無くなっています。そしてSTPはループの発生だけでは無くループの解消も検知できます。よって障害発生後スイッチCのブロッキングポートも自動的に解除されスイッチB経由で通信できるようになるという訳です。
上記に関してもやはり自動的に検知して動作してくれる点が大きなメリットです。障害発生時はいかにユーザ影響を抑えて切り替えられるかがポイントになります。障害発生時にネットワーク管理者が対応できるとは限らないので自動的に切り替わる仕組みは企業のネットワークにおいて非常に重要になります。
元々はループを防ぐ目的でのSTPだったけど、この場合は
- わざとループ構成にする
- STP設定でブロッキング(ループ通信を防ぐ)
- 障害発生したらブロッキング解除で切り替え
というコンボでネットワークを作っていて面白いね!
チャーチルさん
ネットワークエンジニアを目指すならCCNAを取得しよう!
CCNAとはCisco社のメーカ認定資格です。CCNAの取得はネットワークエンジニアの基本的な知識やCisco製品の理解の証明になります。
特定メーカの資格で役に立つの?実際には他メーカの機種も扱うんじゃないの?
チャーチルさん
ポン先生
確かに業務上Cisco以外の機器を扱うことはあるだろうけど、最初にCiscoを勉強しておくと他の機器も理解しやすくなるんだ。
Ciscoは数あるネットワーク機器メーカの内の1社ですがディファクトスタンダードと言われています。つまり業界標準として位置付けられており、他メーカ機種でもCiscoのコマンドライン等を参考にしている事が多いです。そのため初見の機器でもCiscoと設定方法が似ており、「大体は分かる」なんてケースも多々あります。ネットワークエンジニアとしてはCiscoの学習はむしろ必須と言えるレベルでしょう。
また、Ciscoの資格と言っても独自仕様や製品の話だけでなく、ネットワークの一般的な知識も必要です。Cisco製品と言えベースはネットワークの標準規格に基づいて設計されており、CCNA取得でネットワークの一般的な知識も習得可能です。
上記理由からCCNAは非常におすすめの資格です。ネットワークエンジニアとして本格的に活躍したいのであれば是非チェックすべきでしょう。
【CCNAとは】難しい?勉強は?Cisco資格の登竜門 基本解説
まとめ
-
ループさせるとブロードキャストストームが発生
-
他の通信ができなくなるので大問題
-
STPはブロッキングポートでループを防止する
-
ループ発生時は自動検知、ブロッキングポートは自動生成
-
STPは障害発生時の冗長化手段としても利用可
STPはスイッチの設計では高い頻度で出てくる技術です。一方その仕組や設計上の項目は多く、本当に奥が深いです。この記事では細かい数字や設定の話は抜きにして「STPで何ができるのか」の部分だけにフォーカスしました(細かい話は別記事で)。ネットワークエンジニアとしては一生レベルで付き合う技術なので履修必須科目ですがまずはどういったものなのか、どんなメリットがあるのかを理解しましょう。