STUDY · NETWORK GUIDE

2-2 スイッチング基礎

スイッチが受信フレームを宛先ポートへ届ける仕組み。CAM テーブルの自動学習、ユニキャスト転送、未知宛先のフラッディング、aging-time までを Cat9000v 実機の出力で確認する。

1. スイッチの役割

スイッチは LAN 内の機器同士を結ぶ集線装置である。一見すると複数のケーブルを束ねるだけのハブと似ているが、両者の動作はまったく異なる。ハブは受信した信号をそのまま全ポートへ流すだけで、結果として接続機器すべてが同一の衝突ドメインに属する。これに対しスイッチは、フレームの宛先 MAC アドレスを見て 必要なポートにだけ転送する

ポートごとに衝突ドメインが分離されるため、複数のペア間通信が同時に成立し帯域が無駄にならない。この「宛先別の送り分け」を支えるのが、スイッチ内部に保持される CAM テーブルである。


2. CAM テーブルとは

CAM(Content Addressable Memory)テーブルとは、スイッチが「どの MAC アドレスがどのポートにつながっているか」を記録する対応表である。MAC アドレステーブルとも呼ばれる。

エントリは静的に登録することもできるが、通常は 受信フレームから自動学習 される。スイッチはフレームを受信するたびに、その送信元 MAC アドレスと着信ポートの組をテーブルに登録する。一定時間そのアドレスからの通信が途絶えると、エントリは エージングにより自動削除される。既定の保持時間は 300 秒である。

実機で確認すると次のようになる。Cat9000v 上で稼働中のスイッチに PC1 / PC2 を接続した状態で、テーブルとエージング時間を表示した出力である。

snippet
SW1#show mac address-table aging-time
Global Aging Time:  300

SW1#show mac address-table dynamic
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    5254.003b.4a81    DYNAMIC     Gi1/0/1
   1    5254.0060.3144    DYNAMIC     Gi1/0/2
Total Mac Addresses for this criterion: 2

VLAN 1 上で 2 件の動的エントリが学習されており、それぞれ Gi1/0/1 と Gi1/0/2 に紐付いている。DYNAMIC 表記は自動学習エントリを意味する。


3. ユニキャスト転送・フラッディング・学習の3ステップ

スイッチがフレームを受け取ったときの動作は、宛先 MAC が CAM テーブルに登録済みかどうかで分岐する。下のアニメーションは、空の CAM テーブルから始まり、最初のフレームでフラッディング → 学習 → 以降はユニキャストで送り分けされる一連の流れを 6 ステップで可視化したものである。図をクリックすると次のステップに進む。

  • STEP 1(フラッディング): 宛先 MAC が CAM に無い場合、受信ポートを除く同一 VLAN 内の全ポートへフレームを複製送出する。これをフラッディングと呼ぶ。ブロードキャストフレーム(ARP リクエスト等)と未知の宛先マルチキャストも常にフラッディング対象となる。
  • STEP 2(学習): 受信したフレームの 送信元 MAC と着信ポート の対応を CAM テーブルへ登録する。ここが学習の本体である。
  • STEP 3(ユニキャスト転送): 以降、その MAC 宛のフレームは登録済みのポートにのみ送出される。他のポートには流れないため帯域が節約され、関係ない端末へ盗聴目的のトラフィックも届かない。

最初の 1 フレームだけがフラッディングされ、以降は送り分けが効くようになる。これが「スイッチは賢い」と表現される所以である。


4. CML での検証

検証は CML(Cisco Modeling Labs)上の Cat9000v(IOS-XE 17.15.3)で行った。トポロジは以下のとおりで、PC1 と PC2 は 30 秒ごとに peer へ ping を打ち続けるバックグラウンドループで動作させている。

検証トポロジ

スイッチ側のアクセスポート設定は最小限で、VLAN 指定もせず default VLAN(VLAN 1)に所属させている。

snippet
interface GigabitEthernet1/0/1
 description PC1
 switchport mode access
end

interface GigabitEthernet1/0/2
 description PC2
 switchport mode access
end

show interfaces status で両ポートのリンク状態を確認した結果が次である。

snippet
SW1#show interfaces status

Port         Name               Status       Vlan       Duplex  Speed Type
Gi1/0/1      PC1                connected    1          a-full a-1000 unknown
Gi1/0/2      PC2                connected    1          a-full a-1000 unknown
# ...(Gi1/0/3 以降は未使用、省略)

