ARP
ARP (англ. Address Resolution Protocol, протокол разрешения адресов) — это протокол канального уровня сетевой модели OSI, предназначенный для преобразования сетевых адресов (IP-адресов) в физические (MAC-адреса) в локальных вычислительных сетях. ARP является фундаментальным механизмом, обеспечивающим взаимодействие между узлами в сетях Ethernet, Wi-Fi и других средах, использующих IP-адресацию. Без ARP невозможна доставка IP-пакетов на конкретные устройства в пределах одного сегмента сети.
История возникновения
Протокол ARP был разработан в 1982 году в рамках проекта DARPA (Агентство перспективных исследовательских проектов Министерства обороны США) и впервые описан в документе RFC 826 (автор — Дэвид Пламмер). Изначально протокол предназначался для сетей Ethernet, но впоследствии был адаптирован для других технологий, таких как Wi-Fi, Token Ring, FDDI и ATM. В 1984 году вышла спецификация RFC 903, описывающая протокол RARP (Reverse ARP), который решал обратную задачу — определение IP-адреса по известному MAC-адресу. Однако RARP был вытеснен более функциональными протоколами, такими как BOOTP и DHCP.
Принцип работы
ARP использует широковещательные запросы для определения соответствия IP-адреса MAC-адресу. Работа протокола состоит из двух основных этапов: отправка запроса и получение ответа.
Формат ARP-пакета
ARP-пакет передаётся непосредственно в кадре канального уровня (например, Ethernet-кадре). Его структура включает следующие поля:
- Тип аппаратного адреса (HTYPE) — указывает тип сетевой технологии (например, 1 для Ethernet).
- Тип протокольного адреса (PTYPE) — указывает тип сетевого протокола (например, 0x0800 для IPv4).
- Длина аппаратного адреса (HLEN) — размер MAC-адреса в байтах (обычно 6 для Ethernet).
- Длина протокольного адреса (PLEN) — размер IP-адреса в байтах (4 для IPv4).
- Код операции (OPER) — определяет тип сообщения: 1 — запрос, 2 — ответ.
- MAC-адрес отправителя (SHA) — физический адрес узла, отправляющего пакет.
- IP-адрес отправителя (SPA) — IP-адрес узла, отправляющего пакет.
- MAC-адрес получателя (THA) — физический адрес целевого узла (в запросе заполняется нулями).
- IP-адрес получателя (TPA) — IP-адрес целевого узла.
Процесс разрешения адреса
- Отправка запроса. Когда узел A хочет передать IP-пакет узлу B, он сначала проверяет свою ARP-таблицу (кэш) на наличие записи, соответствующей IP-адресу узла B. Если записи нет, узел A формирует широковещательный ARP-запрос (MAC-адрес получателя — FF:FF:FF:FF:FF:FF), в котором указывает свой IP- и MAC-адрес, а также IP-адрес узла B. Этот запрос получают все устройства в локальной сети.
- Обработка запроса. Каждый узел в сети сравнивает указанный в запросе IP-адрес получателя со своим собственным. Если адрес не совпадает, пакет игнорируется. Если совпадает, узел B формирует ARP-ответ, в котором указывает свой MAC-адрес.
- Ответ. ARP-ответ отправляется непосредственно узлу A (не широковещательно), используя его MAC-адрес, полученный из запроса. Узел A получает ответ, извлекает из него MAC-адрес узла B и сохраняет эту пару (IP — MAC) в своей ARP-таблице.
- Передача данных. После получения MAC-адреса узел A формирует Ethernet-кадр, в котором указывает MAC-адрес получателя (узла B) и помещает внутрь IP-пакет. Кадр отправляется по сети и доставляется только узлу B.
ARP-кэш
ARP-таблица (кэш) хранит записи о соответствии IP- и MAC-адресов. Каждая запись имеет время жизни (TTL, Time to Live), по истечении которого она удаляется. Типичное значение TTL для записей, полученных динамически, составляет от 2 до 10 минут (в зависимости от реализации ОС). Статические записи могут быть добавлены вручную и не имеют ограничения по времени. Периодическое обновление кэша необходимо для поддержания актуальности данных, так как MAC-адреса могут изменяться (например, при замене сетевого адаптера).
Виды ARP
Proxy ARP
Proxy ARP (прокси-ARP) — это механизм, при котором маршрутизатор или другое сетевое устройство отвечает на ARP-запросы от имени другого узла. Это позволяет узлам, находящимся в разных сегментах сети, взаимодействовать так, как если бы они были в одной локальной сети. Proxy ARP часто используется в сетях с масками подсети, отличными от стандартных, или при объединении нескольких сетей через маршрутизаторы без явной настройки маршрутизации на клиентах.
Gratuitous ARP
Gratuitous ARP (бесполезный или добровольный ARP) — это ARP-ответ, отправляемый устройством без предшествующего запроса. Обычно используется для:
- Обнаружения конфликтов IP-адресов. Узел отправляет ARP-запрос на свой собственный IP-адрес. Если получен ответ, значит, адрес уже занят другим устройством.
- Обновления ARP-таблиц других узлов. При изменении MAC-адреса (например, после замены сетевой карты) устройство отправляет Gratuitous ARP, чтобы другие узлы обновили свои кэши.
- Уведомления о смене IP-адреса. Используется в некоторых протоколах высокой доступности (например, VRRP, HSRP) для переключения трафика на резервный узел.
Inverse ARP (InARP)
Inverse ARP (обратный ARP) — протокол, решающий обратную задачу: определение IP-адреса по известному MAC-адресу. Используется в сетях Frame Relay и ATM, где физические адреса известны заранее, а IP-адреса необходимо сопоставить.
Уязвимости и атаки
Протокол ARP не имеет встроенных механизмов аутентификации и шифрования, что делает его уязвимым для ряда атак в локальных сетях.
ARP-spoofing (ARP-отравление)
ARP-spoofing (или ARP cache poisoning) — это атака, при которой злоумышленник отправляет поддельные ARP-ответы в сеть, чтобы связать свой MAC-адрес с IP-адресом другого узла (например, шлюза по умолчанию). В результате трафик, предназначенный для этого узла, перенаправляется злоумышленнику. Это позволяет перехватывать, модифицировать или блокировать данные. Для защиты от ARP-spoofing используются:
- Статические ARP-записи — вручную заданные соответствия IP и MAC, которые не изменяются динамически.
- ARP-инспекция (Dynamic ARP Inspection, DAI) — функция на управляемых коммутаторах, которая проверяет ARP-пакеты на соответствие доверенным записям.
- Программные средства защиты (например, Arpwatch, XArp) — отслеживают изменения ARP-таблиц и сигнализируют о подозрительной активности.
DoS-атаки с использованием ARP
Злоумышленник может отправлять большое количество широковещательных ARP-запросов или поддельных ответов, что приводит к перегрузке сети и исчерпанию ресурсов устройств. Это может вызвать отказ в обслуживании (DoS) для легитимных узлов.
Применение в современных сетях
Протокол ARP остаётся неотъемлемой частью IPv4-сетей Ethernet и Wi-Fi. Он используется в операционных системах Windows, Linux, macOS, а также во встроенных системах и сетевом оборудовании. В IPv6 функции ARP выполняет протокол NDP (Neighbor Discovery Protocol), который, в отличие от ARP, использует многоадресные (multicast) запросы и включает встроенные механизмы защиты (например, Secure Neighbor Discovery, SEND). Тем не менее ARP остаётся стандартом для IPv4 и будет применяться до полного перехода на IPv6.
Интересные факты
- В 2014 году исследователи из Университета Цюриха продемонстрировали атаку на ARP-кэш, которая позволяла перехватывать трафик даже при использовании статических записей, путём манипуляции с временем жизни записей.
- В некоторых реализациях ARP-таблицы могут содержать до нескольких тысяч записей, но типичный размер кэша в домашних маршрутизаторах ограничен 50–100 записями.
- Протокол ARP не поддерживает работу через маршрутизаторы — запросы не передаются между разными IP-подсетями. Для взаимодействия с узлами из других подсетей используется шлюз по умолчанию, который сам отвечает на ARP-запросы.
Источники
- RFC 826 — An Ethernet Address Resolution Protocol (1982)
- RFC 903 — A Reverse Address Resolution Protocol (1984)
- RFC 1027 — Using ARP to Implement Transparent Subnet Gateways (Proxy ARP)
- RFC 5227 — IPv4 Address Conflict Detection (Gratuitous ARP)
- Стивенс, У. Р. «TCP/IP. Иллюстрированное руководство». Том 1. — М.: Вильямс, 2003.
- Таненбаум, Э., Уэзеролл, Д. «Компьютерные сети». 5-е изд. — СПб.: Питер, 2012.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →