Ethernet とは — フレーム構造・MAC アドレス・スイッチ のサムネイル

Ethernet とは — フレーム構造・MAC アドレス・スイッチ

⏱ 約 17 分 view 65 like 0 LOG_DATE:2026-05-10
目次 / TOC

Ethernet #

Ethernet (IEEE 802.3) は 有線 LAN の事実上の唯一の選択肢として 50 年近く生き残っている L2 プロトコルである。1973 年に Xerox PARC で Bob Metcalfe らが「同じ太い同軸ケーブルにみんなでぶら下がって、衝突したら待って再送する」設計として始まったものが、速度を 1万倍 (10 Mbps → 100 Gbps)メディアを同軸→ツイストペア→光ファイバトポロジを共有バス→スイッチド と入れ替えながら、フレーム形式だけは互換を保って今に至る。

今の Ethernet は 1985 年の Ethernet とほぼ別物」というのが理解の出発点。CSMA/CD は実質死語で、現代のスイッチドネットワークでは衝突自体が起こらない。それでも同じ 1 枚のフレーム形式に乗り続けていることが、Ethernet を「世界中の OS とアプリが何の調整もなくしゃべれる L2 共通語」にしている。

本稿は 「フレーム形式」 → 「MAC アドレス」 → 「共有バスからスイッチドへの転換」 → 「スイッチ内部の動き」 → 「VLAN」 → 「速度世代」 → 「攻撃面と防御」 の順で、Ethernet で押さえておくべきところだけを通しで扱う。

1. フレーム形式 — Ethernet の不変の中心 #

Ethernet が 50 年互換を保てているのは、フレーム形式が IEEE 802.3 で標準化されてからほとんど変わっていないから。iparp も VLAN も、すべてこの 1 枚の入れ物の中身として成り立っている。

Ethernet フレーム形式 (DIX / IEEE 802.3) と 802.1Q VLAN タグ サイズ単位: byte / Preamble + SFD + IPG はハードウェアが扱い、OS から見えない ▼ 物理層レベル — NIC が wire 上で実際に流すバイト列 Preamble 7 byte 10101010 × 7 SFD 1 byte 10101011 [ Ethernet フレーム本体 (下段で展開) ] ここが OS / ドライバが構築・解析する部分 IPG 12 byte 等価 送信間隔 ▼ Ethernet フレーム本体 — OS から見える「1 パケット」 Dst MAC 6 byte 宛先ハードウェア Src MAC 6 byte 送信元ハードウェア EtherType 2 byte 0x0800=IPv4 等 Payload (46 〜 1500 byte) 中身は IP / ARP / その他 (EtherType が指す) FCS 4 byte CRC-32 ▲ 最小 64 byte (= dst+src+type+payload46+FCS), 最大 1518 byte (jumbo frame で 9018 まで) ▼ 802.1Q VLAN タグ付きフレーム — Src と EtherType の間に 4 byte 挿入 Dst MAC 6 byte Src MAC 6 byte TPID 2 byte 0x8100 TCI 2 byte PCP+DEI+VID EtherType 2 byte Payload (46 〜 1500 byte) FCS 4 byte ▲ 最大 1522 byte / TPID=0x8100 をハードウェアが見て「これは VLAN タグ付き」と判定 ▼ 主要な EtherType (Payload を解釈する鍵) • 0x0800 = IPv4 • 0x0806 = ARP • 0x86DD = IPv6 • 0x8100 = 802.1Q VLAN • 0x8847 = MPLS • 0x88CC = LLDP • 0x88E5 = MACsec • 0x88F7 = PTP (時刻同期) FCS は受信側が再計算して照合 → 不一致なら破棄 (損失検出はあるが再送はない / 上の TCP の仕事)

