ARP

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

Описание протокола было опубликовано в ноябре 1982 года в RFC 826. ARP был спроектирован для передачи IP-пакетов через пакеты (кадры) Ethernet. Принцип выяснения аппаратного адреса целевого хоста, использованный в ARP, был затем использован в сетях других типов.

Наибольшее распространение ARP получил благодаря повсеместности сетей IP, построенных поверх Ethernet, поскольку в них практически всегда используется ARP. В семействе протоколов IPv6 ARP не существует, его функции возложены на ICMPv6.

Описание 
Рассмотрим суть функционирования ARP на простом примере. Компьютер А (IP-адрес 10.0.0.1) и компьютер Б (IP-адрес 10.22.22.2) соединены сетью Ethernet. Компьютер А желает переслать пакет данных на компьютер Б, IP-адрес компьютера Б ему известен. Однако сеть Ethernet, которой они соединены, не работает с IP-адресами. Поэтому компьютеру А для осуществления передачи через Ethernet требуется узнать адрес компьютера Б в сети Ethernet (MAC-адрес в терминах Ethernet). Для этой задачи и используется протокол ARP. По этому протоколу компьютер А отправляет широковещательный запрос, адресованный всем компьютерам в одном с ним широковещательном домене. Суть запроса: «компьютер с IP-адресом 10.22.22.2, сообщите свой MAC-адрес компьютеру с МАС-адресом (напр. a0:ea:d1:11:f1:01)». Сеть Ethernet доставляет этот запрос всем устройствам в том же сегменте Ethernet, в том числе и компьютеру Б. Компьютер Б отвечает компьютеру А на запрос и сообщает свой MAC-адрес (напр. 00:ea:d1:11:f1:11) Теперь, получив MAC-адрес компьютера Б, компьютер А может передавать ему любые данные через сеть Ethernet.

Существуют следующие типы сообщений ARP: запрос ARP (ARP request) и ответ ARP (ARP reply). Система-отправитель при помощи запроса ARP запрашивает аппаратный адрес системы-получателя, который приходит внутри ответа ARP.

Перед тем, как передать пакет сетевого уровня через сегмент Ethernet, сетевой стек проверяет кэш ARP, чтобы выяснить, не зарегистрирована ли уже в его таблице нужная информация об узле-получателе. Если такой записи в кэше ARP нет, то выполняется широковещательный запрос ARP. Этот запрос для устройств в сети имеет следующий смысл: «Кто-нибудь знает физический адрес устройства, обладающего таким-то адресом IP?» Когда хост с этим адресом IP примет такой пакет запроса, он должен ответить: «Да, это мой адрес IP и мой аппаратный адрес такой-то». После этого отправитель  запроса сохранит аппаратный адрес получателя в свой кэш ARP и сможет адресно передать информацию получателю.

Ниже приведён пример запроса и ответа ARP.
<см. внизу страницы>

Записи в кэше ARP могут быть статическими и динамическими. Пример, данный выше, описывает динамическую запись кэша. Можно также создавать статические записи в таблице В большинстве операционных систем это можно сделать при помощи команды:
 arp -s <IP-адрес> <MAC-адрес>

В Windows Server 2003 записи в таблице ARP, созданные динамически, остаются в кэше в течение 2 минут. Если в течение этих двух минут произошла повторная передача данных по этому адресу, то время хранения записи в кэше продлевается ещё на 2 минуты. Эта процедура может повторяться несколько раз, но максимум запись в кэше просуществует до 10 минут. После этого запись будет удалена из кэша, и при необходимости будет отправлен повторный запрос ARP.

В более новых операционных системах время хранения записей в таблице ARP и метод хранения выбираются программно и при желании их можно изменить.

Варианты протокола ARP 
ARP изначально был разработан не только для IP, этот протокол также можно использовать для выяснения адресов MAC в различных протоколах 3 уровня (). ARP был адаптирован также для получения других (аппаратных) адресов 2 уровня модели OSI ().

