スイッチでサブネットを拡張する
皆さんが見慣れている機器としてはハブという集線装置があると思います。スイッチは見た目はハブとまったく同じです。スイッチはスイッチングハブという名前で販売されています。これは「見た目はハブだけど、機能はスイッチですよ」という意味です。今回は、スイッチングハブを使ってサブネットを拡張する方法について説明します。
皆さんは既にハブで構築したイーサネットのネットワークでは、頻繁に衝突が発生することを学びました。これは、ハブが全てのフレームを受信ポート以外のポートから送り出しているためです。その先に宛先のMACアドレスが存在していないポートにもフレームを送信しています。これが、頻繁に発生する衝突の原因です。衝突が発生すると、再送ということになりますので、通信時間が余計にかかることになります。
 |
ハブの構造
ハブは全てのポートがバス型ネットワークでつながっている |
 |
ポート1で受信したフレームは2~5のポートからそのまま送り出される |
ハブのポートの1つで受信されたフレームは、その受信ポート以外の全てのポートから送り出されるので、誰かがフレームを送信すると、他のポートはフレームを送信することが出来ません。衝突が発生してしまうからです。ハブによって接続されたネットワークの範囲をコリジョン(collision、衝突)ドメインと言います。
この衝突を避けるためにイーサネットではCSMA/CDというプロトコルを規定しているのでしたね。 CSMA/CDで衝突を回避するという手順は、いいのですが、大きなネットワークでは、なかなか自分の順番が回ってきません。
 |
ハブによって構成されるネットワークはコリジョンドメインと呼ばれる |
コリジョンドメインが大きすぎるとなかなか順番が回ってこないのだすると、このコリジョンドメインを分割すればいいではないかというアイデアが当然浮かんでくると思います。2つのハブを使って、コリジョンドメインを分割すると、今度は異なるコリジョンドメイン同士は通信できなくなります。
 |
2つのハブに分けて接続すれば衝突を回避できる |
コリジョンドメイン同士をルータで接続すると、2つのネットワークは違うサブネットに分断されてしまいます。こうなると、Windowsのファイル共有や、プリンタ共有などを利用できません。ここで、同じサブネットに属しながら、コリジョンドメインを分割したいという要望が出てきます。このような要望にマッチするのがスイッチングハブ(ブリッジ)と呼ばれる装置です。
スイッチングハブは、スイッチと略称されることもあります。しかし、スイッチでは電気の切替器や電話交換機などとも混同されますので、とりあえずこの章ではスイッチングハブと呼ぶことにします。それから、ブリッジという呼び方もあります。ブリッジとスイッチングハブは同じ機能を持っています。ただ、ブリッジはソフトウェアで処理し、スイッチングハブはハードウェアで処理するという違いがあります。この違いは、処理スピードの違いとなって現われます。
歴史的に言うとブリッジが先に登場しました。ブリッジはOSI参照モデルの第2層であるデータリンク層のレベルで複数のセグメント(イーサネットで言えば1つのバス型構造のネットワーク=ハブで構成されたネットワーク)を連結(リンク)するための機械として登場します。初めはパソコンを改造する形で登場しましたので、複数あるポートの受信フレーム、送信フレームを1つのCPUとメインメモリで処理するというものでした。従って、ポートが増えてくると処理が大変になります。そのうちにブリッジと名乗る製品も少しは出てきましたが、やはりパソコンそのものをコンパクトにしただけで、処理能力的にはあまり変わらなかったようです。
その後に出てきたのがスイッチ(ングハブ)と名乗る製品でした。つまり、ブリッジは概念的なもの、スイッチングハブは実際の製品から生まれた言葉というように言うこともできると思います。スイッチングハブはブリッジがソフトウェア的に処理していたものをハードウェア的に処理しています。それを可能にしたのがASIC(Application
Specific Integrated Circuit、通称はエーシック)技術です。ASICは特定の機能を実行するIC(集積回路)です。スイッチングハブはこのASICをポート毎に備えていて、MACアドレスの学習を行い、学習の結果に従って、宛先のMACアドレスが存在するポートにだけフレームを送り出します。
 |
