🎓 レベル:標準 | 重要度:A(必須) 📎 前提:イーサネットとMACアドレス
要点(BLUF)
- スイッチはフレームの送信元MACから「どのMACがどのポートにいるか」を学習し、MACアドレステーブルに記録します。
- 宛先MACがテーブルにあればそのポートだけへ転送、なければ全ポートへフラッディング(受信ポートを除く)します。
- これにより、ハブと違い不要なトラフィックを各端末へ撒き散らさず、衝突なく全二重で通信できます。
学習と転送の3ステップ
スイッチの動作は驚くほど単純な3つのルールでできています。
- 学習(learn):フレームを受けたら、送信元MACと入ってきたポートの対を表に記録(更新)。
- 転送/フラッディング(forward/flood):宛先MACを表で引く。
- ヒット → そのポートだけへ転送(ユニキャスト転送)。
- ミス(unknown unicast)またはブロードキャスト/マルチキャスト → 受信ポート以外の全ポートへフラッディング。
- エージング(age):一定時間(既定300秒)更新されないエントリは削除。端末が移動しても追従できます。
graph TD R["フレーム受信"] L["送信元MACとポートを学習"] Q["宛先MACはテーブルにある?"] U["該当ポートだけへ転送"] FL["受信ポート以外の全ポートへフラッディング"] R --> L --> Q Q -->|"はい"| U Q -->|"いいえ/ブロードキャスト"| FL
例:空のテーブルから埋まるまで
PC-A(ポートGi0/1)が初めてPC-B(ポートGi0/2)へ送る流れ。
- A→B のフレーム到着。スイッチは「A は Gi0/1」と学習。Bの位置は未知 → 全ポートへフラッディング。
- B が応答 B→A。スイッチは「B は Gi0/2」と学習。A は既知 → Gi0/1 だけへ転送。
- 以後 A↔B は両者とも既知で、フラッディングは起きません。
「最初の1往復で両者を学習し、それ以降はピンポイント転送」が核心です。
実機での確認(Cisco IOS)
学習結果は MAC アドレステーブルで見られます。
Switch# show mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 001a.2b3c.4d5e DYNAMIC Gi0/1
1 001a.2b3c.9999 DYNAMIC Gi0/2
DYNAMIC:学習で動的に得たエントリ(エージング対象)。STATIC:手動またはシステムが固定したエントリ。- Cisco の MAC 表記は4桁ドット区切り(
001a.2b3c.4d5e)である点に注意。
エージング時間の変更や全消去:
Switch(config)# mac address-table aging-time 600
Switch# clear mac address-table dynamic
他層との関係
スイッチはL2だけを見るので、VLANをまたぐ通信やインターネット向けの通信はできません。それはルータ(L3)の仕事です。ただし学習・転送の単純さゆえに**ワイヤスピード(回線速度そのまま)**で動けるのがスイッチの強みです。VLANで論理分割すると、MACテーブルはVLANごとに分かれて管理されます(次トピック)。
なぜフラッディングするのか(設計の直観)
「宛先が分からないなら捨てる」のではなく「とりあえず全員に配る」のは、送れば必ず誰かが応答し、その応答で位置を学習できるからです。最初だけ無駄打ちしても、すぐに学習が済んでピンポイント転送に収束します。スイッチが事前設定なしに「つなぐだけで動く(プラグアンドプレイ)」のは、この自己学習のおかげです。
⚠️ よくある誤解
- 「スイッチはIPを見て転送する」ではない。見るのはMAC(L2)だけ。IPルーティングはルータ/L3スイッチの機能です。
- 「unknown unicast は破棄される」ではない。宛先MAC未知のユニキャストはフラッディングされます(ブロードキャストと同じ拡散だが宛先は1台)。
- 「MACテーブルは無限」ではない。容量上限があり、大量の偽MACで溢れさせる攻撃(MACフラッディング)への対策がポートセキュリティです(
[[07-03_L2セキュリティ]])。
対応 lab
- なし(IOS show 出力の読解。実機/シミュレータでの確認を推奨)
関連
- 前:
[[02-01_イーサネットとMACアドレス]]/次:[[02-03_VLANとトランク]] - テーブル溢れ攻撃への対策:
[[07-03_L2セキュリティ]]/ループ防止:[[02-04_スパニングツリー]]