第 9 回 LANの制御

本日の内容


このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。

9-1. スパニングツリー

ラウンドトリップタイムの近似

HUB 同士をループができるようにつなぐと、何が起きるでしょうか? IP で利用しようとすると、必ず ARP を使うことになるので、 Ethernet 上で ブロードキャストが発生します。 するとループを時計回りと反時計回りの双方向にブロードキャストパケットが 送出されます。 これが HUB をどんどん伝搬していきますが、 Ethernet のパケットには TTL がありませんので、一周してきたパケットは消えず、永久にパケットが回るこ とになります。 さらに、二股になっている部分で、ブロードキャストのパケットは二つになり ます。 それがループによって戻ってくると、元々一つのパケットが二つに増えること になります。 つまり、次のようなネットワークでは分岐にパケットが到達する度にパケット 量が倍に増えていきます。 このようにブロードキャストパケットが消失せず、 HUB 間を増殖しながら巡 る状況をブロードキャストストーム と呼びます。

IEEE 802.1d は Ethernet の冗長性を確保するためのプロトコルであるスパン ニングツリーを作ります。 これは、HUB をどのように接続しても、自動的にループを検出し、接続の一部 を使わないようにすることにより、ループを解消するプロトコルです。 その結果、全ての HUB の接続を保ったまま、全ての HUB の接続関係を木構造 にします。 このように全域に渡る木構造をスパンニングツリー(全域木)と呼 びます。 HUB 同士の接続の状況は動的に判断されるため、スパンニングツリー上で回線 故障が発生した場合、その回線を使用しないでスパンニングツリーが作られる ように動的に構造が変えられます。 つまり、この機能はブロードキャストストームを防ぐだけではなく、回線の冗 長構造による耐故障性をも得ることができます。

802.1d は回線異常に対して、当初数十秒で回復するように設計されていまし た。 その後、 802.1w という改良版が出ました。 これは故障してからスパンニングツリーを再構築するのではなく、あらかじめ 計算を行っておくものです。 そして、 802.1d-2004 というバージョンでこの 802.1w を吸収し、LAN の冗 長構成が可能なスパニングツリーのプロトコルは 802.1d という名称で一元化 されました。

スパンニングツリープロトコル(STP)

802.1d によるスパンニングツリー作成アルゴリズムの概要は次の通りです。

  1. 各 HUB にブリッジプライオリティを定めます。 また、 MAC アドレスが割り当てられています。
  2. 各 HUB 間で BPDU(Bridge ProtocolData Unit)というフォーマッ トのデータがやり取りされ、ブリッジプライオリティや回線速度などの情報が 交換されます。
  3. ルートブリッジを決定します。 これはブリッジプライオリティと MAC アドレスを組み合わせた ブリッ ジIDが最小の HUB が選ばれます。
  4. スパニングツリーを決定します。 これはルートブリッジまでの最速の経路のポートのみを使い、それ以外のポー トをブロックすることで得られます。
  5. BPDU は Hello プロトコルとして 2 秒毎にやり取りされるため、やり取 りが失敗すると回線障害として検出されます。 その時、全ての HUB に対してネットワークのトポロジーが変化したことを知 らせる BPDU が流され、スパンニングツリーが再構築されます。

9-2. VLAN

VLANとは

VLAN(Virtual LAN) とは物理的な接続とは異なる LAN 接続を行う ことです。 これは LAN の機器のソフトウェア的な設定により実現されます。 VLAN にはポートベース VLANタグ VLAN(802.1Q VLAN) の二種類があります。

ポートベース VLAN

ここにおける文脈で LAN とはユニキャスト、ブロードキャストが可能な対象 を言います。 つまり同一 VLAN に接続している機器同士はユニキャストもブロードキャスト も可能です。

ポートベース VLAN は HUB の設定によりブロードキャストエリアを区切るも のです。 ハブ内でグループ ID 毎にどのポートが属するかを決定します。 例えば 8 ポートの HUB を考えることにします。 ポートの番号を 1, ..., 8 とします。

  1. ハブの初期状態ではグループ ID 1 に全てのポートが属しています。
  2. 設定方法はグループ ID を追加し、ポートの所属をそれぞれのグループに対し て設定を行います。
○=on, ●=off
グループ 1 2 3 4 5 6 7 8
1
2

このようにすると、8ポートのHUBが 4ポートの二つのHUBに分割できます。 ポートベースVLANのメリットは一旦全ての線をHUBに接続した後に、配線を変 更せずに接続をソフトウェア的に変更ができることです。