スイッチングハブの外観
スイッチングハブは外観的にはハブと全く変わらない。ポートの結線がハブとスイッチングハブでは全く同じなので、ケーブルを一切変えずにハブをスイッチングハブに交換することが出来た。そして、処理スピードは格段に改善された。この辺りがスイッチ機能を持ったハブと呼ばれるようになった理由のようだ。 |
ブリッジは元々はパソコンを改造して作ったものです。従って、1つのCPUと1つのメインメモリで動きます。その結果、ポートが少数のうちはうまく機能したのですが、ポートが多数になると処理が大変になりました。これに対してスイッチングハブはポート毎にASICがついていてハードウェア的に処理しますので、処理速度がブリッジに比較して格段に速くなります。また、ポートが多くなっても処理が大変ということはありません。スイッチングハブには128ポート、256ポート、512ポートなどのものも珍しくありません。ポート毎にASICがついていますが、ASICは特定用途向けの集積回路ですので、汎用のCPUなどと比較すると安い価格て入手できます。その結果、多数のポートを集積させたスイッチングハブも安い価格で手に入れることが出来るようになりました。
ブリッジ(スイッチングハブ)は、学習機能を持っています。では、どのようにブリッジはMACアドレスを学習するのでしょうか。ブリッジにパソコンがつながっている状況を考えて下さい。ポート3の先にパソコンAがつながっていて、パソコンAのMACアドレスが00:21:70:1D:23:56だとします。パソコンAが宛先Bのフレームを送信したとします。このとき、送信元のMACアドレスがフレームの送信元フィールドに書かれていますので、ブリッジはポート3とMACアドレス00:21:70:1D:23:56の対応関係をアドレステーブル(ファイル)に記載します。宛先のMACアドレスの00:21:70:1D:28:53はどのポートの先にあるのかまだ分かりませんので、ブリッジはこのフレームを3以外の全部のポートから送り出します(ブロードキャスト)。返事は、ポート5の先にあるパソコンBから出てきます。このとき送信元のMACアドレスは、00:21:70:1D:28:23ですから、これをポート5と対応付けます。
 |
ブリッジの学習機能
転送するフレームの送信元MACアドレスフィールドを読んで学習 |
このように徐々に学習が進むと、ポート1~5の先にどのようなMACアドレスの機器があるかをテーブルに格納することが出来ます。
 |
学習結果に基づいて転送 |
ブリッジは学習した結果に基づいて受信フレームをどこから送り出すかを決定します。ポート3の先のパソコンと、ポート5の先のパソコンが通信をしている場合は、ポート1、2、4は余っていますので、使うことが出来ます。
以上の説明をまとめてみたいと思います。宛先がブロードキャスト(FF:FF:FF:FF:FF:FF)の場合は、全てのポートから受信ポート以外の全てのポートから送信します(これをflooding、フラッデングということがあります)。それから、学習が済んでいない宛先の場合も、同様にフラッディングします。宛先が学習済みの場合は、宛先が存在しるポートにだけユニキャストします。
先ほどまでは宛先の存在するポートからだけフレームを送り出すと言いましたが、ブリッジには宛先が他にないものはブロックするという機能もあります。これをフィルタリング機能と言います。
下の図を見て下さい。ハブ1に接続しているパソコンAとCの間の通信でやり取りされるフレームは宛先がAとCになっていますので、スイッチングハブは受信ポート以外のポートから転送する必要がありません。そこで、ブリッジはこのようなフレームは破棄してしまいます。また、違うセグメントの間のフレームは必要なポートからのみ送り出します。
 |
転送の必要のないフレームは破棄 |
ブリッジは、トラフィック(通信の世界では、ネットワーク上で送受信される信号やデータ、あるいはその量、密度などを指す)を整理し、特定のポートにだけフレームを送信することや、あるいは必要のないフレームにセグメントをまたがせないということで、通信の効率をアップすることに成功しました。
ネットワークの重要性を考えるとどうしても故障に強いネットワークにしたいところです。故障に強いネットワークを作るときに採用されることが多いのが冗長構成です。冗長構成は二重化とも呼ばれます。1つのシステムが故障してももう1つのシステムが処理を補うように構成されているので故障に強くなります。このようなネットワークは可用性が高いとか、耐故障性が高いなどといったりします。
ネットワークを運用しているとしばしばスイッチングハブが故障します。そこで、スイッチングハブを二重化してネットワークを構築するのが、大学や企業などのLANの常套手段となります。次に示すのはスイッチングハブを二重化したネットワーク図です。
 |
スイッチングハブの二重化
故障に強いネットワークになる(MACアドレスは下位24ビットのみ表示)
|
スイッチングハブを二重化するとちょっと困ったことが発生します。上のネットワークでコンピュータA(MACアドレス:AA-00-56)上のアプリケーションとコンピュータD(DD-00-34)上のアプリケーションがユニキャスト通信をしようとする場合、AからDに同じデータが重複して送信されますので、最悪の場合はアプリケーションが誤動作を起こしてしまいます。
 |
