Протокол разрешения адресов ( ARP ) — это протокол связи, используемый для обнаружения адреса канального уровня , такого как MAC-адрес , связанного с данным адресом интернет-уровня , обычно адресом IPv4 . Это сопоставление является важной функцией в наборе протоколов Интернета . ARP был определен в 1982 году в RFC 826 [1] , который является интернет-стандартом STD 37.
ARP был реализован со многими комбинациями технологий сетевого и канального уровня, таких как IPv4 , Chaosnet , DECnet и Xerox PARC Universal Packet (PUP) с использованием стандартов IEEE 802 , FDDI , X.25 , Frame Relay и асинхронного режима передачи (ATM). .
В сетях Интернет-протокола версии 6 (IPv6) функциональность ARP обеспечивается протоколом обнаружения соседей (NDP).
Протокол разрешения адресов представляет собой протокол запроса-ответа . Его сообщения непосредственно инкапсулируются протоколом канального уровня. Он передается в пределах одной подсети и никогда не маршрутизируется .
Протокол разрешения адресов использует простой формат сообщения, содержащий один запрос или ответ на разрешение адреса. Пакеты передаются на канальном уровне базовой сети в виде необработанной полезной нагрузки. В случае Ethernet значение EtherType 0x0806 используется для идентификации кадров ARP.
Размер сообщения ARP зависит от размеров адресов канального и сетевого уровня. Заголовок сообщения определяет типы сетей, используемых на каждом уровне, а также размер адресов каждого из них. Заголовок сообщения завершается кодом операции запроса (1) и ответа (2). Полезная нагрузка пакета состоит из четырех адресов: аппаратного и протокольного адреса хостов отправителя и получателя.
Основная структура пакетов ARP показана в следующей таблице, которая иллюстрирует случай сетей IPv4, работающих в Ethernet. В этом сценарии пакет имеет 48-битные поля для аппаратного адреса отправителя (SHA) и целевого аппаратного адреса (THA), а также 32-битные поля для соответствующих адресов отправителя и целевого протокола (SPA и TPA). Размер пакета ARP в этом случае составляет 28 байт.
Значения параметров протокола ARP стандартизированы и поддерживаются Управлением по присвоению номеров Интернета (IANA). [2]
EtherType для ARP — 0x0806 . Он появляется в заголовке кадра Ethernet, когда полезная нагрузка представляет собой пакет ARP, и его не следует путать с PTYPE, который появляется в этом инкапсулированном пакете ARP.
Место ARP в наборе протоколов Интернета и модели OSI может вызывать путаницу или даже споры. RFC 826 помещает его на канальный уровень и характеризует как инструмент для изучения «уровня более высокого уровня», такого как уровень Интернета. [4] RFC 1122 также обсуждает ARP в разделе канального уровня. [5] [6] Ричард Стивенс помещает ARP на канальный уровень OSI [7] , в то время как новые версии связывают его с сетевым уровнем или вводят промежуточный уровень OSI 2.5. [8]
Два компьютера в офисе ( Компьютер 1 и Компьютер 2 ) соединены друг с другом в локальной сети с помощью кабелей Ethernet и сетевых коммутаторов без каких-либо промежуточных шлюзов или маршрутизаторов . Компьютер 1 имеет пакет для отправки на компьютер 2 . Через DNS он определяет, что компьютер 2 имеет IP-адрес 192.168.0.55 .
Для отправки сообщения также требуется MAC -адрес компьютера 2 . Во-первых, компьютер 1 использует кэшированную таблицу ARP для поиска 192.168.0.55 для любых существующих записей MAC-адреса компьютера 2 ( 00:EB:24:B2:05:AC ). Если MAC-адрес найден, он отправляет кадр Ethernet , содержащий IP-пакет, по каналу с адресом назначения 00:EB:24:B2:05:AC . Если кэш не дал результата для 192.168.0.55 , компьютер 1 должен отправить широковещательное сообщение запроса ARP (адрес назначения FF:FF:FF:FF:FF:FF MAC-адрес), которое принимается всеми компьютерами в локальной сети. , запрашивая ответ на 192.168.0.55 .
Компьютер 2 отвечает ответным сообщением ARP, содержащим его MAC-адреса и IP-адреса. При отправке запроса Компьютер 2 может вставить запись для Компьютера 1 в свою таблицу ARP для использования в будущем.
Компьютер 1 получает и кэширует информацию ответа в своей таблице ARP и теперь может отправить пакет. [9]
Зонд ARP в IPv4 — это запрос ARP, созданный с использованием SHA зондирующего узла, SPA со всеми нулями, THA со всеми нулями и TPA, установленного для проверяемого адреса IPv4. Если какой-либо хост в сети считает адрес IPv4 (в TPA) своим собственным, он ответит на зонд (через SHA зондирующего хоста), тем самым информируя зондирующий хост о конфликте адресов. Если вместо этого нет хоста, который считает адрес IPv4 своим собственным, ответа не будет. Если с небольшими задержками было отправлено несколько таких запросов и ни один из них не получил ответов, можно разумно ожидать, что конфликта не существует. Поскольку исходный пробный пакет не содержит ни допустимого SHA/SPA, ни допустимой пары THA/TPA, нет риска, что какой-либо хост будет использовать этот пакет для обновления своего кэша проблемными данными. Прежде чем начать использовать адрес IPv4 (полученный в результате ручной настройки, DHCP или каким-либо другим способом), хост, реализующий эту спецификацию, должен проверить, используется ли уже адрес, путем широковещательной рассылки тестовых пакетов ARP. [10] [11]
ARP также может использоваться как простой протокол объявлений. Это полезно для обновления сопоставлений аппаратного адреса других хостов при изменении IP-адреса или MAC-адреса отправителя. Такое объявление, также называемое бесплатным сообщением ARP (GARP), обычно передается как запрос ARP , содержащий SPA в целевом поле (TPA=SPA), при этом THA установлено в ноль. Альтернативный способ — широковещательная рассылка ответа ARP с дублированием SHA и SPA отправителя в целевых полях (TPA=SPA, THA=SHA).
Объявления запроса ARP и ответа ARP являются методами, основанными на стандартах, [12] [13] , но метод запроса ARP является предпочтительным. [14] Некоторые устройства могут быть настроены на использование любого из этих двух типов объявлений. [15]
Объявление ARP не предназначено для запроса ответа; вместо этого он обновляет все кэшированные записи в таблицах ARP других хостов, которые получают пакет. Код операции в объявлении может быть либо запросом, либо ответом; Стандарт ARP указывает, что код операции обрабатывается только после обновления таблицы ARP из полей адреса. [16] [17] [18]
Многие операционные системы выдают объявление ARP во время запуска. Это помогает решить проблемы, которые в противном случае могли бы возникнуть, если, например, сетевая карта была недавно заменена (изменено сопоставление IP-адреса с MAC-адресами), а другие хосты все еще имеют старое сопоставление в своих кэшах ARP.
Объявления ARP также используются некоторыми сетевыми интерфейсами для балансировки нагрузки входящего трафика. В группе сетевых карт он используется для объявления другого MAC-адреса внутри группы, который должен получать входящие пакеты.
Объявления ARP можно использовать в протоколе Zeroconf , чтобы обеспечить автоматическое назначение локального адреса интерфейсу, где другая конфигурация IP-адреса недоступна. Объявления используются для того, чтобы гарантировать, что адрес, выбранный хостом, не используется другими хостами в сетевом канале. [19]
Эта функция может быть опасной с точки зрения кибербезопасности, поскольку злоумышленник может получить информацию о других хостах своей подсети, чтобы сохранить в их кэше ARP ( подмена ARP ) запись, в которой MAC-адрес злоумышленника связан, например, с IP-адресом узла по умолчанию . шлюз , что позволяет им перехватывать весь трафик во внешние сети.
Посредничество ARP относится к процессу разрешения адресов уровня 2 через виртуальную частную проводную службу (VPWS), когда в подключенных цепях используются разные протоколы разрешения, например Ethernet на одном конце и Frame Relay на другом. В IPv4 каждое периферийное устройство поставщика (PE) обнаруживает IP-адрес локально подключенного периферийного устройства клиента (CE) и передает этот IP-адрес соответствующему удаленному PE-устройству. Затем каждое PE-устройство отвечает на локальные запросы ARP, используя IP-адрес удаленного CE-устройства и аппаратный адрес локального PE-устройства. В IPv6 каждое PE-устройство обнаруживает IP-адрес как локального, так и удаленного CE-устройства, а затем перехватывает пакеты локального обнаружения соседей (ND) и обратного обнаружения соседей (IND) и пересылает их на удаленное PE-устройство. [20]
Протокол обратного разрешения адресов ( Inverse ARP или InARP ) используется для получения адресов сетевого уровня (например, IP-адресов ) других узлов из адресов канального уровня (уровень 2). Поскольку ARP преобразует адреса уровня 3 в адреса уровня 2, InARP можно назвать его инверсией. Кроме того, InARP реализован как расширение протокола ARP: он использует тот же формат пакетов, что и ARP, но другие коды операций.
InARP в основном используется в сетях Frame Relay ( DLCI ) и ATM, в которых адреса виртуальных каналов уровня 2 иногда получаются из сигнализации уровня 2, и соответствующие адреса уровня 3 должны быть доступны, прежде чем эти виртуальные каналы можно будет использовать. [21]
Протокол обратного разрешения адресов (Reverse ARP или RARP), как и InARP, преобразует адреса уровня 2 в адреса уровня 3. Однако в InARP запрашивающая станция запрашивает адрес уровня 3 другого узла, тогда как RARP используется для получения адреса уровня 3 самой запрашивающей станции в целях конфигурации адреса. RARP устарел; он был заменен на BOOTP , который позже был заменен протоколом динамической конфигурации хоста (DHCP). [22]
Поскольку ARP не предоставляет методов аутентификации ответов ARP в сети, ответы ARP могут поступать из систем, отличных от той, которая имеет требуемый адрес уровня 2. Прокси-сервер ARP — это система, которая отвечает на запрос ARP от имени другой системы, для которой она перенаправляет трафик, обычно как часть структуры сети, например, для коммутируемого доступа в Интернет. Напротив, при подмене ARP отвечающей системы, или спуфере , отвечает на запрос адреса другой системы с целью перехвата данных, привязанных к этой системе. Злоумышленник может использовать подмену ARP для выполнения атаки «человек посередине» или атаки типа «отказ в обслуживании» на других пользователей в сети. Существует различное программное обеспечение для обнаружения и выполнения атак спуфинга ARP, хотя сам ARP не предоставляет никаких методов защиты от таких атак. [23]
IPv6 использует протокол обнаружения соседей и его расширения, такие как Secure Neighbor Discovery , а не ARP.
Компьютеры могут поддерживать списки известных адресов вместо использования активного протокола. В этой модели каждый компьютер поддерживает базу данных сопоставления адресов уровня 3 (например, IP-адресов ) с адресами уровня 2 (например, MAC-адресами Ethernet ). Эти данные сохраняются в основном за счет интерпретации пакетов ARP из канала локальной сети. Поэтому его часто называют кэшем ARP . По крайней мере, с 1980-х годов [24] сетевые компьютеры имеют утилиту под названием arp для опроса или управления этой базой данных. [25] [26] [27]
Исторически для поддержания сопоставления между адресами использовались другие методы, такие как файлы статической конфигурации [28] или централизованно поддерживаемые списки.
Встроенные системы, такие как сетевые камеры [29] и сетевые устройства распределения питания [30] , у которых отсутствует пользовательский интерфейс, могут использовать так называемую начинку ARP для установления начального сетевого подключения, хотя это неправильное название, поскольку ARP не задействован.
Наполнение ARP осуществляется следующим образом:
Такие устройства обычно имеют способ отключить этот процесс, когда устройство работает нормально, поскольку эта возможность может сделать его уязвимым для атак.
Необоснованный ARP МОЖЕТ использовать либо запрос ARP, либо пакет ответа ARP.
[...] любой узел, получающий любой пакет ARP (запрос или ответ), ДОЛЖЕН обновить свой локальный кэш ARP, указав протокол отправителя и аппаратные адреса в пакете ARP [...]
Почему объявления ARP выполняются с использованием пакетов запроса ARP, а не пакетов ответа ARP?
[...] включенный [...] garpReply генерирует пакеты ARP, которые [...] имеют тип OPCODE REPLY, а не REQUEST.