この記事の要点
• MAC アドレスはネットワークカード固有の 48 ビット物理アドレス
• ARP(Address Resolution Protocol)は IP アドレスから MAC アドレスを解決するプロトコル
• LAN 内通信では最終的に MAC アドレスが宛先になる
MAC アドレスとは
MAC アドレス(Media Access Control Address)は、ネットワークインターフェースカード(NIC)に割り当てられた固有の物理アドレスです。**48 ビット(6 バイト)**の長さで、通常は 16 進数で表記されます。
IP アドレスとの違い: IP アドレスは論理的なアドレスで変更可能ですが、MAC アドレスはハードウェアに紐づく物理的なアドレスで、基本的に変更できません(ソフトウェアで偽装は可能)。
MAC アドレスの表記例
# コロン区切り(Linux, macOS)
00:1A:2B:3C:4D:5E
# ハイフン区切り(Windows)
00-1A-2B-3C-4D-5E
# ドット区切り(Cisco)
001A.2B3C.4D5E
MAC アドレスの構造
MAC アドレスは 48 ビット(6 バイト)で、前半 24 ビットと後半 24 ビットに分かれます。
| 部分 | ビット数 | 名称 | 内容 |
|---|---|---|---|
| 前半 24 ビット | 24 bit | OUI(Organizationally Unique Identifier) | ベンダー(製造元)ID |
| 後半 24 ビット | 24 bit | NIC Specific | ベンダーが割り当てる個別 ID |
00:1A:2B:3C:4D:5E
└─┬──┘ └─┬──┘
OUI 個別ID
(ベンダー) (製造元が管理)
OUI(ベンダー ID)の例
| OUI | ベンダー |
|---|---|
| 00:1A:11 | |
| 00:50:56 | VMware |
| 00:0C:29 | VMware |
| B8:27:EB | Raspberry Pi Foundation |
| DC:A6:32 | Raspberry Pi Trading |
| 00:1B:63 | Apple |
| 00:D0:2D | Cisco |
# macOS/Linux で自分の MAC アドレスを確認
ip link show
# または
ifconfig
# Windows で確認
ipconfig /all
ポイント: MAC アドレスの前半 3 バイトを見れば、どのメーカーの機器かがわかります。セキュリティ診断やネットワーク調査で有用です。
特殊な MAC アドレス
| MAC アドレス | 意味 |
|---|---|
| FF:FF:FF:FF:FF:FF | ブロードキャストアドレス(LAN 内全員に送信) |
| 01:00:5E:xx:xx:xx | IPv4 マルチキャスト |
| 33:33:xx:xx:xx:xx | IPv6 マルチキャスト |
| 02:xx:xx:xx:xx:xx | ローカル管理アドレス(仮想 NIC など) |
なぜ IP と MAC の両方が必要か
ネットワーク通信には IP アドレスと MAC アドレスの両方が必要です。それぞれ役割が異なります。
| アドレス | 層 | 役割 | 変更可能性 |
|---|---|---|---|
| IP アドレス | L3(ネットワーク層) | グローバルな宛先指定、ルーティング | ◎(DHCP で頻繁に変わる) |
| MAC アドレス | L2(データリンク層) | LAN 内での直接配送 | ✕(ハードウェアに固定) |
# 通信の流れ
アプリケーション: "example.com にアクセスしたい"
↓
DNS: "example.com = 93.184.216.34"
↓
IP 層: "93.184.216.34 に送る。まずゲートウェイに転送"
↓
ARP: "ゲートウェイ 192.168.1.1 の MAC アドレスは?"
↓
MAC 層: "aa:bb:cc:dd:ee:ff に物理的に送信"
ポイント: IP アドレスは「どこに届けるか」、MAC アドレスは「次の中継点はどこか」を示します。郵便に例えると、IP は最終目的地の住所、MAC は配達ルート上の次の郵便局です。
ARP(Address Resolution Protocol)とは
ARPは、IP アドレスから MAC アドレスを解決するためのプロトコルです。LAN 内で通信する際、最終的には MAC アドレスが必要なため、ARP で IP→MAC の変換を行います。
ARP の基本動作
1. ホスト A: "192.168.1.10 の MAC アドレスを教えて!"(ARP Request)
→ ブロードキャスト(LAN 内全員に送信)
2. ホスト B(192.168.1.10): "私の MAC は aa:bb:cc:dd:ee:ff です"(ARP Reply)
→ ユニキャスト(A だけに返信)
3. ホスト A: ARP テーブルに記録
192.168.1.10 → aa:bb:cc:dd:ee:ff
ARP メッセージの種類
| メッセージ種類 | 送信方法 | 目的 |
|---|---|---|
| ARP Request | ブロードキャスト(FF:FF:FF:FF:FF:FF) | 特定 IP の MAC アドレスを問い合わせ |
| ARP Reply | ユニキャスト(特定の MAC) | 自分の MAC アドレスを通知 |
| Gratuitous ARP | ブロードキャスト | 自発的に自分の IP/MAC を通知(IP 重複検出、キャッシュ更新) |
| ARP Probe | ブロードキャスト | IP アドレスが既に使われているか確認 |
ARP パケットの構造
ARP Request:
- Hardware Type: Ethernet (1)
- Protocol Type: IPv4 (0x0800)
- Sender MAC: 11:22:33:44:55:66
- Sender IP: 192.168.1.5
- Target MAC: 00:00:00:00:00:00(不明なので空)
- Target IP: 192.168.1.10
ARP Reply:
- Hardware Type: Ethernet (1)
- Protocol Type: IPv4 (0x0800)
- Sender MAC: aa:bb:cc:dd:ee:ff
- Sender IP: 192.168.1.10
- Target MAC: 11:22:33:44:55:66
- Target IP: 192.168.1.5
ARP テーブル
ARP で解決した IP→MAC の対応はARP テーブル(ARP キャッシュ) に保存され、一定時間再利用されます。
# macOS/Linux で ARP テーブルを表示
arp -a
# Windows で表示
arp -a
# 出力例
? (192.168.1.1) at aa:bb:cc:dd:ee:ff on en0 ifscope [ethernet]
? (192.168.1.10) at 11:22:33:44:55:66 on en0 ifscope [ethernet]
ARP テーブルのエントリ寿命
| OS | デフォルト TTL |
|---|---|
| Linux | 60 秒(到達可能)、300 秒(到達不可) |
| Windows | 120 秒(動的エントリ) |
| macOS | 1200 秒(20 分) |
# Linux で ARP キャッシュをクリア
sudo ip -s -s neigh flush all
# Windows で ARP キャッシュをクリア
arp -d
# macOS で ARP キャッシュをクリア
sudo arp -d -a
実践メモ: ネットワークトラブル時、古い ARP キャッシュが原因でつながらないことがあります。arp -d でキャッシュをクリアすると解決する場合があります。
ARP の動作例
同じ LAN 内の 192.168.1.5 から 192.168.1.10 に通信する場合:
ステップ 1: ARP テーブルを確認
# ホスト A(192.168.1.5)が ARP テーブルを確認
arp -a
# 192.168.1.10 のエントリがない → ARP Request が必要
ステップ 2: ARP Request をブロードキャスト
送信元 MAC: 11:22:33:44:55:66
送信先 MAC: FF:FF:FF:FF:FF:FF(ブロードキャスト)
ARP Request:
"Who has 192.168.1.10? Tell 192.168.1.5"
ステップ 3: ARP Reply を受信
送信元 MAC: aa:bb:cc:dd:ee:ff
送信先 MAC: 11:22:33:44:55:66(ユニキャスト)
ARP Reply:
"192.168.1.10 is at aa:bb:cc:dd:ee:ff"
ステップ 4: ARP テーブルに記録
arp -a
# ? (192.168.1.10) at aa:bb:cc:dd:ee:ff on en0 ifscope [ethernet]
ステップ 5: データ送信
送信元 IP: 192.168.1.5
送信先 IP: 192.168.1.10
送信元 MAC: 11:22:33:44:55:66
送信先 MAC: aa:bb:cc:dd:ee:ff ← ARP で解決した MAC アドレス
ポイント: ARP は LAN 内のみで動作します。ルーター越えの通信では、ARP は次のホップ(ゲートウェイ)の MAC アドレスを解決します。
ゲートウェイ経由の通信
LAN 外(インターネット)への通信では、宛先 IP はインターネット上のサーバーですが、MAC アドレスはデフォルトゲートウェイ(ルーター)の MAC になります。
# 192.168.1.5 から 8.8.8.8(Google DNS)に通信
送信元 IP: 192.168.1.5
送信先 IP: 8.8.8.8
送信元 MAC: 11:22:33:44:55:66
送信先 MAC: aa:bb:cc:dd:ee:ff ← ゲートウェイ(192.168.1.1)の MAC
ルーターが受け取った後、次のホップに転送する際に MAC アドレスを書き換える
| ホップ | 送信元 IP | 送信先 IP | 送信元 MAC | 送信先 MAC |
|---|---|---|---|---|
| ホスト → ルーター | 192.168.1.5 | 8.8.8.8 | 11:22:33:44:55:66 | aa:bb:cc:dd:ee:ff(ルーター) |
| ルーター → ISP | 192.168.1.5 | 8.8.8.8 | (ルーターの WAN 側 MAC) | (ISP ルーターの MAC) |
ポイント: IP アドレスは始点から終点まで変わりませんが、MAC アドレスはホップごとに書き換えられます。これが L3(IP)と L2(MAC)の役割の違いです。
ARP スプーフィング(ARP Poisoning)
ARP には認証がないため、悪意のある者が偽の ARP Reply を送信して、通信を盗聴・改ざんできる脆弱性があります。
攻撃の流れ
1. 攻撃者が偽の ARP Reply をブロードキャスト
"192.168.1.1(ゲートウェイ)の MAC は xx:xx:xx:xx:xx:xx(攻撃者の MAC)です"
2. 被害者のホストが ARP テーブルを更新
192.168.1.1 → xx:xx:xx:xx:xx:xx(攻撃者)
3. 被害者がゲートウェイに送るパケットが攻撃者に届く
4. 攻撃者がパケットを盗聴・改ざん後、本物のゲートウェイに転送(中間者攻撃)
対策
| 対策 | 内容 |
|---|---|
| 静的 ARP エントリ | 重要なホストの ARP を固定登録(手動管理が必要) |
| Dynamic ARP Inspection(DAI) | スイッチが ARP パケットを検証(DHCP Snooping と併用) |
| ネットワーク監視 | ARP テーブルの異常な変更を検知 |
| 暗号化通信 | HTTPS など暗号化で盗聴されても内容を守る |
# 静的 ARP エントリの設定(Linux)
sudo arp -s 192.168.1.1 aa:bb:cc:dd:ee:ff
# 静的 ARP エントリの設定(Windows)
arp -s 192.168.1.1 aa-bb-cc-dd-ee-ff
注意: ARP スプーフィングは同一 LAN 内でのみ可能ですが、カフェや公衆 Wi-Fi では攻撃者が同じネットワークにいる可能性があります。重要な通信は必ず HTTPS/VPN を使いましょう。
Gratuitous ARP(GARP)
Gratuitous ARPは、誰も聞いていないのに自発的に送る ARP です。
用途
| 用途 | 説明 |
|---|---|
| IP アドレス重複検出 | 起動時に GARP を送り、既に使われている IP がないか確認 |
| ARP キャッシュ更新 | MAC アドレスが変わったとき(HA フェイルオーバーなど)、他のホストに通知 |
| ネットワーク機器の学習 | スイッチに自分の MAC アドレスを学習させる |
GARP の例:
Sender IP: 192.168.1.10
Target IP: 192.168.1.10(自分自身)
→ "192.168.1.10 は aa:bb:cc:dd:ee:ff です"と全員に通知
実践メモ: 仮想 IP(VIP)を使う HA 構成では、フェイルオーバー時に新しいサーバーが GARP を送り、VIP が自分に切り替わったことを全員に通知します。
まとめ
MAC アドレスと ARP は、LAN 内通信の基盤です。
| 項目 | 内容 |
|---|---|
| MAC アドレス | 48 ビットの物理アドレス、前半 24 ビットがベンダー ID |
| ARP | IP アドレスから MAC アドレスを解決するプロトコル |
| ARP テーブル | IP→MAC の対応を一定時間キャッシュ |
| ARP スプーフィング | 偽の ARP Reply で通信を盗聴する攻撃(対策: DAI、HTTPS) |
IP アドレスが「どこに届けるか」を示すのに対し、MAC アドレスは「次のホップはどこか」を示します。ARP によってこの2つが結びつき、LAN 内通信が成立します。
参考リソース
- RFC 826 - An Ethernet Address Resolution Protocol
- IEEE OUI Lookup
- Wikipedia - MAC Address
- Cloudflare - What is ARP?
- RFC 5227 - IPv4 Address Conflict Detection