押さえどころ:

  • Preamble (7 byte) + SFD (1 byte) + IPG (12 byte 等価)NIC ハードウェアが扱うもので、OS / Wireshark から見えない。「Ethernet フレーム」と言うとき、普通はこれを除いた Dst MAC〜FCS を指す。
  • EtherType (2 byte)「Payload を何のプロトコルとして読むか」 の鍵。tcpdump が「IP packet」「ARP packet」と分けて見せるのはここを見ているだけ。
  • Payload は 46〜1500 byte。下限 46 byte は衝突検出に必要だった最小フレーム長 (64 byte) を満たすためで、現代では実質意味を持たないが、形式互換のために生き残っている。CSMA/CD の遺産。
  • FCS (4 byte CRC-32)損失検出のみ。不整合なら受信側 NIC が黙って捨てる再送は上位層 (TCP) の仕事で、Ethernet は再送しない。
  • 802.1Q VLAN タグSrc MAC と EtherType の間に 4 byte (TPID + TCI) 割り込む。TPID=0x8100 が「ここから VLAN タグ」のマーカー、TCI の下位 12 bit が VID (VLAN ID, 1〜4094)EtherType がもう 1 段奥に押し出されるだけで、それ以外は同じ形式。

2. MAC アドレス — 48-bit のハードウェア識別子 #

Dst/Src MAC の中身を 1 段掘る。48-bit (6 byte)、表記は 00:1A:2B:3C:4D:5E のような 16 進。前半 24 bit が OUI (Organizationally Unique Identifier、IEEE が製造ベンダーに払い出す番号)、後半 24 bit がベンダー内のシリアル

00:1A:2B : 3C:4D:5E
└─OUI──┘ └─NIC固有─┘
 (Cisco)  (シリアル)

最初の byte の 下位 2 bit が特殊な意味を持つ:

bit 名前 意味
bit 0 (I/G bit) Individual / Group 0 = ユニキャスト / 1 = マルチキャスト or ブロードキャスト
bit 1 (U/L bit) Universal / Local 0 = グローバル一意 (ベンダー割当 OUI) / 1 = ローカル管理 (仮想 NIC など)

これにより:

  • ff:ff:ff:ff:ff:ff = ブロードキャスト (LAN 全員宛, ARP request 等)
  • 01:00:5e:xx:xx:xx = IPv4 マルチキャスト (IPv4 multicast の MAC マッピング)
  • 33:33:xx:xx:xx:xx = IPv6 マルチキャスト
  • 02:xx:xx:xx:xx:xx のような bit 1 が立つ アドレス = VM / Docker / WSL の仮想 NIC, あるいは macOS / iOS の Private Wi-Fi Address (随時ランダム化)
# Linux で MAC を見る
ip link show                     # 各 NIC の MAC
ip neigh                         # ARP テーブル (IP→MAC マッピング)
ethtool -P eth0                  # 永続的な MAC (現在の MAC と異なるなら変更されている)

# 一時的に MAC を変える (匿名化, 検証, 復旧目的)
sudo ip link set dev eth0 address 02:11:22:33:44:55

MAC アドレスは LAN 内 (1 ホップ内) でしか意味を持たない。ルータを 1 つ越えるたびに 送信元 / 宛先 MAC は書き換わる (IP は同じまま)。これは IP と MAC が「何を識別しているか」の階層が違うことの直接的な帰結で、初学者がここでつまずきやすい

3. シェアドバスからスイッチドへ — 同じ名前で中身が変わった #

「Ethernet = 衝突したら待って再送する CSMA/CD」と教科書で読んだ世代もいるが、現代の Ethernet にはほぼ無関係。トポロジが根本から変わったため。

1980〜90 年代 (シェアドバス時代):

  • 同軸ケーブル (10BASE5 太い同軸 / 10BASE2 細い同軸) または ハブ (10BASE-T) に全員ぶら下がる
  • 物理的に 1 本の電線 = コリジョンドメイン = 誰かが送ると他は送れない (半二重)
  • 同時送信 = 衝突 (collision) → 双方ランダム時間待って再送 = CSMA/CD (Carrier Sense Multiple Access with Collision Detection)
  • ホスト数が増えるほど衝突が増えてスループット劣化

