本文へ移動

インフラ転職コンパスわからないところから、ひとつずつ。

メニュー

MACアドレステーブルとフラッディングの仕組みを図解

動画と記事で学ぶ / L2・L3と経路制御

MAC学習は送信元、転送判断は宛先を参照します。未学習時と学習後の構成図で、VLAN、受信ポート、フラッディング範囲、Cisco確認コマンドを解説します。

ここからは、記事でゆっくり確かめましょう。図や操作の例を見ながら、気になるところから読み進めてください。

PCをスイッチにつなぐと、ほかのPCと通信できるようになります。では、PC-AがPC-Dへ送ったデータを、スイッチはどうやってDのところへ届けるのでしょうか。

手掛かりになるのが、MACアドレステーブルです。この表には「このMACアドレスの端末へ送るなら、このポートを使う」という対応が入っています。ただし、ケーブルを挿しただけで、端末の場所がすべて分かるわけではありません。

この記事では、設計構築チャンネルのスライドから4枚の図を使い、AからDへ送る場面と、Dから返ってくる場面を追っていきます。宛先が表にないときのフラッディングも、表が埋まっていく過程と一緒に見ていきましょう。

スイッチは、MACアドレスから送り先のポートを選ぶ

スイッチには、ケーブルを差し込む口がいくつもあります。この口をポートと呼びます。どのポートからデータを出すかを選んで転送する動作が、スイッチングです。

ここで扱うのは、OSI参照モデルのレイヤー2(L2)で動く、一般的なEthernetのスイッチです。レイヤー2とは、同じLANの中でデータを届ける仕組みを扱う層のことです。

Ethernetで送り出すデータの単位をフレームと呼びます。フレームには、送り主を示す「送信元MACアドレス」と、届けたい相手を示す「宛先MACアドレス」が入っています。

スイッチがフレームを受け取ったときは、次の二つを分けて考えると分かりやすくなります。

  1. 送信元MACを見て学習する。「Aから、このポートへ届いた。Aへ送るときも、このポートを使えばよさそうだ」と表へ記録します。
  2. 宛先MACを見て転送先を選ぶ。「Dへ届けたい。Dは、どのポートの先にいる?」と表を調べます。

つまり、表を作るときに見るのは送信元、送り先を決めるときに見るのは宛先です。ここを混ぜてしまうと、なぜ返信で相手を覚えられるのかが分かりにくくなります。

MACアドレステーブルは「MAC表」「MACテーブル」「CAMテーブル」と呼ばれることもあります。表には、MACアドレスだけでなく、VLANとポートの対応も記録されます。

宛先を知っていれば、そのポートだけへ送る

まず、宛先をすでに知っている、分かりやすい場面から見てみます。次の図では、A〜Dの4台が1台のスイッチにつながっています。Aはポート1、Bは2、Cは3、Dは4です。4台は同じVLANにいるものとして読みます。

VLANは、1台のスイッチの中でもLANを分けられる仕組みです。この記事では、別々のVLANを行き来する通信は扱わず、同じLAN内の転送に絞ります。

Aがポート1から送ったフレームを、スイッチがMAC表のDの登録を参照し、ポート4のDだけへ転送する図
図1:Dの場所を知っていれば、AからDへ必要なポートだけで転送する。
出典:設計構築チャンネル『MACアドレステーブルの作成とフラッディング』提供スライド4ページ。図を拡大して見る

図の赤い矢印を、①から②の順に追ってみてください。

  1. AがD宛てのフレームを送ります。スイッチはポート1で受け取り、送信元Aとポート1の対応を学習・更新します。
  2. スイッチは宛先DをMAC表で調べます。表には「Dはポート4」と登録されています。
  3. フレームをポート4から送り出します。Bのポート2とCのポート3には、このフレームのコピーを送りません。

表の役割は、「Dという端末がある」と覚えることだけではありません。Dへ届く方向を、ポート番号と結び付けて覚えるところに意味があります。