Протоколы InARP и ATM ARP используются в разных вариантах инкапсуляции IP over ATM, описанных в RFC 1577 ().

В настоящее время ARP в-основном используется для сопоставления адресов IP и MAC в сетях ethernet.

Inverse ARP 
Inverse Address Resolution Protocol, Inverse ARP или InARP — протокол для получения адресов сетевого уровня (например адресов IP) других рабочих станций по их адресам канального уровня (например, DLCI в сетях Frame Relay). InARP обычно используется в сетях Frame Relay и ATM.

Сравнение ARP и InARP 
ARP переводит адреса сетевого уровня в адреса канального уровня, в то же время InARP можно рассматривать как его инверсию. InARP реализовано как расширение ARP. Форматы пакетов этих протоколов одни и те же, различаются лишь коды операций и заполняемые поля.

RARP 
Reverse Address Resolution Protocol, Reverse ARP или RARP, как и InARP, переводит адреса канального уровня в адреса сетевого уровня. Но RARP используется для получения логических адресов самих станций отправителей, в то время как в InARP-протоколе отправитель знает свои адреса и запрашивает логический адрес другой станции.
От RARP отказались в пользу BOOTP, который был в свою очередь заменён DHCP.

Принцип работы 
 Узел, которому нужно выполнить отображение адреса IP на аппаратный адрес (Ethernet hardware address, MAC-адрес), формирует запрос ARP с адресом IP получателя, вкладывает его в кадр протокола канального уровня и рассылает его широковещательно.
 Все узлы сегмента локальной сети получают запрос ARP и сравнивают указанный там адрес IP с собственным.
 В случае совпадения собственного адреса IP с полученным в запросе ARP, узел формирует ответ ARP, в котором указывает и свой адрес IP, и свой аппаратный адрес, и отправляет его уже адресно на аппаратный адрес отправителя запроса ARP.

Преобразование адресов выполняется путём поиска в таблице соответствия адресов IP и MAC. Эта таблица, называемая таблицей ARP, хранится в памяти операционной системы и содержит записи для каждого известного ей узла сети. В двух столбцах содержатся адреса IP и Ethernet (MAC). Если требуется преобразовать адрес IP в MAC, то в таблице ARP ищется запись с соответствующим адресом IP.

Структура пакета ARP 
Ниже проиллюстрирована структура пакета, используемого в запросах и ответах ARP. В сетях Ethernet в этих пакетах используется EtherType 0x0806, и запросы рассылаются на широковещательный MAC-адрес — FF:FF:FF:FF:FF:FF.
Отметим, что в структуре пакета, показанной ниже, в качестве SHA, SPA, THA и TPA условно используются 32-битные слова — реальная длина определяется физическим устройством и протоколом.

 Hardware type (HTYPE)  Каждый канальный протокол передачи данных имеет свой номер, который хранится в этом поле. Например, Ethernet имеет номер 0x0001.
 Protocol type (PTYPE)  Код сетевого протокола. Например, для IPv4 будет записано 0x0800.
 Hardware length (HLEN) Длина физического адреса в байтах. Адреса Ethernet имеют длину 6 байт (0x06).
 Protocol length (PLEN) Длина логического адреса в байтах. IPv4 адреса имеют длину 4 байта (0x04).
 Operation Код операции отправителя: 0x0001 в случае запроса и 0x0002 в случае ответа.
 Sender hardware address (SHA)  Физический адрес отправителя.
 Sender protocol address (SPA)  Логический адрес отправителя.
 Target hardware address (THA) Физический адрес получателя. Не требуется при запросе.
 Target protocol address (TPA)  Логический адрес получателя.

Пример запроса 

Если хост с IPv4 адресом 10.10.10.123 и MAC адресом 00:0D:9D:86:59:E2 хочет послать пакет другому хосту с адресом 10.10.10.140, но не знает его MAC адрес, то он должен послать ARP запрос для разрешения адреса.