現代 (スイッチドフルデュプレックス):

  • スイッチ が各ポートを独立した 1 対 1 リンクとして扱う = ポートごとにコリジョンドメインが分離
  • 各リンクは 送信線と受信線が別 (フルデュプレックス) → 衝突が起きないCSMA/CD は無効化
  • スイッチ内部の MAC アドレステーブル で「この MAC はこのポート」と覚えて転送する
  • 結果として N 台のホストが N 本のリンクを同時にフル帯域で使える

この転換が起きた時期が 1990 年代後半〜2000 年代前半。10BASE-T 以降の ツイストペア + RJ-45 が前提となり、ハブが消えてスイッチに置き換わった。今でも「半二重」「全二重」「auto-negotiation」という設定項目が NIC に残っているのは、シェアドバス時代の名残 — ただし現代では実質常に「全二重」固定

覚えておくと得な歴史: CSMA/CD はもう動いていないが、Wi-Fi (802.11) では今も類似の機構 (CSMA/CA, Collision Avoidance) が動いている。Wi-Fi が混雑すると遅くなるのは、Ethernet が捨てた問題が無線にだけ残っているから

4. スイッチ内部の動き — MAC 学習とフラッディング #

スイッチが「この MAC はこのポート」をどう知るか? 来たフレームの送信元 MAC を見て、入ってきたポートと紐付けて覚えるだけ (= MAC learning)。一切の事前設定は要らない、これが「プラグアンドプレイで動く」の正体。

L2 スイッチの MAC 学習・転送・フラッディング フレームの src MAC を見て覚え、dst MAC で行き先ポートを引く PC-A aa:aa:aa:aa:aa:aa PC-B bb:bb:bb:bb:bb:bb PC-C cc:cc:cc:cc:cc:cc L2 Switch port 1 = PC-A / port 2 = PC-B / port 3 = PC-C / port 4 = trunk MAC アドレステーブル (FDB) aa:aa:aa:aa:aa:aa → port 1 bb:bb:bb:bb:bb:bb → port 2 cc:cc:cc:cc:cc:cc → port 3 エージタイマー: 300 sec 未学習 dst → 全ポート flood ff:ff:ff:ff:ff:ff → 全ポート ↑ ブロードキャスト PC-D (新規) dd:dd:dd:dd:dd:dd Router (trunk) port 4 で外と接続 学習フロー ① PC-A→PC-B のフレーム到来 ② src=aa を「port 1」と記録 ③ dst=bb を表で引く → port 2 だけに転送 未学習 dst のとき PC-A→PC-D で dd 未学習なら、 「不明ユニキャスト」として 来たポート以外の全ポートに flood ブロードキャスト dst=ff:ff:ff:ff:ff:ff は 常に全ポートに flood (ARP request はこれで届く) ▼ ループ防止 — 複数スイッチ間で物理的に環状になるとブロードキャストが永遠に回る 対策: STP (Spanning Tree, 802.1D) で論理的に冗長リンクを 1 本ブロックし、木構造に整える 現代は RSTP (802.1w) や MSTP (802.1s) が主流。データセンターでは TRILL / SPB / EVPN が代替

スイッチの動きを言語化:

  1. フレーム到着送信元 MAC を見て、入ったポート と紐付けて FDB (Forwarding Database) に登録 (or タイマー更新)
  2. 宛先 MAC で FDB を引く
    • ヒット (登録あり) → そのポートだけに転送 (= forwarding)
    • ミス (未学習ユニキャスト)来たポート以外の全ポートにコピー (= flooding, "unknown unicast flood")
    • ブロードキャスト (ff:ff:ff:ff:ff:ff) → 常に全ポートに flood
  3. エージタイマー (デフォルト 300 sec が定番) で 古いエントリを掃除 — 移動した端末に追従できる