このように、宛先が分かっているユニキャストのフレームを対応するポートへ転送する動作を、既知ユニキャスト転送と呼びます。ユニキャストは、特定の一つの相手へ送ることです。

宛先が受信したポートと同じ方向にいると登録されている場合は、そのポートへ折り返さず、スイッチで破棄するのが基本です。今回の図は、受信ポート1と宛先ポート4が異なる場面です。

宛先を知らなければ、フラッディングで届ける

では、MAC表にDがない場合はどうなるでしょうか。次の図では、A・B・Cは登録済みですが、Dの行が空欄です。AはDのMACアドレスを宛先に書いて送れています。それでも、スイッチはDのいるポートをまだ知りません。

宛先DがMAC表にないため、スイッチがポート2・3・4へ同じフレームを複製し、BとCは破棄、Dは受信する図
図2:Dの登録がないため、受信したポート1を除き、B・C・Dの方向へコピーする。
出典:設計構築チャンネル『MACアドレステーブルの作成とフラッディング』提供スライド5ページ。図を拡大して見る

スイッチは、Dがどこにいるかを決め打ちできません。そこで、受信ポート以外の、同じVLANで転送できるポートへフレームを複製して送ります。これがフラッディングです。

図の構成なら、送り先はポート2・3・4になります。受信したポート1へは戻しません。BやCの方向にもコピーを出すことで、まだ場所を知らないDの方向にも届きます。

ここで気になるのが、「BとCにも届いてしまって大丈夫なの?」という点です。

コピーがBに届いても、フレームの宛先MACはDのままです。B宛てに書き換わるわけではありません。通常の端末では、ネットワークインターフェース(NIC)が自分宛てではないユニキャストのフレームを受け入れず、破棄します。Cも同じで、宛先に合うDが受け取ります。

そのため、「最初のIP通信は必ずフラッディングになる」とは限りません。先にARPの要求・応答があれば、そのやり取りでスイッチが端末を学習している場合もあります。見るべきなのは、そのフレームを受け取った時点で、宛先の登録があるかです。

返信を受け取ると、相手の場所も学習できる

AからDへ届いただけでは、スイッチはまだDの場所を学習できません。受け取ったフレームの送信元はAだからです。「Dへ送った」という情報だけでは、Dがどのポートにいるかは分かりません。

今度は、DがAへ返信する場面を見ます。

Dがポート4からAへ返信し、スイッチが送信元DをMAC表へ追加したあと、学習済みのポート1からAへ転送する図
図3:Dからの返信をポート4で受け取り、Dとポート4の対応を学習する。
出典:設計構築チャンネル『MACアドレステーブルの作成とフラッディング』提供スライド6ページ。図を拡大して見る
  1. Dからのフレームが、ポート4へ届きます。
  2. スイッチは送信元Dを見て、「Dはポート4の先」とMAC表に追加します。
  3. 返信の宛先はAです。Aはポート1と学習済みなので、ポート1だけへ転送します。

このあとAがもう一度Dへ送ると、表にはDの登録があります。今度はポート4を選べるため、先ほどのようにBやCの方向へ複製する必要はありません。

時点 スイッチがDについて知っていること AからDへ送る場合
Dから受信する前 Dのポートが未登録 フラッディングする
Dからポート4で受信した後 D → ポート4を登録 ポート4へ転送する

配線を変えなくても、MAC表の状態が変わると、フレームを出すポートが変わります。図2と図3を見比べるときは、赤い矢印だけでなく、Dの行が空欄から登録済みに変わったところも見てください。

スイッチが2台あっても、学習のルールは同じ

スイッチが2台になると、MAC表も2台分になります。次の図では、A・BがスイッチA、C・DがスイッチBにつながり、スイッチ同士をケーブルで接続しています。AからDまで、同じVLANがつながっている前提です。

最初は、どちらのスイッチもDの場所を知らないものとして、Aからのフレームを追います。

