ARPプロトコルの仕組みと実装

ARPの基本概念

ARP(Address Resolution Protocol)はIPアドレスから対応する物理アドレス(MACアドレス)を解決するためのネットワークプロトコルです。IPv4環境で使用され、IPv6ではNDP(Neighbor Discovery Protocol)が代替機能を提供します。

ARPの必要性

データ通信において、送信元と宛先のIPアドレスに加え、フレームのカプセル化にはMACアドレスが必要です。ARPはIPアドレスから対応するMACアドレスを動的に解決する役割を担います。

ARPの動作原理

各ホストはARPキャッシュテーブルを保持し、IPとMACアドレスのマッピングを管理します。通信フローは以下の通りです:

  1. 送信側ホストが自身のARPテーブルで宛先IPを検索
  2. エントリが存在しない場合、ブロードキャストでARP要求を送出
  3. 該当ホストがユニキャストでARP応答を返信
  4. 両ホストが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 で適用

タグ: ARP IPv4 Linuxカーネル ネットワークプロトコル ネットワーク設定

7月14日 16:39 投稿