STP (Spanning Tree Protocol, IEEE 802.1D) は、スイッチを冗長リンクで繋いだときにブロードキャストがループして増殖し続ける問題を防ぐためのもの。スイッチ間で BPDU を交換し、論理的にリンクを 1 本ブロックして木構造にする。BPDU で再構成するのに昔は 30〜50 秒かかった (RSTP/802.1w で数秒に短縮)。データセンタースケールでは STP の収束遅延が嫌われTRILL / SPB / EVPN-VXLAN といった「ループせずに全リンクを同時に使える」設計に置き換わっている。

# Linux ブリッジ (= ソフトウェア L2 スイッチ) の FDB を見る
bridge fdb show
ip link show type bridge

# Cisco IOS でスイッチの MAC テーブルを見る
show mac address-table              # 全エントリ
show mac address-table address aa.aa.aa
show spanning-tree                  # STP の状態

5. VLAN (802.1Q) — 1 本の物理線で複数の L2 を分ける #

LAN を 物理的に分ける代わりに、フレームに 12-bit のタグ (VID) を付けて論理的に分けるのが VLAN (Virtual LAN, 802.1Q)。同じスイッチでも、同じ物理線でも、VLAN ID が違えば L2 的には別の世界として扱われる。

主要な概念:

  • VID (VLAN ID) — 12-bit (1〜4094)。0 と 4095 は予約。4094 個までしか作れないのがクラウドスケールで足りなくなり、VXLAN (24-bit, 1600 万個) が後継として登場した
  • アクセスポート — 端末側のポート。1 つの VLAN にのみ所属、フレームに VLAN タグを付けない (スイッチ内部でのみ VID を扱う)
  • トランクポート — スイッチ間 / ルータ - スイッチ間のポート。複数 VLAN のフレームをタグ付きで運ぶ
  • ネイティブ VLAN — トランク上でタグなしで送る VLAN (デフォルト VLAN 1)。VLAN hopping 攻撃の温床になりやすいので、ネイティブ VLAN を業務では使わないのが定石
# Linux で VLAN サブインターフェースを作る (eth0 上に VLAN 100)
sudo ip link add link eth0 name eth0.100 type vlan id 100
sudo ip addr add 10.100.0.5/24 dev eth0.100
sudo ip link set eth0.100 up

# Cisco IOS でアクセスポート / トランクポート設定
interface Gi0/1
 switchport mode access
 switchport access vlan 10

interface Gi0/24
 switchport mode trunk
 switchport trunk allowed vlan 10,20,30
 switchport trunk native vlan 999      ! 業務用 VLAN を native にしない

VLAN は「ブロードキャストドメインの分割」「部門ごとの分離 (経理 / 開発 / ゲスト Wi-Fi)」「VoIP と PC を 1 本のケーブルで運ぶ (Voice VLAN)」など多目的に使われる。VLAN 間の通信には L3 ルーティング (ルータ or L3 スイッチ) が必須 — VLAN は L2 を分けるだけなので、跨ぐには IP 層で経路を決める必要がある。

6. 速度世代とメディア — 10M から 400G まで #

Ethernet が同じフレーム形式で速度を 1万倍に伸ばせたのは、物理層 (PHY) を速度ごとに別物に取り替えてきたから。L2 (フレーム) と L1 (信号方式) が綺麗に分離されている設計の勝利。

速度 標準 規格年 メディア ケーブル
10 Mbps 10BASE-T 1990 UTP Cat3+
100 Mbps 100BASE-TX 1995 UTP Cat5+
1 Gbps 1000BASE-T 1999 UTP Cat5e+
2.5 / 5 Gbps 2.5G/5GBASE-T 2016 UTP Cat5e/6 (短距離なら既設で OK)
10 Gbps 10GBASE-T / -SR 2006 UTP / 光 (MMF) Cat6a+ / OM3+
25 / 40 / 100 Gbps 25G/40G/100GBASE 2010s 光 (MMF/SMF) / DAC OM4 / OS2
400 Gbps 400GBASE 2017 光 (SMF) OS2