AとBを収容するスイッチAから、CとDを収容するスイッチBへフレームが渡る2台のスイッチの構成図
図4:スイッチごとに送信元を学習し、宛先が未登録なら、それぞれでフラッディングする。
出典:設計構築チャンネル『MACアドレステーブルの作成とフラッディング』提供スライド7ページ。図を拡大して見る
  1. スイッチAがAを学習します。Aから受け取ったポートを、「Aへ届ける方向」として記録します。
  2. スイッチAがフラッディングします。Dの登録がないため、Bの方向と、スイッチBへつながるリンクへコピーします。Bは自分宛てではないので破棄します。
  3. スイッチBもAを学習します。スイッチA側から届いたフレームの送信元は、Aのままです。そのため「Aへ送るには、スイッチAへつながるリンクを使う」と覚えます。
  4. スイッチBがフラッディングします。こちらにもDの登録がないので、CとDの方向へコピーします。Cは破棄し、Dが受け取ります。

図の太い赤線は、Dに届く経路を示しています。宛先が未登録なら、図中の説明にあるとおりBやCの方向にもコピーが出ます。赤線だけを見て「最初からDだけに送れている」と読まないようにしましょう。

次にDがAへ返信すると、スイッチBはDの接続ポートを学習し、スイッチAはDを「スイッチBへつながるリンク」の先として学習します。

スイッチ Aへ送る方向 Dへ送る方向(返信を受けた後)
スイッチA Aの接続ポート スイッチBへのリンク
スイッチB スイッチAへのリンク Dの接続ポート

同じAやDについて学んでいても、各スイッチにとって送り出すポートは違います。MAC表は、各スイッチが自分の位置から見た「相手へ届く方向」を持つ表なのです。

スイッチ間のリンクには、その先にいる複数の端末のフレームが通ります。だから、同じポートに複数のMACが登録されていても、それだけで異常とはいえません。

フラッディングとブロードキャストは、何が違う?

どちらも複数のポートへフレームが広がるため、同じ意味に見えるかもしれません。違いは、フレームが誰を宛先にしているかです。

比べるところ 未知ユニキャストのフラッディング ブロードキャスト
宛先MAC Dなど、特定の一つの相手 全体宛ての ff:ff:ff:ff:ff:ff
広がる理由 宛先へ届くポートが未学習 同じLAN全体へ知らせるため
ほかの端末での扱い 通常、自分宛てでない端末は破棄 同じVLANの端末が受け取り、内容に応じて処理

図2のフレームは、広く複製されても、宛先はDという特定の相手のままです。ブロードキャストの宛先へ変更する処理ではありません。この、宛先が未学習のユニキャストを未知ユニキャスト(Unknown Unicast)と呼びます。

なお、フラッディングは「複数のポートへ複製して送る動作」の名前です。ブロードキャストを転送するときにも、この動作を使います。「フラッディングはユニキャストだけ」と覚えず、この記事の図が未知ユニキャストの例だと捉えてください。

「全ポート」は、同じVLANで転送できる範囲

フラッディングしても、スイッチのすべての差し込み口へ無条件に送るわけではありません。基本となる範囲は、受信ポートを除いた、同じVLANで転送可能なポートです。

  • 別のVLANに属するポートへ、そのままコピーを出すことはありません。
  • ケーブルが抜けているなど、リンクが切れたポートからは届きません。
  • STPでデータ転送を止めているポートは、通常のフレームを転送しません。STPは、スイッチ間のループを防ぐ仕組みです。
  • スイッチ間がtrunkの場合は、そのVLANを通す設定になっている必要があります。

図では、説明を追いやすくするため、必要なリンクは利用でき、通常の学習・転送が有効なものとしています。未知ユニキャストを制限する設定があれば、その条件も加わります。実機で図のとおりにならないときは、MAC表に加えてVLANやポートの状態も確認します。

実機では、MAC表を通信の前後で見比べる

