🔌
概念 #TCP/IP #ネットワーク #Ethernet #ARP #データリンク層 📚 TCPIPネットワーク

物理層・データリンク層詳解

ビット信号からEthernetフレーム・MAC・ARP・スイッチまで。パケットが「隣のホップ」へ届く仕組みを徹底解説。

物理層とデータリンク層の役割分担

OSI 7層モデルの最下層2つは、TCP/IP 4層モデルでは「ネットワーク I/F 層」にまとめられる。

┌─────────────────────────────────────────────────────┐
│  データリンク層(Layer 2)                             │
│  責務:同一ネットワーク内の「隣のホップ」への確実な配送 │
│  識別子:MACアドレス                                   │
│  単位:フレーム                                        │
├─────────────────────────────────────────────────────┤
│  物理層(Layer 1)                                    │
│  責務:ビット列を物理信号に変換して媒体に流す           │
│  識別子:なし(信号そのもの)                          │
│  単位:ビット                                          │
└─────────────────────────────────────────────────────┘

重要な制約:データリンク層は「直接接続されたホップ間」だけを担当する。離れたホップへの転送はIPアドレス(Layer 3)の仕事。


物理層:ビットを信号に変換する

伝送媒体の種類

媒体信号種別最大距離(目安)特徴
UTPケーブル(Cat6)電気信号100m安価・施工が容易
光ファイバー光パルス数十km以上高速・長距離・電気ノイズ免疫
Wi-Fi(IEEE 802.11)電波〜100m(屋内)無線、干渉・障害物の影響あり
同軸ケーブル電気信号500m(10BASE5)旧世代のEthernet(現在はほぼ使わない)

信号エンコーディング

ビット(0/1)を物理信号へ変換する方式。Ethernetでは 4B5B(100BASE-TX)PAM4(高速Ethernet) が使われる。

【Manchester Encoding の概念図(古典的な方式)】
ビット:  1      0      1      1      0
      ┌─┐    ┌─┐  ┌─┐  ┌─┐
信号: │ └─┐  │ └─┐│ └─┐│ └─┐  ┌─
      │   └──┘   └┘   └┘   └──┘
      ↑1の中央で Low→High の立ち上がり
       0の中央で High→Low の立ち下がり

クロック同期(どこが1ビットの境界か)を信号自体に埋め込んでいるのが特徴。


Ethernetフレームの構造

データリンク層の「送受信単位」はフレーム。Ethernetフレームの構造:

Ethernetフレーム全体(最大1518バイト)
┌──────────┬──────────┬───────────┬────────┬──────────────────┬─────┐
│プリアンブル│ 宛先MAC  │ 送信元MAC │EtherType│     ペイロード    │ FCS │
│  7バイト  │  6バイト │  6バイト  │ 2バイト │  46〜1500バイト  │4バイト│
└──────────┴──────────┴───────────┴────────┴──────────────────┴─────┘
     ↑          ↑           ↑          ↑              ↑           ↑
  受信同期   次ホップMAC  自NICのMAC  上位プロトコル   IPパケット等  エラー検出
  フレーム   ブロードキャスト         IP=0x0800
  開始検出   はFF:FF:FF              ARP=0x0806
            :FF:FF:FF               IPv6=0x86DD

各フィールドの詳細:

フィールドサイズ内容
プリアンブル7バイト10101010... のビットパターン。受信側がビット同期をとるための前置き
SFD(Start Frame Delimiter)1バイト10101011。フレーム本体の開始を示す(上図ではプリアンブルに含む)
宛先MACアドレス6バイト次ホップの物理アドレス。FF:FF:FF:FF:FF:FF がブロードキャスト
送信元MACアドレス6バイト送信NICのMACアドレス
EtherType2バイトペイロードのプロトコル種別
ペイロード46〜1500バイトIPパケット等の上位層データ。最小46バイト未満ならパディング
FCS(Frame Check Sequence)4バイトCRC-32によるエラー検出。受信側が再計算して一致確認

なぜ最小64バイトの制約があるか

Ethernetは CSMA/CD(衝突検知)という衝突回避の仕組みを持つ。送信開始後に衝突を検知するには、伝播遅延時間内にフレームが送信中である必要がある。最大ケーブル長(100m)での伝播遅延から逆算した結果が「最小フレーム長 64バイト(ヘッダ含む)」の制約になっている。


MACアドレスの構造

MACアドレス例:00:1A:2B:3C:4D:5E
┌─────────────────┬─────────────────────┐
│    OUI(3バイト) │  NIC固有番号(3バイト)│
│    00:1A:2B      │      3C:4D:5E        │
└─────────────────┴─────────────────────┘
         ↑                    ↑
  ベンダー識別子           製造番号(ベンダーが管理)
  IEEEが割り当て

先頭バイトのビット構成:
  bit0(最下位)= I/G ビット: 0=ユニキャスト, 1=マルチキャスト
  bit1          = U/L ビット: 0=グローバル(IEEE割当), 1=ローカル(手動設定)

実用上の注意

  • ip linkifconfig で確認できるMACはNICのハードウェアアドレス
  • ip link set eth0 address XX:XX:... でOS上から変更可能(セキュリティやプライバシー目的で変更されることがある)
  • Dockerコンテナや仮想NICは U/L ビット=1 のローカルアドレスを持つことが多い

ハブ vs スイッチ:ブロードキャストの影響範囲

ハブ(リピーター)の動作

PC-A ─┐
PC-B ─┤── Hub ──→ 全ポートに転送(PC-A の送信がC,Dにも届く)
PC-C ─┘

ハブはビット信号を全ポートに増幅・転送するだけ。衝突が起きる。現在ほぼ使われない。

