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 в пределах одной подсети.
Принцип работы
- Хост-отправитель проверяет свою ARP-таблицу — есть ли в ней запись IP → MAC.
- Если нет записи, он формирует ARP-запрос (broadcast):
Кто имеет IP 192.168.1.10? Сообщите 192.168.1.5.
- Хост-получатель с этим IP отвечает ARP-ответом (unicast):
192.168.1.10 имеет MAC 00:1A:2B:3C:4D:5E
- Отправитель сохраняет запись в ARP-кэш, чтобы не запрашивать снова.
Формат ARP-пакета (RFC 826)
| Поле | Размер (бит) | Описание |
|---|---|---|
| Hardware Type | 16 | Тип канального уровня (Ethernet = 1) |
| Protocol Type | 16 | Тип сетевого протокола (IPv4 = 0x0800) |
| Hardware Size | 8 | Длина MAC-адреса (6 байт) |
| Protocol Size | 8 | Длина IP-адреса (4 байта) |
| Opcode | 16 | 1 = запрос, 2 = ответ |
| Sender MAC Address | 48 | MAC отправителя |
| Sender IP Address | 32 | IP отправителя |
| Target MAC Address | 48 | MAC получателя (в запросе = 0) |
| Target IP Address | 32 | IP получателя |
![]() |
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
- статические ARP-записи (
Отличие от 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-пакета
- Приложение → IP формирует пакет.
- IP определяет, находится ли адрес назначения в той же подсети.
- Если да → вызывает ARP для получения MAC получателя.
- Если нет → вызывает ARP для MAC шлюза по умолчанию.
- Ethernet кадр передаётся по MAC-адресу, указав внутри IP-пакет.