ツイストペア (UTP) はカテゴリ (Cat) で速度上限が決まる:

  • Cat5e = 1 Gbps (現代 LAN の最低基準)
  • Cat6 = 1 Gbps 全長 / 10 Gbps 短距離 (55m)
  • Cat6a = 10 Gbps 全長 (100m)
  • Cat8 = 25/40 Gbps (DC 内短距離)

光ファイバは 2 種類 — MMF (マルチモード) が短距離 (〜数百 m, 安価, データセンター内), SMF (シングルモード) が長距離 (〜数 km〜数十 km, キャリア / 拠点間)。

PoE (Power over Ethernet, 802.3af/at/bt) はデータと一緒に最大 90W (802.3bt) の電源を Cat ケーブルで供給する規格。IP 電話 / Wi-Fi AP / 監視カメラ / ドアコントローラを AC 電源なしで設置できる現代エンタープライズの必須機能。

7. Auto-negotiation と MTU — 古典的な落とし穴 #

Auto-negotiation はリンク両端が「この速度・全二重で行こう」を自動で握る機構。両端が auto なら問題なく揃うが、片方が固定 / もう片方が auto だと 片側が「auto で半二重 fallback」、もう片方が「固定で全二重」 になり、フレーム送信のたびに衝突誤検出 → 性能急落 という古典的な duplex mismatch が起きる。

# 現在の速度・全二重・auto-negotiation 状態
ethtool eth0

# 両端を 1G/全二重に固定 (auto を切る) — 通常は不要、「auto/auto」のままで OK
sudo ethtool -s eth0 speed 1000 duplex full autoneg off

MTU (Maximum Transmission Unit)1 フレームの payload 最大バイト数。Ethernet のデフォルトは 1500 byte。データセンター内では 9000 byte (jumbo frame) を使うことが多く、iSCSI / NFS / NVMe-oF のスループットに大きく効く。

ただし PMTU (Path MTU Discovery) が壊れている経路 (ICMP "Fragmentation Needed" を捨てるファイアウォール) では、**パケットがブラックホールされて「ping は通るが大きい転送だけ詰まる」**という嫌な症状が出る。MTU を 1500 → 1492 (PPPoE 環境) や 1450 程度 (VPN/トンネル環境) に下げる回避策が定番。

8. L2 攻撃面と防御 — 基本セットを必ず入れる #

スイッチの「MAC を学習して転送する」という素朴な仕組みは、L2 で動く攻撃にそのまま脆弱。最低限知っておくべき攻撃と、現代スイッチが提供する防御:

攻撃 仕組み 防御
MAC flooding (CAM overflow) スイッチに偽 src MAC のフレームを大量に送り FDB を溢れさせる → 学習できなくなり全フレームが flood = シェアドハブ状態に退化 → 全通信を盗聴可能 port security (1 ポートで学習する MAC 数を制限, 超えたら shut/drop)
ARP spoofing (ARP poisoning) ゲートウェイの IP は俺の MAC」と偽 ARP reply を流し、被害者の通信を奪う MitM DAI (Dynamic ARP Inspection) — DHCP snooping のバインディングテーブルと照合, 偽 ARP を破棄
DHCP starvation / rogue DHCP DHCP プールを偽 MAC で食い尽くす / 偽の DHCP サーバを立てて誤ったゲートウェイ・DNS を配る DHCP snooping — 信頼ポート (uplink) からのみ DHCP offer を許可, 信頼外ポートは drop
VLAN hopping (Double Tagging) フレームに 802.1Q タグを 2 重に付けると、最初のスイッチがネイティブ VLAN として外側を剥いで転送、次のスイッチが内側 VID で別 VLAN に配達 ネイティブ VLAN を業務に使わない + 未使用 VLAN を trunk allowed に入れない
VLAN hopping (Switch Spoofing) アクセスポートに偽 DTP (Dynamic Trunking Protocol) を流し勝手に trunk に昇格させ全 VLAN を覗く switchport mode access を明示 + DTP を無効化 (switchport nonegotiate)
STP 攻撃 (BPDU 攻撃) 偽の BPDU を流して自分が root bridge だと宣言 → トポロジを書き換えて MitM BPDU guard — エンドホスト用ポートが BPDU を受信したら即 err-disable