Пакет, изображённый ниже, изображает широковещательный запрос.
Если хост с IP 10.10.10.140 присутствует в сети и доступен, то он получает этот запрос ARP и возвращает ответ.

Пример ответа 
В ситуации, описанной выше, если узел с адресом 10.10.10.140 имеет адрес MAC 00:09:58:D8:33:AA, то он отправит в ответ пакет, проиллюстрированный ниже. Заметим, что блоки адресов отправителя и получателя теперь поменяли значения (отправитель ответа теперь получатель запроса; получатель ответа — отправитель запроса). Кроме того, в ответе есть MAC-адрес узла 10.10.10.140 в поле физического адреса отправителя (SHA), а поле THA не пустое (одноадресный ответ).

Любой узел в той же сети, что и отправитель с получателем, тоже получит запрос (так как он широковещательный) и таким образом добавит в свой кэш информацию об отправителе. Ответ ARP направлен только источнику запроса ARP, поэтому ответ ARP не доступен другим узлам в сети.

 Замечание. Длина полей SHA, SPA, THA, TPA зависит от параметров Hardware length и Protocol length соответственно.

Кэш ARP 
Эффективность функционирования ARP во многом зависит от кэша ARP (ARP cache), который имеется на каждом хосте. В кэше содержится составленная операционной системой таблица соответствия адресов MAC и IP.

Время жизни записи в кэше оставлено на усмотрение разработчика. По умолчанию может составлять от десятков секунд (например, 20 секунд) до четырёх часов (Cisco IOS).

Обнаружение конфликтов адресов (Address Conflict Detection) 
ARP может использоваться для обнаружения конфликтов IP-адресов в локальной сети. RFC 5227 определяет формат запроса ARP Probe с полем SPA, состоящим из всех нулей (адрес IP 0.0.0.0). Перед назначением адреса IP интерфейсу хост может проверить, что этот адрес не используется другим хостом сегмента локальной сети.

ARP-оповещение (ARP Announcement) 
ARP-оповещение () — это пакет (обычно ARP-запрос), содержащий корректную SHA и SPA хоста-отправителя, с TPA, равной SPA. Это не разрешающий запрос, а запрос на обновление кэша ARP других хостов, получающих пакет.

Большинство операционных систем посылает такой пакет при включении хоста в сеть, что позволяет предотвратить ряд проблем. Например, при смене сетевой карты (когда необходимо обновить связь между адресами IP и MAC), такой запрос исправит записи в кэше ARP других хостов в сети.

ARP-оповещения также используются для «защиты» адресов IP в протоколе Zeroconf, описанном в RFC 3927.

Добровольный запрос ARP (Gratuitous ARP) 

Специальный случай запроса ARP — запрос собственного адреса IP, он получил название «Gratuitous ARP» (добровольный запрос ARP).

В таком запросе адреса IP отправителя и получателя совпадают.

Gratuitous ARP используется в двух целях:
 оповещение соседних устройств о том, что в сегменте сети появился новый адрес IP;
 проверка свободности адреса IP (используется ли он другим устройством).

См. также 
 MAC-адрес
 IP-адрес
 DHCP
 RARP
 BOOTP
 ARP-spoofing
 Proxy ARP

Примечания

Литература 
  RFC 826 : Address Resolution Protocol
  RFC 1577 : Classical IP and ARP over ATM
  RFC 2390 : Inverse Address Resolution Protocol
  RFC 5227 : IPv4 Address Conflict Detection

Ссылки 
  Gratuitous ARP
  ARP Sequence Diagram // EventStudio 1.0 documentation. — 
  Free ARP tools with source code
  ARP-SK ARP traffic generation tools
 ARP-спуфинг
  How To Clear ARP Cache On Linux or Unix
 

Протоколы канального уровня