前の記事では、 L2スイッチがMACアドレスを利用してEthernetフレームを転送する ことを学びました。
たとえば、L2スイッチが次のような情報を持っていれば、
AA-AA
Port 1
BB-BB
Port 2
CC-CC
Port 3
宛先MACアドレスが BB-BBなら、 Port 2へフレームを転送できます。
では、ここで重要な疑問があります。
「BB-BBがPort 2にいる」とどうやって知ったのでしょうか?
実は、通常のL2スイッチは 通信を受信しながら MACアドレスとポートの対応を自動的に学習します。
その情報を保存するのが MACアドレステーブルです。
MACアドレステーブルという言葉を覚えるだけではなく、 「スイッチは受信フレームの送信元MACを学習し、 宛先MACをMACアドレステーブルで検索して ForwardまたはFloodする」 という一連の動作を説明できる状態を目指します。
MACアドレステーブルとは?
MACアドレステーブルとは、 L2スイッチが保持する MACアドレスとスイッチポートの対応関係を記録したテーブル です。
AA-AA-AA-AA-AA-AA
Gi0/1
BB-BB-BB-BB-BB-BB
Gi0/2
CC-CC-CC-CC-CC-CC
Gi0/3
この表を利用することで、 L2スイッチは毎回すべてのポートへフレームを送るのではなく、 必要なポートを判断して転送できます。
L2スイッチの効率的なフレーム転送を支えている 非常に重要な情報です。
MACアドレステーブルは最初から完成しているわけではない
新品のL2スイッチを接続した直後など、 動的に学習するMACアドレスの情報がまだない状態では、 MACアドレステーブルはほぼ空です。
まだ端末からフレームを受信していない
スイッチは通信を受信しながら、 接続されている端末のMACアドレスを学習していきます。
STEP 1:送信元MACアドレスを学習する
ここがMACアドレステーブルを理解するうえで 最も重要なポイントです。
L2スイッチは、 受信したEthernetフレームの 送信元MACアドレス(Source MAC) を確認します。
このフレームが Port 1から入ってきたとします。
スイッチから見ると、
ということが分かります。
そこでMACアドレステーブルへ、
AA-AA
→
Port 1
という情報を登録します。
宛先MACアドレスを見て 「この端末はこのポートにいる」と学習するのではありません。 フレームが入ってきたポートとSource MACを対応付けて学習 します。
送信元MACと宛先MACでは使い方が違う
MACアドレステーブルの動作では、 Source MACとDestination MACに異なる役割があります。
「このMACアドレスは、このポート側にいる」 という情報を更新します。
MACアドレステーブルを検索し、 どのポートへフレームを送るか判断します。
STEP 2:宛先MACアドレスをMACアドレステーブルから検索する
送信元MACアドレスを学習したあと、 スイッチは 宛先MACアドレス(Destination MAC) を確認します。
先ほどのフレームでは、
です。
スイッチはMACアドレステーブルから BB-BBを探します。
宛先MACが登録済みなら該当ポートへ転送する
MACアドレステーブルに宛先MACが存在する場合を 既知のユニキャスト として考えます。
スイッチはPort 2にPC-Bがいると分かっているため、 基本的には Port 2だけへフレームを転送します。
これがL2スイッチがハブより効率的に通信できる理由の一つです。
宛先MACが登録されていない場合はどうなる?
では、MACアドレステーブルに 宛先MACアドレスが存在しない場合を考えてみましょう。
AA-AA
Port 1
CC-CC
Port 3
ここへ、
というフレームが届いたとします。
この場合、 スイッチはBB-BBがどのポート側にいるか分かりません。
そこで、 フレームを受信したポートを除く同一VLAN内のポートへ転送 します。
受信元なので送らない
これを フラッディング(Flooding) と呼びます。
宛先がユニキャストMACアドレスでも、 MACアドレステーブルに存在しなければ 未知のユニキャスト(Unknown Unicast) としてフラッディングされます。
通信するとMACアドレステーブルはどう埋まっていく?
空のMACアドレステーブルから、 PC-AとPC-Bが通信する例を見てみましょう。
Source MAC:AA-AA
Port 1から受信
Destination BB-BBを知らないため、 Port 2・3などへFlood
Source MAC:BB-BB
Port 2から受信
BB-BB → Port 2
AA-AAとBB-BBの位置を スイッチが把握
BB-BB → Port 2
同じポート側に複数のMACアドレスを学習することもある
MACアドレステーブルでは、 「1ポートにつきMACアドレス1個」 とは限りません。
たとえばスイッチ同士を接続した場合、 その先に複数の端末が存在することがあります。
Switch-Aから見ると、 AA-AA、BB-BB、CC-CCのすべてが Port 24の先に存在します。
AA-AA
Port 24
BB-BB
Port 24
CC-CC
Port 24
正確には、 そのMACアドレスへ到達するために使うポート と考えると理解しやすくなります。
端末が別ポートへ移動するとMACアドレステーブルも更新される
端末の接続先が変わる場合もあります。
たとえばAA-AAを持つPCが、 Port 1からPort 4へ移動したとします。
AA-AA → Port 1
AA-AA → Port 4
Port 4からSource MAC AA-AAのフレームを受信すると、 スイッチは MACアドレスの学習情報を新しいポートへ更新します。
使われなくなったMACアドレスはエージングで削除される
MACアドレステーブルの動的エントリは、 永久に残るわけではありません。
一定時間そのMACアドレスから通信を受信しなければ、 古い情報として削除されます。
これを エージング(Aging) と呼びます。
これにより、 端末が移動したりネットワークから切断されたりしても、 古い情報がMACアドレステーブルに残り続けることを防げます。
Ciscoスイッチなどでは、 動的MACアドレスのエージング時間として 300秒が使われる構成もあります。 ただし値は機種や設定によって変更できます。
DynamicとStaticのMACアドレス
MACアドレステーブルには、 自動学習されたものだけでなく、 管理者が固定的に設定した情報が存在する場合もあります。
フレームのSource MACから スイッチが自動的に学習する。
管理者などが固定的に登録する MACアドレス情報。
通常の端末通信では、 DynamicなMACアドレス学習 を見る機会が多いでしょう。
ここで実際に動かしてみよう:MACアドレス学習シミュレーター
空のMACアドレステーブルから、 PC-AとPC-Bの通信によって テーブルがどのように作られるか確認してみましょう。
MAC Learning Simulator
MACアドレステーブルは空です
まだフレームを受信していないため、 動的なMACアドレス情報は登録されていません。
理解度チェック:Source MACとDestination MACの役割を判断しよう
このフレームを受信したスイッチが MACアドレステーブルへ学習する情報はどれでしょうか?
スイッチがMACアドレスを学習するとき、 どちらのMACアドレスを見るのか考えてみましょう。
実際のL2スイッチでMACアドレステーブルを確認する
Cisco IOSを使用するスイッチでは、 次のコマンドでMACアドレステーブルを確認できます。
Switch> enable
Switch# show mac address-table
表示例は次のようになります。
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
10 aaaa.aaaa.aaaa DYNAMIC Gi0/1
10 bbbb.bbbb.bbbb DYNAMIC Gi0/2
20 cccc.cccc.cccc DYNAMIC Gi0/3
ここでは、 MACアドレス・Type・Portに加えて VLAN という情報も表示されています。
なぜMACアドレステーブルに「VLAN」があるの?
ここまでの例では、 すべてのPCが同じLANに存在するとして考えてきました。
しかし実際の企業ネットワークでは、 1台のL2スイッチに接続されていても、 端末を複数のグループへ分けたいことがあります。
このように、 同じ物理スイッチの中でLANを論理的に分割する 仕組みが VLAN(Virtual LAN) です。
MACアドレステーブルも、 実際には VLANとMACアドレスの組み合わせ を意識して管理されます。
MACアドレステーブルはトラブルシューティングでも重要
通信できない端末のMACアドレスが スイッチに学習されているか確認します。
想定と異なるポートへMACアドレスが 学習されていないか確認できます。
VLAN番号とMACアドレス、 ポートの対応関係を確認できます。
確認問題:MACアドレステーブルの仕組みを理解できたか確認しよう
L2スイッチがMACアドレスを学習するときに確認する情報はどれですか?
スイッチは受信したEthernetフレームのSource MACを確認し、 そのフレームが入ってきたポートと対応付けて学習します。
宛先MACアドレスがMACアドレステーブルに存在しない場合の基本動作はどれですか?
未知のユニキャストの場合、 同一VLAN内の受信ポート以外へフラッディングします。
動的に学習したMACアドレス情報が一定時間使われなかった場合、 通常どのような処理が行われますか?
動的なMACアドレス情報は、 一定期間利用されなければエージングによって削除されます。
3問に挑戦してみましょう。
まとめ
MACアドレステーブルは MACアドレスとポートの対応関係を保持する
スイッチは 受信フレームのSource MACと受信ポート を使ってMACアドレスを学習する
Destination MACをMACアドレステーブルから検索し、 既知なら該当ポートへForwardする
宛先が未知なら 同一VLAN内でFloodingする
動的エントリは Agingによって古い情報が削除される
次は「VLANとは?LANを論理的に分割する仕組み」を学びましょう
ここまでの例では、 同じL2スイッチに接続された端末を 1つのLANとして考えてきました。
しかし実際の企業ネットワークでは、 営業部・開発部・サーバーなどを 同じ物理スイッチ上でも別々のLANとして分離 したい場合があります。
次の記事では、 1台のL2スイッチを論理的に複数のLANへ分割する VLAN(Virtual LAN) の仕組みを学習します。
VLANとは?LANを論理的に分割する仕組み →
