ARPの基本概念
ARP(Address Resolution Protocol)はIPアドレスから対応する物理アドレス(MACアドレス)を解決するためのネットワークプロトコルです。IPv4環境で使用され、IPv6ではNDP(Neighbor Discovery Protocol)が代替機能を提供します。
ARPの必要性
データ通信において、送信元と宛先のIPアドレスに加え、フレームのカプセル化にはMACアドレスが必要です。ARPはIPアドレスから対応するMACアドレスを動的に解決する役割を担います。
ARPの動作原理
各ホストはARPキャッシュテーブルを保持し、IPとMACアドレスのマッピングを管理します。通信フローは以下の通りです:
- 送信側ホストが自身のARPテーブルで宛先IPを検索
- エントリが存在しない場合、ブロードキャストでARP要求を送出
- 該当ホストがユニキャストでARP応答を返信
- 両ホストがARPテーブルを更新
キャッシュエントリは通常20分で期限切れとなり、不完全なエントリは3分で削除されます。
ARPパケット構造
イーサネットフレーム内のARPパケットは0x0806フレームタイプで識別されます。主要フィールド:
- ハードウェアタイプ(イーサネット=1)
- プロトコルタイプ(IPv4=0x0800)
- 操作コード(要求=1,応答=2)
- 送信元/宛先のMAC・IPアドレス
操作コマンド
arpコマンド
# arp -l # 全エントリ表示
# arp -s 192.168.1.5 00:1a:2b:3c:4d:5e # 静的エントリ追加
# arp -d 192.168.1.5 # エントリ削除
ip neighコマンド
# ip n s # ARPテーブル表示
# ip n a 10.0.0.15 lladdr 01:23:45:67:89:ab dev eth0
# ip n d 10.0.0.15 dev eth0
arpingユーティリティ
# arping -I eth0 192.168.1.10 # 特定インタフェースからARP要求送信
カーネルパラメータ
ARPの動作を制御する主要パラメータ:
arp_ignore
# sysctl -w net.ipv4.conf.all.arp_ignore=1
# sysctl -w net.ipv4.conf.eth1.arp_ignore=1
設定値の効果:
- 0: 全インタフェースで応答
- 1: リクエスト受信インタフェースのIPのみ応答
- 2: 同一サブネット内のリクエストのみ応答
arp_filter
# sysctl -w net.ipv4.conf.all.arp_filter=1
ルーティングテーブルに基づく応答インタフェース選択を有効化
arp_announce
# sysctl -w net.ipv4.conf.all.arp_announce=2
ARP要求の送信元IP選択ポリシーを制御
永続的設定
# /etc/sysctl.conf に追記
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.eth1.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
# sysctl -p で適用