スイッチを経由して、同じフレームが重複して送信される
|
ブロードキャストフレームはもっと破壊的な結果をもたらします。コンピュータAから送信されたブロードキャストフレームがどのように転送されるか、具体的に見てみましょう。コンピュータAから発信されたブロードキャストフレームはスイッチングハブ1のポート1とスイッチングハブ2のポート1から入って、渦巻状のフレームを生み出します。とりあえず、スイッチングハブの1のポート1からポート2に抜けるフレームだけ着目してみましょう。ポート2から送り出されたフレームはセグメント2に到達しますが、電気的にはこのフレームは分岐して、スイッチングハブ2のポート2から入ってポート1から送り出されます。一部はセグメント1に戻りますが、また分岐してスイッチングハブ1のポート1から入って、ポート2に抜けていきます。これは、無限に繰り返されることになります。もちろん最初にスイッチングハブ2のポート1から入っていったフレームは逆向きの無限ループを生み出します。
 |
スイッチングハブはフレームの渦巻きを生み出す
|
 |
スイッチングハブが生み出す右回りの無限ループと左周りの無限ループ
|
この時どのようなことが発生するでしょうか、まず第1に考えられるのが、トラフィックが無限大にまで増加してネットワークを占有してしまうことです。そのため、衝突が頻繁に発生します。また、アドレス書き換えが頻繁に発生して、スイッチングハブが大忙しになります。
アドレスの書き換えについては次のように考えてください。コンピュータAはセグメント1にありますが、ループを回って、スイッチングハブ1あるいは2のポート2から、ポート1に抜けていくときに、スイッチングハブはコンピュータAがセグメント2に存在するものと勘違いして、アドレステープルを書き直します。また、セグメント1からセグメント2に戻ってくる際には、コンピュータAはセグメント1にあると判断されますので、またアドレステーブルを書き直します。これを無限に繰り返すことになります。
この結果、フレームの無限ループが発生すると、ほとんどスイッチドネットワーク(スイッチで構築されたLAN)はダウンしてしまいます。
ループを作らないように手作業でネットワークを構築すればいいではないかと考える人もいるでしょう。小さなネットワークではそれでもかまいません。しかし、大きなネットワークを運用する場合はそうもいきません。実際にスイッチングハブの故障率はかなり高いのです。大きなネットワークの管理者はスイッチドネットワークの故障箇所の特定と、新しいスイッチングハブの交換という作業に忙殺されることになります。
大きなネットワークを効率的に管理しようとするなら冗長構成はどうしても採用したいところですが、無限ループの発生はどうしても避けなくてはなりません。そういう場合に役に立つのがスパニングツリープロトコル(Spanning
tree Protocol、通称はSTP)です。スパニングツリープロトコルはブリッジを最初に市場に投入したDEC(Digital Equipment
Corporation、かつて存在したアメリカを代表するコンピュータメーカ。Compaqに買収され、そのCompaqがHPに買収されているので、現在はDEC製品はHPの名前で販売されている)が開発しました。現在はDECの手法を基にしてIEEE802.3Dとして標準化されています。STPを構築するにはIEEE802.3Dに準拠したスイッチングハブを購入しなくてはなりませんが、通常のスイッチングハブと比較するとかなり高価です。
スパニングツリープロトコルとはどんなものでしょうか。スパン(span)とはもともとは親指と人差し指を広げてものを指したり、橋渡しをしたりするときに使う言葉です。この場合は、スイッチンブハブ同士を橋渡しするというような意味です。したがって、スパニングツリーとはスイッチングハブを橋渡しする形でツリーを作るという意味になるでしょうか。つまり、スパニングツリープロトコルを使って冗長構成のスイッチドネットワークの中にツリーを作って、論理的にループのない形を作り出すことになります。そして、論理的に作ったツリーに対してフレームを流します。それでは具体的に説明していきます。
6.1 BPDU
BPDU(Bridge Protocol Data Unit)はSTP(Protocolの実装、プログラム)がスパニングツリーを構築する際に使うプロトコルです。STPが有効になったスイッチングハブでは、定期的にBPDUをマルチキャストアドレス(0180.C200.0000)に送信します。スパニングツリーのBPDUにはスパニングツリー構築の際に利用する設定BPDUと、スパニングツリーを再構築する(トポロジー変更)際に利用するトポロジ変更BPDUがあります。
フィールド |
サイズ(byte) |
説明 |
Protocol ID |
2 |
プロトコルIDは常に2 |
Version |
1 |
STPのバージョン |
Message Type |
1 |
通常のタイプのBPDUは0x00
変更時のBPDUは0x80 |
Flags |
1 |
ネットワークのトポロジーチェンジを最下位ビットで示したり、トポロジーチェンジの確認応答を最上位ビットで示したり |
Root ID |
8 |
ルートブリッジのブリッジID |
Path Cost |
4 |
ルートブリッジに到達するまでのコストの累計 |
Bridge ID |
8 |
スイッチ自身のID |
Port ID |
2 |
ポートプライオリティとポート番号 |
Massege Age |
2 |
ルートがBPDUを生成してからの経過時間(秒)。実際はルートブリックに到達するまでのホップカウント(経由するブリッジの数) |
Max Age |
2 |
BPDU最大保持時間。デフォルトで20秒。このタイマー時間が経過してもBPDUを受信できない場合は障害が発生したと認識する |
Hello Time |
2 |
スイッチがBPDUを送信する間隔。デフォルトで2秒 |
Forward Delay |
2 |
ListeningとLearnig状態に戻る時間。デフォルトで15秒 |
6.2 ルートブリッジと代表ブリッジ
ルートブリッジは論理的なツリーを構築する際のルートになるブリッジです。パラメータの設定によりどのブリッジでもルートブリッジになることができます。パラメータとしてはブリッジ識別子(BID)が利用されます。BIDについては後で説明します。
代表ブリッジはルートから特定リンクへのパケットの転送と、そのリンクからルートへのパケットの転送をそのリンクを代表して行うブリッジです。
ルートブリッジでも、代表ブリッジでもないブリッジは、STPメッセージ(STPの構築やトポロジー変更の際のメッセージ)は受信しますが、パケットの送受信は行いません。
6.3 ルートポートと代表ポート
ルートポートは代表ブリッジのポートのうち、ルートブリッジにつながるポートです。代表ブリッジは常に1つのルートポートを持ちますが、ルートブリッジは自分自身がルートなのでルートポートは持ちません。
代表ポートとは、代表ブリッジのポートのうち、「自分自身が代表している」リンクへ接続するポートです。代表ブリッジが複数のリンクを代表している場合は、複数の代表ポートを持ちます。
ルートポートでも、代表ポートでもないポートは、STPメッセージは受信しますが、パケットの送受信は行いません。
6.4 ブリッジ識別子(BID)、ポート識別子
ブリッジ識別子(BID)はブリッジを識別するための識別子です。単にブリッジの同一性を識別するだけでなく、ルートブリッジや代表ブリッジの選出のためにも利用されます。ブリッジ識別子は「優先度(2バイト)+MACアドレス(6バイト)」(計8バイト)から構成されます。物理アドレスが複数ある場合は、その中の最小のものが選択されます。
MACアドレスでルートブリッジや代表ブリッジの選出をしたい場合は、優先度は同じものをつけておきます。特定のブリッジを選出したい場合は、優先度を調整してください。できれば高性能のブリッジをルートに選出した方がいいと思います。
ポート識別子も単にポートを識別するだけでなく、多くのポートの中からルートポートや代表ポートを選出する際に利用できるように、「ポート優先度+ポート番号」で表します。
6.5 リンクコスト
リンクコストは高速リンクを使って効率のよいスパニングツリーを構築する際に目安となる値です。次のような値が推奨値とされています。
データレート |
推奨リンクコスト値 |
10Mbps |
100 |
100Mbps |
19 |
1Gbps |
4 |
10Gbps |
2 |
6.6 パスコスト
ツリーの中心にあるルートブリッジに至るまでのリンクコスト値を累積した値です。パスコスト値が小さいパスほどよい経路(近道)だとみなされます。
6.7 スパニングツリープロトコルの動作
では以上の説明を元にしてスパニングツリーを構築してみましょう。設定は以下のスイッチドネットワークに対して行います。
 |