スイッチ(L2スイッチ)の動作

PC-A ─┐
PC-B ─┤── Switch ──→ 宛先MACのポートだけに転送
PC-C ─┘

スイッチはMACアドレステーブル(CAMテーブル)を持ち、どのポートにどのMACがいるかを学習する。

【スイッチのMAC学習プロセス】

① PC-A (MAC: AA) が PC-C (MAC: CC) へ送信
  → スイッチは「ポート1 に MAC=AA がいる」と学習
  → 宛先 CC は未学習 → フラッディング(全ポートに転送)

② PC-C が返信
  → スイッチは「ポート3 に MAC=CC がいる」と学習
  → 以降の A↔C 通信はポート1と3の間だけで転送

【MACアドレステーブル(CAMテーブル)の例】
┌───────────────────┬──────┬───────────────┐
│  MAC Address      │ Port │  Age (sec)    │
├───────────────────┼──────┼───────────────┤
│ 00:1A:2B:3C:4D:5E │  1   │  120          │
│ 00:AA:BB:CC:DD:EE │  3   │  45           │
│ 00:11:22:33:44:55 │  2   │  300          │
└───────────────────┴──────┴───────────────┘
エントリは一定時間(通常300秒)経過で削除(Aging)

ブロードキャストドメイン

スイッチで繋がったネットワーク全体が1つの「ブロードキャストドメイン」。ARPやDHCPのブロードキャストは全NICに届く。

VLAN はスイッチを論理的に分割して複数のブロードキャストドメインを作る技術。タグ(802.1Q)をフレームに付加してVLAN IDを識別する。


ARP詳解:IP→MAC変換の仕組み

IP層から「宛先IPのMACアドレスを教えてくれ」と依頼を受けて動作するプロトコル。

ARP Request / Reply のフロー

送信PC (IP:192.168.1.10, MAC:AA)          受信PC (IP:192.168.1.20, MAC:BB)
          │                                           │
          │ ARP Request(ブロードキャスト)            │
          │ 「192.168.1.20 の MAC アドレスは誰?」     │
          │ 宛先MAC: FF:FF:FF:FF:FF:FF               │
          │─────────────────────────────────────────→│(全ホストに届く)
          │                                           │
          │ ARP Reply(ユニキャスト)                  │
          │ 「私です。MAC は BB:BB:BB:BB:BB:BB」        │
          │←─────────────────────────────────────────│
          │                                           │
  ARPキャッシュに保存:                                 │
  192.168.1.20 → BB:BB:BB:BB:BB:BB (TTL 20分)        │

ARPキャッシュの確認

# ARPキャッシュの表示
ip neighbor show
# または
arp -n

# 出力例
192.168.1.1  dev eth0  lladdr 00:1a:2b:3c:4d:5e  REACHABLE
192.168.1.20 dev eth0  lladdr 00:aa:bb:cc:dd:ee  STALE

Gratuitous ARP(無償ARP)

自分のIPに対して自分でARPリクエストを送る特殊な使い方。

目的1:IPアドレスの重複検出
  → 自分のIPで ARP Request を送り、誰かが Reply したら重複

目的2:ARPキャッシュの強制更新
  → フェイルオーバーやIPアドレス変更後に周囲の古いキャッシュを更新
  → VRRP/HSRP などの冗長化プロトコルが使う

ARP Spoofing(セキュリティ上の注意)

ARPに認証機構がないため、悪意あるホストが偽のARP Replyを送ることができる。

正常:PC-A → GW (MACアドレス解決) → 正しいGWに送信
攻撃:攻撃者が「GWのIPは自分(攻撃者)のMAC」と偽ARP Replyを流す
     → PC-A のトラフィックが攻撃者を経由する(Man in the Middle)

対策:arpwatch(異常なARP変化を検知)、スイッチの Dynamic ARP Inspection(DAI)。


Wi-Fi(IEEE 802.11)とEthernetの違い

Wi-Fiも同じデータリンク層だが、無線媒体の特性から設計が異なる。

特性Ethernet(有線)Wi-Fi(無線)
衝突検知CSMA/CD(検知して再送)CSMA/CA(衝突を回避する)
媒体共有スイッチが分離全端末がチャネルを共有
フレームサイズ最大1500バイト最大2304バイト(実質はMTU 1500に合わせる)
アドレス数2個(src/dst MAC)4個(BSSID・APアドレスなど含む)
信頼性FCSのみARQ(自動再送)も内部で実施

CSMA/CA では、送信前に一定時間(DIFS)待機してからランダムバックオフをとる。ACKが返らなければ再送する。


実践:データリンク層のトラブルシューティング

# NICの状態確認(Link UP/DOWN, speed, duplex)
ip link show eth0
ethtool eth0

# フレームの送受信カウンタ(エラーがあればLayer1/2の問題)
ip -s link show eth0
# RX errors: 物理エラー(ケーブル, NIC問題)
# TX errors: 送信失敗
# dropped: バッファ溢れで廃棄

# スイッチのMACテーブルに乗っているか確認(Ciscoスイッチ)
# show mac address-table interface GigabitEthernet0/1

# ARP関連のデバッグ
tcpdump -i eth0 arp -n

エラーパターンと原因:

エラー原因対処
RX errors が増加ケーブル断線・ノイズ・NIC故障ケーブル交換、NIC確認
TX collisions が多いHalf-duplex設定の不一致(通常Autoで解決)ethtool -s eth0 duplex full
ARP Requestに返答なしファイアウォールがブロック・NIC無効arping -I eth0 192.168.1.x で疎通確認

出典: TCP/IP入門・図解入門