なお、一つのポートは二つ以上のグループに属すこともできます。 そのため、つぎのような応用も考えられます。 二つの異なるLAN から一つのサーバを共有する時、 一つの HUB 上に二つの異なるグループを作り、サーバ用のポートだけ両グルー プに属するようにします。 こうすると、グループ間のトラフィックがない以上、互いの通信は相互に届か ないため、LAN のスループットは向上します。 但し、サーバから出るブロードキャストは両方のLANに伝わるため、完全には 分離できません。

○=on, ●=off
グループ 1 2 3 4 5 6 7 8
1
2

IEEE 802.1q VLAN

ポートベースの VLAN は単純に HUB のポートをグループ化するだけなので、 複数の HUB にまたがってグループを設定するにはグループ毎の配線が必要に なります。 また、サーバの共有例で説明したように、複数のグループに属するポートから のブロードキャストを特定の VLAN にだけ流すことはできません。

これに対して802.1q VLAN は Ethernet のパケットを拡張し、パケットにタグ を付けることにより、特定の VLAN 宛へのパケットとして流す仕組みです。 VLAN 番号は 1 から 4095 まで選べます。 また、 802.1q では、この他に、優先制御の機能も付加してあります。これに 関しては省略します。

パケットの構造は下記の通りになっています。 VLAN 番号 0 は優先制御のみを伝えます。 また、通常デフォルトの VLAN 番号は 1 になります。

タグ無し
7バイト分の 0xAA=0b10101010 1バイトの 0xAB=0b10101011 6バイト 6バイト 2バイト 0〜1500バイト 0〜46バイト 4バイト
プリアンプル SFD 宛先 送信者 長さ/タイプ データ パディング チェックサム
タグあり
7バイト分の 0xAA=0b10101010 1バイトの 0xAB=0b10101011 6バイト 6バイト 2バイト 2バイト 2バイト 0〜1500バイト 0〜46バイト 4バイト
プリアンプル SFD 宛先 送信者 TPID TCI 長さ/タイプ データ パディング チェックサム

まず、このタグ付きの Ethernet パケットは、通常の Ethernet と互換性があ りません。そのため、パケットの共存はできません。 TPID は Ethernet では 16 進数で 81-00 と決まっています。 また TCI は以下のようになっています。

3bit 1bit 12bit
優先度 CFI(MAC アドレスが標準形式かどうか示すフラグ) VLAN ID

ここで、 VLAN ID=0x000 は空、つまり優先度のみの情報を指し、 VLAN ID=0xFFF は実装上の都合により予約されています。 ユーザは 0x001 から 0xFFE までの値を VLAN ID に使います。 0x001 はデフォルトの VLAN ID として使われます。

このように、タグつきの Ether フレームと、タグなしの Ether フレームは互 換性がないため、 HUB のポートはタグ付きのパケットをやり取りするポート と、タグ無しのパケットをやり取りするポートに区分けする必要があります。 次に、各ポートには少なくとも 1 つの VLAN 番号が割り当てられることにな りますが、タグ無しパケット用のポートは、タグを付加する必要があります。 そのため、タグ無しパケットに付加される VLAN 番号は固定する必要がありま すので、 タグ無しポートは一つの VLAN にしか属せません。 一方、タグ有りポートは複数の VLAN 番号のタグ付きパケットが来ても問題あ りません。

さて、パケットが送受されるプロトコルは次のようになります。 まず、タグ無しポートにパケットが入ってきた場合

  1. タグ付きのパケットがきたら破棄する
  2. パケットにタグを付加する
  3. 同一 VLAN 番号のポートに送る
○=no tag, ●=off, ◎=tagged
VLAN n
[n]□

一方、タグ付きポートにパケットが入ってきた場合

  1. タグ無しのパケットがきたら破棄する
  2. タグから VLAN 番号を読み取る。
  3. 同一 VLAN 番号のポートに送る
○=no tag, ●=off, ◎=tagged
VLAN n
[n]□ [n]□

CISCO の解釈

ここで説明した用語は CISCO 社の資料で使われている用語と異なります。 ここで CISCO 社の使用している用語を解説します。

CISCO 社のスイッチ Catalyst において、 IOS という OS における設定条件 について説明します。 上記のタグなしのポートとタグありのポートという区別は switchport のモー ドがaccesstrunk というモードになります。 そして、 access の場合は設定できる VLAN は一つだけ、一方の trunk の場 合はデフォルトでは全ての VLAN が追加できるようになっています。 但し、 VLAN 番号 1 はデフォルト VLANと呼ばれ、タグが付かず、 すべてのポートで使用できます。 つまり access モードのポートにおいて、タグなしのパケットは廃棄されず、 もし 1 番以外の VLAN に属していたら、

利用事例

利用事例1

複数の VLAN を一本の線にまとめ、 HUB をまたがって VLAN を構築する。

