物理層・データリンク層詳解
ビット信号から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アドレス |
| EtherType | 2バイト | ペイロードのプロトコル種別 |
| ペイロード | 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 linkやifconfigで確認できる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 で疎通確認 |
- 1. 📡TCP/IPパケット通信の全過程
- 2. 🔌物理層・データリンク層詳解
- 3. 🌐ネットワーク層(IP)詳解
出典: TCP/IP入門・図解入門