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-адресу.

Рассмотрим суть функционирования 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-адрес компьютеру с IP-адресом 10.0.0.1». Сеть Ethernet доставляет этот запрос всем устройствам в том же сегменте Ethernet, в том числе и компьютеру Б. Компьютер Б отвечает компьютеру А на запрос и сообщает свой MAC-адрес (напр. 00:ea:d1:11:f1:11) Теперь, получив MAC-адрес компьютера Б, компьютер А может передавать ему любые данные через сеть Ethernet.

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

Описание[править | править вики-текст]

Описание протокола было опубликовано в ноябре 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-х минут[источник не указан 769 дней]. Если в течение этих двух минут произошла повторная передача данных по этому адресу, то время хранения записи в кэше продлевается ещё на 2 минуты. Эта процедура может повторяться до тех пор, пока запись в кэше просуществует до 10 минут. После этого запись будет удалена из кэша, и будет отправлен повторный запрос ARP.[источник не указан 1661 день]. В действительности время хранения записей в 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.

Принцип работы[править | править вики-текст]

  1. Узел, которому нужно выполнить отображение IP-адреса на локальный адрес[1], формирует ARP запрос, вкладывает его в кадр протокола канального уровня, указывая в нем известный IP-адрес, и рассылает запрос широковещательно.
  2. Все узлы локальной сети получают ARP запрос и сравнивают указанный там IP-адрес с собственным.
  3. В случае их совпадения узел формирует ARP-ответ, в котором указывает свой IP-адрес и свой локальный адрес и отправляет его уже направленно, так как в ARP запросе отправитель указывает свой локальный адрес.

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

---------------------------------------------
|     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-битные слова — реальная длина определяется физическим устройством и протоколом.

+ 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) 
Логический адрес получателя.

Пример запроса[править | править вики-текст]

ARP-request

Если хост с 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, то он отправит в ответ пакет, проиллюстрированный ниже. Заметим, что блоки адресов отправителя и получателя теперь поменяли значения (отправитель ответа теперь получатель запроса; получатель ответа — отправитель запроса). Кроме того, в ответе есть MAC-адрес узла 10.10.10.140 в поле физического адреса отправителя (SHA).

Любой узел в той же сети, что и отправитель с получателем, тоже получит запрос (так как он широковещательный) и таким образом добавит в свой кэш информацию об отправителе. Ответ 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 кэша (ARP cache), который присутствует на каждом хосте. В кэше содержатся IP адреса и соответствующие им аппаратные адреса.

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

ARP Обнаружение Конфликтов Адресов (Address Conflict Detection)[править | править вики-текст]

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

ARP Оповещение[править | править вики-текст]

ARP-оповещение (ARP Announcement) — это пакет (обычно ARP запрос [3]), содержащий корректную 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.

Примечания[править | править вики-текст]

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]