例えば、HUB A, HUB B の二台の HUB で、共に VLAN 番号 1,2 の VLAN を設 定する時、次のように設定することで、両方の HUB の VLAN 1 同士、 VLAN 2 同士が接続されます。

HUB A
事例1
○=no tag, ●=off, ◎=tagged
VLAN 1 2 3 4 5 6 7 8
1
2
HUB B
VLAN 1 2 3 4 5 6 7 8
1
2

この状態でポート 8 同士を接続すると、双方の VLAN 1, VLAN 2 がそれぞれ 接続されます。

利用事例2

802.1q は HUB だけの規格ではありません。 これはルータや通常の OS なども対応しています(Windows はネットワークカー ドに対応した設定ツールが必要)。 ルータのポートをタグポートにすることにより、複数の VLAN をそのままルー タに接続することができます。

ルータの VLAN の設定手順は次の通りです。

  1. インタフェイスには IP アドレス等は振らないでおきます。
  2. 必要な VLAN 数だけ以下を繰り返します。
    1. サブインタフェイスを宣言します。
    2. 802.1q の VLAN 番号を設定します。
    3. IPアドレスを振ります。
事例2

例えば、CISCO のルータの FastEthernet0 ポートに対して 2 個の VLAN を設定し、 VLAN 1 には 172.16.1.254/24、 VLAN 2 には 172.16.2.254/24 の振るには次 のようにします。


interface FastEthernet0
no ip address
exit
interface FastEthernet0.1
encapsulation dot1Q 1
ip address 172.16.1.254 255.255.255.0
exit
interface FastEthernet0.2
encapsulation dot1Q 2
ip address 172.16.2.254 255.255.255.0
exit

このように設定したルータのポートに HUB のタグポートを接続することで、 ルータポート一つに対して、 2 つの VLAN を接続できることになります。

なお、この VLAN の設定はハードウェアが許す限りできますので、実際はルー タのポート一つだけで、存在する HUB のポート全てを別々の VLAN にするこ ともできます。

利用事例3

ここでは情報通信工学実験のルータネットワーク実験のネットワークと類似し たネットワークを構築することを考えます。 実験書にあるネットワークはルータ同士をシリアルケーブルで接続するように なってますが、ここではルータ同士もイーサネットで接続することを考えます。 また、テスト用に末端のネットワークにはパソコン二台、ルータ同士を接続す るネットワークにもパソコン一台を接続できるようにします。

これを VLAN を使って、ルータ二台はポート一つずつ、 HUB は一台で済ませ ることにします。 二つの末端ネットワークを VLAN 1,2 とし、ルータ同士をつなぐネットワーク を VLAN 3 とします。そして、各ネットワークアドレスを 172.16.1.0/24, 172.16.2.0/24, 172.16.3.0/24 とします。 ルータ A のアドレスは 172.16.1.254 と 172.16.3.1, ルータ B のアドレス は 172.16.2.254 と 172.16.3.2 とします。 論理的なネットワーク接続図は次のようになります。

これを次のような物理的なネットワークで構成します。

これを実現するために HUB の VLAN の設定は次のようにします。

HUB
事例3
○=no tag, ●=off, ◎=tagged. ポート8は未使用
VLAN 1 2 3 4 5 6 7 8
1
2
3

このポート 3 にルータAの FastEthernet0 ポートを、ポート 5 にルータBの FastEthernet0 ポートを接続します。 そして、次のようにルータA、ルータBを設定します。

ルータA

interface FastEthernet0
no ip address
exit
interface FastEthernet0.1
encapsulation dot1Q 1
ip address 172.16.1.254 255.255.255.0
exit
interface FastEthernet0.3
encapsulation dot1Q 3
ip address 172.16.3.1 255.255.255.0
exit
ルータB

interface FastEthernet0
no ip address
exit
interface FastEthernet0.2
encapsulation dot1Q 1
ip address 172.16.2.254 255.255.255.0
exit
interface FastEthernet0.3
encapsulation dot1Q 3
ip address 172.16.3.2 255.255.255.0
exit

スパニングツリー

802.1q は 802.1s で定義された VLAN 毎のスパニングツリープロトコルを吸 収し、 VLAN 構造にループが存在しても冗長構成として利用できるようになっ ています。

802.1q の使えるHUB

このように 802.1q VLAN を使用すると、物理的なネットワークの構成と、論 理的なネットワークの構造を切り離すことができ、完全に自由に論理的なネッ トワークを構築できるようになります。 実際に 802.1q の利用できる HUB を紹介します。

Planex の HUB の設定は Web アプリケーションで行います。 一方、 Cisco の Catalyst は、ルータと同様に IOS によるコマンドの指定で 設定します。


坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科