ARP ( Address Resolution Protocol — протокол разрешения адресов) — протокол канального уровня (англ. Data Link layer), предназначенный для преобразования IP-адресов (адресов сетевого уровня) в MAC-адреса (адреса канального уровня) в сетях TCP/IP. Он определён в RFC 826.

ARP (протокол разрешения адресов) — очень распространённый и чрезвычайно важный протокол. Каждый узел сети имеет два адреса, физический адрес и логический адрес. В сети Ethernet для идентификации источника и получателя информации используются оба адреса. Информация, пересылаемая от одного компьютера другому по сети, содержит в себе физический адрес отправителя, IP-адрес отправителя, физический адрес получателя и IP-адрес получателя. ARP-протокол обеспечивает связь между этими двумя адресами. Существует четыре типа ARP-сообщений: ARP-запрос (ARP request), ARP-ответ (ARP reply), RARP-запрос (RARP-request) и RARP-ответ (RARP-reply). Локальный хост при помощи ARP-запроса запрашивает физический адрес хоста-получателя. Ответ (физический адрес хоста-получателя) приходит в виде ARP-ответа. Хост-получатель, вместе с ответом, шлёт также RARP-запрос, адресованный отправителю, для того, чтобы проверить его IP-адрес. После проверки IP-адреса отправителя начинается передача пакетов данных.

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

Записи в ARP-кеше могут быть статическими и динамическими. Пример, данный выше, описывает динамическую запись кеша. Хост-отправитель автоматически послал запрос получателю, не уведомляя при этом пользователя. Записи в ARP-кеш можно добавлять вручную, создавая статические записи кеша. Это можно сделать при помощи команды:

1
arp -s <IP адрес> <MAC адрес>

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

Вариации ARP-протокола

ARP изначально был разработан не только для IP протокола, но в настоящее время в основном используется для сопоставления IP- и MAC-адресов.

ARP также можно использовать для разрешения MAC-адресов для различных адресов протоколов 3-го уровня (Layer 3 protocols addresses). ARP был адаптирован также для разрешения других видов адресов 2-го уровня (Layer 2 addresses); например, ATMARP используется для разрешения ATM NSAP адресов в Classical IP over ATM протоколе.

Inverse ARP

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

Сравнение ARP и InARP

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

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

Структура пакета

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

+ Bits 0 — 7 8 — 15 16 — 31
0 Hardware type (HTYPE) Protocol type (PTYPE)
32 Hardware length (HLEN) Protocol length (PLEN) Operation (OPER)
64 Sender hardware address (SHA)
 ? Sender protocol address (SPA)
 ? Target hardware address (THA)
 ? Target protocol address (TPA)

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

Если хост с IPv4 адресом 10.10.10.123 и MAC адресом 00:09:58:D8:11:22 хочет послать пакет другому хосту с адресом 10.10.10.140, но не знает его MAC адрес, то он должен послать ARP запрос для разрешения адреса.

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

+ Bits 0 — 7 8 — 15 16 — 31
0 Hardware type = 0x0001 Protocol type = 0x0800
32 Hardware length = 6 Protocol length = 4 Operation = 1
64 SHA (first 32 bits) = 0x000958D8
96 SHA (last 16 bits) = 0x1122 SPA (first 16 bits) = 0x0A0A
128 SPA (last 16 bits) = 0x0A7B THA (first 16 bits) = 0xFFFF
160 THA (last 32 bits) = 0xFFFFFFFF
192 TPA = 0x0A0A0A8C

Пример ответа

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

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

+ Bits 0 — 7 8 — 15 16 — 31
0 Hardware type = 0x0001 Protocol type = 0x0800
32 Hardware length = 6 Protocol length = 4 Operation = 2
64 SHA (first 32 bits) = 0x000958D8
96 SHA (last 16 bits) = 0x33AA SPA (first 16 bits) = 0x0A0A
128 SPA (last 16 bits) = 0x0A8C THA (first 16 bits) = 0x0009
160 THA (last 32 bits) = 0x58D81122
192 TPA = 0x0A0A0A7B
  • Замечание: Длина полей SHA, SPA, THA, TPA зависит от параметров Hardware length и Protocol length соответственно

ARP Оповещение

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

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

ARP оповещения также используются для ‘защиты’ IP адресов в RFC 3927 (Zeroconf) протоколе.

Нравится эта статья? Подпишитесь на RSS-ленту и получите еще больше классной информации!