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 で標準化されてからほとんど変わっていないから。ip も arp も VLAN も、すべてこの 1 枚の入れ物の中身として成り立っている。
押さえどころ:
- 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)。一切の事前設定は要らない、これが「プラグアンドプレイで動く」の正体。
スイッチの動きを言語化:
- フレーム到着 → 送信元 MAC を見て、入ったポート と紐付けて FDB (Forwarding Database) に登録 (or タイマー更新)
- 宛先 MAC で FDB を引く
- ヒット (登録あり) → そのポートだけに転送 (= forwarding)
- ミス (未学習ユニキャスト) → 来たポート以外の全ポートにコピー (= flooding, "unknown unicast flood")
- ブロードキャスト (
ff:ff:ff:ff:ff:ff) → 常に全ポートに flood
- エージタイマー (デフォルト 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 で起きる問題のほとんどに自分の判断軸で対処できる。