ARP
ARP | |
---|---|
Название | Address Resolution Protocol |
Уровень (по модели OSI) | канальный |
Семейство | TCP/IP |
Создан в | 1982 |
Порт/ID | 0x0806/Ethernet |
Назначение протокола | Преобразование сетевых адресов в канальные |
Спецификация | RFC 826 |
Основные реализации (клиенты) | реализации стека TCP/IP в Microsoft Windows, Linux и BSD |
Основные реализации (серверы) | реализации стека TCP/IP в Windows, Linux и BSD |
Медиафайлы на Викискладе |
ARP (англ. Address Resolution Protocol — протокол определения адреса) — протокол канального уровня, предназначенный для определения MAC-адреса по известному IP-адресу. Наибольшее распространение этот протокол получил благодаря повсеместности сетей IP, построенных поверх Ethernet, поскольку практически в 100 % случаев при таком сочетании используется ARP.
Описание
Описание протокола было опубликовано в ноябре 1982 года в RFC 826. ARP был спроектирован для случая передачи IP-пакетов через сегмент Ethernet. При этом общий принцип, предложенный для ARP, может, и был использован и для сетей других типов.
Существуют следующие типы сообщений ARP: запрос ARP (ARP request) и ответ ARP (ARP reply). Система-отправитель при помощи запроса ARP запрашивает физический адрес системы-получателя. Ответ (физический адрес узла-получателя) приходит в виде ответа ARP.
Перед тем как передать пакет сетевого уровня через сегмент Ethernet, сетевой стек проверяет кэш ARP, чтобы выяснить, не зарегистрирована ли в нём уже нужная информация об узле-получателе. Если такой записи в кэше ARP нет, то выполняется широковещательный запрос ARP. Этот запрос для устройств в сети имеет следующий смысл: «Кто-нибудь знает физический адрес устройства, обладающего следующим IP-адресом?» Когда получатель с этим IP-адресом примет этот пакет, то должен будет ответить: «Да, это мой IP-адрес. Мой физический адрес следующий: …» После этого отправитель обновит свой кэш ARP и будет способен передать информацию получателю. Ниже приведён пример запроса и ответа ARP. <см. внизу страницы>
Записи в кэше ARP могут быть статическими и динамическими. Пример, данный выше, описывает динамическую запись кэша. Можно также создавать статические записи в таблице ARP. Это можно сделать при помощи команды:
arp -s <IP-адрес> <MAC-адрес>
Обычно, записи в таблице ARP, созданные динамически, остаются в кэше в течение 2-х минут[источник не указан 4442 дня]. Если в течение этих двух минут произошла повторная передача данных по этому адресу, то время хранения записи в кэше продлевается ещё на 2 минуты. Эта процедура может повторяться до тех пор, пока запись в кэше просуществует до 10 минут. После этого запись будет удалена из кэша, и будет отправлен повторный запрос ARP.[источник не указан 5334 дня]. В действительности время хранения записей в 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.
Принцип работы
- Узел, которому нужно выполнить отображение IP-адреса на локальный адрес[1], формирует ARP запрос, вкладывает его в кадр протокола канального уровня, указывая в нем известный IP-адрес, и рассылает запрос широковещательно.
- Все узлы локальной сети получают ARP запрос и сравнивают указанный там IP-адрес с собственным.
- В случае их совпадения узел формирует ARP-ответ, в котором указывает свой IP-адрес и свой локальный адрес и отправляет его уже направленно, так как в ARP запросе отправитель указывает свой локальный адрес.
Преобразование адресов выполняется путем поиска в таблице. Эта таблица, называемая ARP-таблицей, хранится в памяти и содержит строки для каждого узла сети. В двух столбцах содержатся IP- и Ethernet-адреса. Если требуется преобразовать IP-адрес в Ethernet-адрес, то ищется запись с соответствующим IP-адресом. Ниже приведен пример упрощенной ARP-таблицы.
| IP-адрес Ethernet-адрес | --------------------------------------------- | 223.1.2.1 08:00:39:00:2F:C3 | | 223.1.2.3 08:00:5A:21:A7:22 | | 223.1.2.4 08:00:10:99:AC:54 | ---------------------------------------------
Структура пакета
Ниже проиллюстрирована структура пакета, используемого в запросах и ответах 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 байт.
- 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 и возвращает ответ.
|
Пример ответа
В ситуации, описанной выше, если узел с адресом 10.10.10.140 имеет MAC адрес 00:09:58:D8:33:AA, то он отправит в ответ пакет, проиллюстрированный ниже. Заметим, что блоки адресов отправителя и получателя теперь поменяли значения (отправитель ответа теперь получатель запроса; получатель ответа — отправитель запроса). Кроме того, в ответе есть MAC-адрес узла 10.10.10.140 в поле физического адреса отправителя (SHA).
Любой узел в той же сети, что и отправитель с получателем, тоже получит запрос (так как он широковещательный) и таким образом добавит в свой кэш информацию об отправителе. Ответ ARP направлен только источнику запроса ARP, поэтому ответ ARP не доступен другим узлам в сети.
|
- Замечание: Длина полей SHA, SPA, THA, TPA зависит от параметров Hardware length и Protocol length соответственно
ARP кэш
Эффективность функционирования ARP во многом зависит от ARP кэша (ARP cache), который присутствует на каждом хосте.
В кэше содержатся IP адреса и соответствующие им аппаратные адреса.
Стандартное время жизни каждой записи в кэше составляет 2 минуты с момента создания записи[источник не указан 4442 дня].
ARP Обнаружение Конфликтов Адресов (Address Conflict Detection)
Протокол ARP используется для обнаружения конфликтов IP-адресов в локальной сети. RFC 5227 определяет формат запроса 'ARP Probe' с полем SPA состоящим из всех нулей (ip-адрес 0.0.0.0). Перед использованием IP-адреса хост может проверить что данный IP-адрес не используется другим хостом сегмента локальной сети.
ARP Оповещение
ARP оповещение (ARP Announcement) — это пакет (обычно ARP запрос [2]) содержащий корректную SHA и SPA хоста-отправителя, с TPA равной SPA. Это не разрешающий запрос, а запрос на обновление ARP-кеша других хостов, получающих пакет.
Большинство операционных систем посылают такой пакет при включении хоста в сеть, это позволяет предотвратить ряд проблем. Например при смене сетевой карты (когда необходимо обновить связь между IP и MAC адресами), такой запрос исправит записи в ARP-кеше других хостов в сети.
ARP оповещения также используются для 'защиты' IP адресов в RFC 3927 (Zeroconf) протоколе.
ARP запросы могут решать и другие задачи. Так при загрузке сетевого обеспечения ЭВМ такой запрос может выяснить, а не присвоен ли идентичный IP-адрес какому-то еще объекту в сети.
В рамках протокола ARP возможны самообращенные запросы (gratuitous ARP). При таком запросе инициатор формирует пакет, где в качестве IP используется его собственный адрес. Это бывает нужно, когда осуществляется стартовая конфигурация сетевого интерфейса. В таком запросе IP-адреса отправителя и получателя совпадают.
Самообращенный запрос позволяет ЭВМ решить две проблемы. Во-первых, определить, нет ли в сети объекта, имеющего тот же IР-адрес. Если на такой запрос придет отклик, то ЭВМ выдаст на консоль сообщение Dublicate IP address sent from Ethernet address <...>. Во-вторых, в случае смены сетевой карты производится корректировка записи в АRP-таблицах ЭВМ, которые содержали старый МАС-адрес инициатора. Машина, получающая ARP-запрос c адресом, который содержится в ее таблице, должна обновить эту запись.
Вторая особенность такого запроса позволяет резервному файловому серверу заменить основной, послав самообращенный запрос со своим МАС-адресом, но с IP вышедшего из строя сервера. Этот запрос вызовет перенаправление кадров, адресованных основному серверу, на резервный. Клиенты сервера при этом могут и не знать о выходе основного сервера из строя. При этом возможны и неудачи, если программные реализации в ЭВМ не в полной мере следуют регламентациям протокола ARP.
Примечания
- ↑ Ethernet hardware address (MAC-адрес)
- ↑ Re: [dhcwg] Gratuitous ARP in DHCP vs. IPv4 ACD Draft
См. также
Ссылки
- ARP Sequence Diagram (pdf)
- RFC 826 — Address Resolution Protocol
- RFC 2390 — Inverse Address Resolution Protocol
- RFC 5227 - IPv4 Address Conflict Detection
- Gratuitous ARP
- Free ARP tools with source code (French)
- ARP-SK ARP traffic generation tools
- ARP-спуфинг (русский)
Для улучшения этой статьи желательно:
|