CiscoのスイッチでMAC表を見ると、図の「ポート1」は、たとえば「Gi1/0/1」のようなインターフェース名で表示されます。GiはGigabitEthernetの略です。番号の付け方は機種によって異なります。

ここでは図1〜3のポート1〜4をGi1/0/1〜Gi1/0/4へ読み替え、VLAN81に4台を接続した例を使います。VLAN番号と次のMACアドレスは、実機の表示を説明するために用意した値です。

端末 説明用MAC 接続先
A 02aa.8100.0001 Gi1/0/1
B 02aa.8100.0002 Gi1/0/2
C 02aa.8100.0003 Gi1/0/3
D 02aa.8100.0004 Gi1/0/4

まず、VLAN81の動的な登録を表示します。動的とは、フレームの送信元から自動的に学習した登録のことです。

Switch# show mac address-table dynamic vlan 81

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
  81    02aa.8100.0001     DYNAMIC     Gi1/0/1
  81    02aa.8100.0002     DYNAMIC     Gi1/0/2
  81    02aa.8100.0003     DYNAMIC     Gi1/0/3

この表示例ではDの登録がありません。この状態でAからD宛てのフレームが来れば、基本動作は図2のフラッディングです。

Dからの返信を受け取った後に同じコマンドを実行すると、次の行が追加されます。出力は説明用で、実際に取得したログではありません。

  81    02aa.8100.0004     DYNAMIC     Gi1/0/4

Dだけを調べたいときは、MACを指定して絞れます。表示されたVLANとポートが、想定した接続先と合っているかを確認します。

show mac address-table address 02aa.8100.0004
show mac address-table aging-time

コマンドの書式や出力は機種・ソフトウェアの版で異なる場合があります。Cisco Catalyst 9300のIOS XE 17.17では、動的MACの既定のエージング時間は300秒です。すべての機器が同じ値とは限らないので、使用機器の設定を確認してください。CiscoのMAC表管理資料

ずっとフラッディングが続くなら、Dから学習できているかを見る

動的MACの登録は、ずっと残るわけではありません。その送信元からのフレームを一定時間受け取らなければ、エージングで削除されることがあります。

フラッディングが続くときは、まずDからのフレームがスイッチへ届いているかを確認します。Dからの通信が戻ってこない、違うVLANで受信している、別の経路を通っている、といった状況では、想定した表にDが現れない場合があります。

同じMACが短時間に別のポートへ移り続ける場合は、端末の移動や構成変更だけでなく、ループなども調べます。ただし、フラッディングが見えただけで「攻撃だ」と決め付ける必要はありません。

調査では、表を消す前に、通信前後のMAC表とポートの状態を残しておくと比較できます。表を消すと未学習に戻り、一時的にフラッディングが増えるためです。

送信元で学習し、宛先で転送する

4枚の図を通して、スイッチの動きを次の三つへ分けて見てきました。

  • 送信元MACと受信ポートから、相手へ届く方向を学習する。
  • 宛先MACを表で調べ、登録があれば対応するポートへ転送する。
  • 宛先が未登録なら、受信ポート以外の同じVLANへフラッディングする。

2台のスイッチを通る場合も、各スイッチが同じルールで学習と転送を行います。「誰から、どのポートへ来たか」「誰宛てで、その登録はあるか」の順に、一つずつ追ってみてください。矢印とMAC表がどうつながるかを説明できれば、スイッチングの基本がつかめています。

同じテーマを動画で見る

矢印を順に追いながら確認したい方は、設計構築チャンネルの関連動画も参考にしてください。

スライドの出典と、補足の確認資料

図1〜4は、提供されたPDF『スイッチングとルーティングの違いのコピー』の4〜7ページを引用しています。スライド内の表題は『MACアドレステーブルの作成とフラッディング』、表記は「設計構築チャンネル」です。本文では学習と転送を分け、返信がない場合やMACの表記について補足しています。

このテーマを続けて学ぶ

最近の記事
ピックアップ