両ポートとも VLAN 1 に所属し、オートネゴシエーションで 1Gbps / 全二重に決まっている。


5. CAM 学習の動作観察

ここからが本節の山場である。CAM が「動的に消えて、動的に再学習される」様子を時系列で観察する。

(a) 安定状態: PC1 / PC2 が定期 ping を打っているため、両端末の MAC が登録済みである。

snippet
SW1#show mac address-table dynamic
   1    5254.003b.4a81    DYNAMIC     Gi1/0/1
   1    5254.0060.3144    DYNAMIC     Gi1/0/2
Total Mac Addresses for this criterion: 2

(b) clear mac address-table dynamic 直後: 動的エントリを強制的に削除する。実行 4 秒後の表示が次である。

snippet
SW1#clear mac address-table dynamic
SW1#show mac address-table dynamic
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
SW1#show mac address-table count
Total Dynamic Address Count  : 0
Total Static  Address Count  : 0
Total Mac Address In Use     : 0

エントリが空になった。Dynamic Address Count = 0 となっている。

(c) 35 秒後: 何も追加で操作していないが、PC が定期 ping を再開すれば次のフレーム受信で即座に再学習される。

snippet
SW1#show mac address-table dynamic
   1    5254.003b.4a81    DYNAMIC     Gi1/0/1
   1    5254.0060.3144    DYNAMIC     Gi1/0/2
Total Mac Addresses for this criterion: 2

同じ MAC が同じポートで戻ってきた。CAM は その時点で通信している機器を映す動的なスナップショット であり、運用中はほぼ常に最新の状態に保たれている。aging-time = 300 秒という値も、通信が活発な間は意識しなくてよい。


6. ポート別の確認とカウンタ

特定ポートに絞った確認も可能である。トラブルシュート時に「あの機器は本当にこのポートに見えているか」を素早く判定するときに使う。

snippet
SW1#show mac address-table interface GigabitEthernet1/0/1
   1    5254.003b.4a81    DYNAMIC     Gi1/0/1
Total Mac Addresses for this criterion: 1

ポートごとの送受信フレーム種別は show interfaces ... counters で確認できる。

snippet
SW1#show interfaces GigabitEthernet1/0/1 counters

Port               InOctets    InUcastPkts    InMcastPkts    InBcastPkts 
Gi1/0/1              151142            281              1            372 

Port              OutOctets   OutUcastPkts   OutMcastPkts   OutBcastPkts 
Gi1/0/1              255634            282           1356            355 

InUcastPkts はそのポートで受信したユニキャストフレーム、InBcastPkts はブロードキャストである。ARP の解決リクエスト等が InBcastPkts に積まれていく。一方、フラッディングされた未知ユニキャストは送出側では OutUcastPkts として扱われ、宛先機器側では InUcastPkts として観測される。送受信の分布を見れば、その VLAN にどれだけブロードキャストやマルチキャストが流れているかも掴める。


7. 落とし穴・補足

  • CAM オーバーフロー: テーブル容量には上限がある(Cat9000v の本検証環境では空き 32766 件)。攻撃者が大量の偽 MAC をフラッディングさせて CAM を埋め尽くすと、本来のユニキャストエントリも溢れて削除され、結果として すべてのフレームがフラッディング扱い となる。これは盗聴の足場となる古典的な L2 攻撃で、後の章「2-8 L2 セキュリティ」で対策(Port Security 等)を扱う。
  • VLAN ごとに分離: CAM テーブルは VLAN ごとに独立している。同じ MAC アドレスでも VLAN が違えば別エントリとして扱われ、VLAN を跨ぐフレームはルータか L3 スイッチを経由しないと届かない。次節 2-3 で詳しく扱う。
  • 静的エントリ: 運用上必要な場合は手動で MAC を固定登録もできる(mac address-table static ...)。エージングされず常時有効だが、機器入れ替え時の保守負荷が増えるため通常は使わない。

8. 次節

ここまでで、単一 VLAN(default VLAN 1)におけるスイッチの素のスイッチング動作を実機の出力で確認した。CAM テーブルが受信フレームから自動的に育ち、未知宛先はフラッディングし、学習済みはユニキャスト送出する。この一連の流れがすべてのイーサネットスイッチの土台である。

続く 2-3「VLAN」では、1 台の物理スイッチを論理的に複数のスイッチへ分割する仕組みに踏み込む。CAM テーブルが VLAN ごとに分離されるという伏線の回収でもある。