ARP (Address Resolution Protocol) — это протокол, предназначенный для определения физического (MAC) адреса по известному IP-адресу в локальной сети.

ARP работает на границе сетевого (IP) и канального (Ethernet) уровней, связывая их между собой.

  • В модели OSI: между уровнями 2 и 3 (канальный ↔ сетевой).
  • В модели TCP-IP: относится к сетевому уровню (Network Layer), но выполняет функции для передачи на уровне канала.

Мотивация

Передача данных в Ethernet возможна только по MAC-адресам.
IP знает адрес назначения (например, 192.168.1.10), но для доставки кадра Ethernet нужен MAC (00:1A:2B:3C:4D:5E).
ARP решает эту задачу — находит соответствие между IP и MAC в пределах одной подсети.


Принцип работы

  1. Хост-отправитель проверяет свою ARP-таблицу — есть ли в ней запись IP → MAC.
  2. Если нет записи, он формирует ARP-запрос (broadcast):
Кто имеет IP 192.168.1.10? Сообщите 192.168.1.5.
  1. Хост-получатель с этим IP отвечает ARP-ответом (unicast):
192.168.1.10 имеет MAC 00:1A:2B:3C:4D:5E
  1. Отправитель сохраняет запись в ARP-кэш, чтобы не запрашивать снова.

Формат ARP-пакета (RFC 826)

ПолеРазмер (бит)Описание
Hardware Type16Тип канального уровня (Ethernet = 1)
Protocol Type16Тип сетевого протокола (IPv4 = 0x0800)
Hardware Size8Длина MAC-адреса (6 байт)
Protocol Size8Длина IP-адреса (4 байта)
Opcode161 = запрос, 2 = ответ
Sender MAC Address48MAC отправителя
Sender IP Address32IP отправителя
Target MAC Address48MAC получателя (в запросе = 0)
Target IP Address32IP получателя

ARP инкапсулируется внутри кадра Ethernet, где поле EtherType = 0x0806.


Типы ARP-сообщений

ТипНазначение
ARP Request (1)Запрос MAC по IP
ARP Reply (2)Ответ с MAC
RARP (Reverse ARP)Определение IP по MAC (устарел)
Gratuitous ARPХост сам объявляет свой IP→MAC (например, при изменении IP)
Proxy ARPОдин хост/маршрутизатор отвечает от имени другого (для объединения сетей)

ARP-кэш (таблица ARP)

Хранит локальные соответствия IP↔MAC. Пример (Linux):

$ ip neigh show
192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE

Состояния ARP-записи:

  • REACHABLE — активно используется
  • STALE — давно не использовалась
  • INCOMPLETE — идёт ARP-запрос
  • FAILED — не удалось разрешить адрес

Взаимодействие с другими протоколами

  • IP - Использует ARP для нахождения MAC перед отправкой пакета
  • Ethernet - Используется для физической передачи ARP-запросов/ответов
  • ICMP - Ошибки ICMP могут возникать, если ARP не удаётся выполнить
  • DHCP - Перед выдачей IP проверяет конфликт (Gratuitous ARP)

Безопасность и проблемы

ARP не имеет встроенной аутентификации → возможны атаки:

  • ARP Spoofing / Poisoning: злоумышленник подменяет MAC-адрес шлюза, перенаправляя трафик через себя (MITM).
  • Защита:
    • статические ARP-записи (ip neigh add ... nud permanent)
    • Dynamic ARP Inspection (DAI) на коммутаторах
    • фильтрация на уровне L2

Отличие от IPv6 NDP

В IPv6 ARP не используется. Его роль выполняет Neighbor Discovery Protocol (NDP), работающий через ICMPv6.
NDP объединяет функции ARP, ICMP Router Discovery и автоматической конфигурации адресов.


Основные утилиты

  • ip neigh — просмотр ARP-таблицы
  • arp -n — старый аналог
  • arping — отправка ARP-запросов вручную
  • tcpdump -e -n arp — анализ ARP-пакетов
  • ip neigh flush all — очистка ARP-кэша

Типовая последовательность при отправке IP-пакета

  1. Приложение → IP формирует пакет.
  2. IP определяет, находится ли адрес назначения в той же подсети.
  3. Если да → вызывает ARP для получения MAC получателя.
  4. Если нет → вызывает ARP для MAC шлюза по умолчанию.
  5. Ethernet кадр передаётся по MAC-адресу, указав внутри IP-пакет.