一番性能の良いブリッジがルートになるように優先度を調整
|
手順は次の通りです。初めにルートブリッジにすべき機器を選択して、その機器がルートブリッジになるように優先度を決めます。その後、ルートへ至る(戻る)パスの合計を求めます。パスコストが小さいルートが優先されますが、同じ場合は送信元BID、送信ポート識別子が小さいものが優先されます。
それでは始めましょう。始めはルートブリッジの選出です。BIDが最小のものはSW1ですので、SW1がルートブリッジになります。
次はルートへ辿り着くまでのパスコストの合計を求めます。初めに、SW2からのパスコストを計算します。ポート0からルートブリッジへのパスコストは19(100Mbps)ですから、時計回りのコストは19となります。反時計回りのコストは、SW2→SW3間が19(100Mbps)、SW3→ルート(SW1)間が100(10Mbps)ですので、合計で119となり、SW2からは時計回りのコースが選択されます。次に、SW3からのパスコストもとめます。反時計回りに直接ルートへ至るパスはコスト100となります。これに対して、SW3→SW2→ルートの時計回りのパスは合計38(19+19=38)となり、時計回りのパスが選択されます。
 |
各パスのコストを計算して比較
|
SW2もSW3も時計回りのパスを選択しましたので、SW3のポート1がルートポートとなります。SW2がリンク3を代表する代表ブリッジとなり、SW2のポート1が代表ポートとなります。また、SW2のポート0はルートブリッジへつながっていますので、ルートポートとなります。SW3のポート0は代表ポートでも、ルートポートでもありませんので、パケットの送受信は行いません。
 |
SW3のポート0をブロックすることでスパニングツリーが完成
|
更新履歴
2016/02/10 作成
|