最低限の防御セット: アクセスポートに port security + DHCP snooping + DAI + BPDU guard + switchport mode access 強制 を一括で入れるテンプレートを作っておくのが、エンタープライズスイッチ運用の事実上の標準。

! Cisco IOS — エンドホスト向けアクセスポートの推奨テンプレート
interface GigabitEthernet0/1
 switchport mode access
 switchport access vlan 10
 switchport nonegotiate                       ! DTP 無効
 switchport port-security                     ! port security 有効
 switchport port-security maximum 2           ! 最大 2 MAC まで (PC + IP 電話想定)
 switchport port-security violation restrict
 spanning-tree portfast                       ! BPDU を期待しない端末用ポート
 spanning-tree bpduguard enable               ! BPDU が来たら即 err-disable
 ip dhcp snooping limit rate 15               ! DHCP リクエストレート制限
ip dhcp snooping vlan 10
ip arp inspection vlan 10                     ! DAI 有効

MACsec (802.1AE) という L2 暗号化規格もあるが、ペアごとの鍵管理全スイッチの対応が必要で、エンタープライズでも導入は限定的。通常は L3 以上 (IPsec, TLS) で守るのが現実解。

9. Wi-Fi との関係 — 同じフレーム形式の上で連続する #

家でも職場でも 「Wi-Fi で繋いだ端末が、有線で繋いだプリンタを直接見える」 のは、Wi-Fi (802.11) と Ethernet (802.3) が同じ MAC + EtherType + Payload のフレーム形式を共有しているから。AP (アクセスポイント) は 「無線フレームを有線フレームに翻訳する L2 ブリッジ」 として動く — 入った 802.11 フレームを 802.3 フレームに変換し、有線側に流す (逆方向も同じ)。

これにより:

  • 同じサブネットの IP が Wi-Fi と有線で共存できる
  • ARP / DHCP / mDNS / NetBIOS といった L2 ブロードキャスト系プロトコルが両方に届く
  • スイッチから見ると AP は単なる「複数の MAC が住むポート」

Ethernet 抜きで Wi-Fi だけのネットワーク」が事実上ほぼ存在しない (AP が有線で uplink される) のは、Ethernet が L2 の共通語だから。Wi-Fi は 無線区間の物理層 + MAC 層を担当するが、その上は Ethernet と同じ 1 枚のフレーム形式に乗っている。


Ethernet は「有線 LAN の唯一の選択肢」として 50 年生き残ってきたが、それは フレーム形式という不変の中心 を保ったまま、速度 (1万倍)・メディア (同軸→ツイストペア→光)・トポロジ (シェアド→スイッチド) を全部入れ替えてきた結果である。1985 年の Ethernet と 2026 年の Ethernet は中身がほぼ別物だが、tcpdump で見える Dst/Src/EtherType/Payload/FCS の並びは同じ

実務で押さえる順序は 「フレーム形式と MAC を読めること」 → 「スイッチが何を学習して何を flood するかが分かること」 → 「VLAN で L2 を切り分けられること」 → 「port security / DHCP snooping / DAI / BPDU guard をテンプレで入れられること」。この 4 つを揃えれば、エンタープライズの L2 で起きる問題のほとんどに自分の判断軸で対処できる。