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