ARP: различия между версиями
imported>VitalikBot м Использование шаблона {{improve}}; langs: fr |
imported>Alex NB OT м унификация языковых шаблонов |
||
| Строка 1: | Строка 1: | ||
{{ | {{другие значения}} | ||
{{ОРИСС|дата=2022-02-09}} | |||
{{Карточка протокола | |||
|Аббр = ARP | |||
|Название = Address Resolution Protocol | |||
|Уровень = Канальный | |||
|Семейство = [[стек протоколов TCP/IP|TCP/IP]] | |||
|Создан = [[1982]] | |||
|Порт = 0x0806/[[Ethernet]] | |||
|Назначение = Преобразование сетевых адресов в канальные | |||
|Спецификация = RFC 826 | |||
|Клиенты = реализации стека TCP/IP в [[Microsoft Windows]], [[Linux]] и [[BSD]] | |||
|Серверы = реализации стека TCP/IP в [[Microsoft Windows|Windows]], [[Linux]] и [[BSD]] | |||
}} | |||
'''ARP''' ({{lang-en|Address Resolution Protocol}} — протокол определения адреса) — протокол в компьютерных сетях, предназначенный для определения ''[[MAC-адрес]]а'' другого компьютера по известному [[IP-адрес]]у. | |||
Описание протокола было опубликовано в ноябре 1982 года в RFC 826. ARP был спроектирован для передачи [[IP-пакет]]ов через пакеты (кадры) Ethernet. Принцип выяснения аппаратного адреса целевого хоста, использованный в ARP, был затем использован в сетях других типов. | |||
Наибольшее распространение ARP получил благодаря повсеместности сетей [[IP]], построенных поверх Ethernet, поскольку в них практически всегда используется ARP. В семействе протоколов [[IPv6]] ARP не существует, его функции возложены на [[ICMPv6]]. | |||
== Описание == | |||
Рассмотрим суть функционирования ''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-адрес'' компьютеру с МАС-адресом (напр. a0:ea:d1:11:f1:01)». Сеть Ethernet доставляет этот запрос всем устройствам в том же сегменте Ethernet, в том числе и компьютеру Б. Компьютер Б отвечает компьютеру А на запрос и сообщает свой ''MAC-адрес'' (напр. 00:ea:d1:11:f1:11) Теперь, получив ''MAC-адрес'' компьютера Б, компьютер А может передавать ему любые данные через сеть Ethernet. | |||
Существуют следующие типы сообщений ARP: запрос ARP (''ARP request'') и ответ ARP (''ARP reply''). Система-отправитель при помощи запроса ARP запрашивает аппаратный адрес системы-получателя, который приходит внутри ответа ARP. | |||
Перед тем, как передать пакет сетевого уровня через сегмент Ethernet, [[сетевой стек]] проверяет кэш ARP, чтобы выяснить, не зарегистрирована ли уже в его таблице нужная информация об узле-получателе. Если такой записи в кэше ARP нет, то выполняется широковещательный запрос ARP. Этот запрос для устройств в сети имеет следующий смысл: «Кто-нибудь знает физический адрес устройства, обладающего таким-то адресом IP?» Когда хост с этим адресом IP примет такой пакет запроса, он должен ответить: «Да, это мой адрес IP и мой аппаратный адрес такой-то». После этого отправитель запроса сохранит аппаратный адрес получателя в свой кэш ARP и сможет адресно передать информацию получателю. | |||
Ниже приведён пример запроса и ответа ARP. | |||
<span style="font-color: gray; font-style: italic;"><см. внизу страницы></span> | |||
Записи в кэше ARP могут быть статическими и динамическими. Пример, данный выше, описывает динамическую запись кэша. Можно также создавать статические записи в таблице В большинстве операционных систем это можно сделать при помощи команды: | |||
: <code>arp -s <IP-адрес> <MAC-адрес></code> | |||
В Windows Server 2003 записи в таблице ARP, созданные динамически, остаются в кэше в течение 2 минут. Если в течение этих двух минут произошла повторная передача данных по этому адресу, то время хранения записи в кэше продлевается ещё на 2 минуты. Эта процедура может повторяться несколько раз, но максимум запись в кэше просуществует до 10 минут. После этого запись будет удалена из кэша, и при необходимости будет отправлен повторный запрос ARP<ref>{{публикация|статья|язык=en |издание=MSDN |заглавие=View the Address Resolution Protocol (ARP) cache |год=2009 |месяц=10 |день=08 |ссылка=https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc786759(v=ws.10) |архив дата=2021-02-25 |архив=https://web.archive.org/web/20210225040655/https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc786759(v=ws.10)?redirectedfrom=MSDN }}</ref>. | |||
В более новых операционных системах время хранения записей в таблице ARP и метод хранения выбираются программно и при желании их можно изменить. | |||
== Варианты протокола ARP == | |||
ARP изначально был разработан не только для IP, этот протокол также можно использовать для выяснения адресов MAC в различных протоколах 3 уровня ({{lang-en|Layer 3 protocols addresses}}). ARP был адаптирован также для получения других (аппаратных) адресов 2 уровня модели OSI ({{lang-en2|Layer 2 addresses}}). | |||
Протоколы InARP и ATM ARP используются в разных вариантах инкапсуляции IP over ATM, описанных в RFC 1577 ({{lang-en2|Classical IP and ARP over ATM}})<ref name="IBM adapters_atm_tcpip.html">{{Публикация |заглавие=TCP/IP over ATM |язык=en |ссылка=https://www.ibm.com/docs/ssw_aix_71/network/adapters_atm_tcpip.html |издательство=[[IBM]] |архив дата=20220209210709 |архив=https://web.archive.org/web/20220209210709/https://www.ibm.com/docs/en/aix/7.1?topic=adapters-tcpip-over-atm <!-- |архив дата=2022-02-08 |архив=https://webcache.googleusercontent.com/search?q=cache:KZfpUjIAaeMJ:https://www.ibm.com/docs/ssw_aix_71/network/adapters_atm_tcpip.html+ --> }}</ref>. | |||
В настоящее время ARP в основном используется для сопоставления адресов IP и MAC в сетях ethernet. | |||
=== Inverse ARP === | |||
'''''Inverse Address Resolution Protocol''''', '''''Inverse ARP''''' или '''''InARP''''' — протокол для получения адресов сетевого уровня (например [[IP-адрес|адресов IP]]) других рабочих станций по их адресам канального уровня (например, ''[[DLCI]]'' в сетях ''[[Frame Relay]]''). ''InARP'' обычно используется в сетях ''[[Frame Relay]]'' и ''[[Asynchronous Transfer Mode|ATM]]''. | |||
==== Сравнение ARP и InARP ==== | |||
''ARP'' переводит адреса сетевого уровня в адреса канального уровня, в то же время ''InARP'' можно рассматривать как его инверсию. InARP реализовано как расширение ARP. Форматы пакетов этих протоколов одни и те же, различаются лишь коды операций и заполняемые поля. | |||
=== RARP === | |||
''[[Reverse Address Resolution Protocol]]'', ''Reverse ARP'' или ''RARP'', как и ''InARP'', переводит адреса канального уровня в адреса сетевого уровня. Но RARP используется для получения логических адресов самих станций отправителей, в то время как в InARP-протоколе отправитель знает свои адреса и запрашивает логический адрес другой станции. | |||
От RARP отказались в пользу [[BOOTP]], который был в свою очередь заменён [[Dynamic Host Configuration Protocol|DHCP]]. | |||
== Принцип работы == | |||
# Узел, которому нужно выполнить отображение адреса IP на аппаратный адрес (Ethernet hardware address, [[MAC-адрес]]), формирует запрос ARP с адресом IP получателя, вкладывает его в кадр протокола канального уровня и рассылает его широковещательно. | |||
# Все узлы сегмента локальной сети получают запрос ARP и сравнивают указанный там адрес IP с собственным. | |||
# В случае совпадения собственного адреса IP с полученным в запросе ARP, узел формирует ответ ARP, в котором указывает и свой адрес IP, и свой аппаратный адрес, и отправляет его уже адресно на аппаратный адрес отправителя запроса ARP. | |||
Преобразование адресов выполняется путём поиска в таблице соответствия адресов IP и MAC. Эта таблица, называемая таблицей ARP, хранится в памяти операционной системы и содержит записи для каждого известного ей узла сети. В двух столбцах содержатся адреса IP и Ethernet (MAC). Если требуется преобразовать адрес IP в MAC, то в таблице ARP ищется запись с соответствующим адресом IP. | |||
{|class="wikitable" | |||
|+ {{nobr|Упрощённый пример таблицы 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 == | ||
Ниже проиллюстрирована структура пакета, используемого в запросах и ответах ARP. В сетях [[Ethernet]] в этих пакетах используется [[EtherType]] 0x0806, и запросы рассылаются на широковещательный [[MAC-адрес]] — FF:FF:FF:FF:FF:FF. | |||
Отметим, что в структуре пакета, показанной ниже, в качестве SHA, SPA, THA и TPA условно используются 32-[[бит]]ные слова — реальная длина определяется физическим устройством и протоколом. | |||
=== | {| border="0" align="center" | ||
|- | |||
| | |||
{| class="wikitable" style="margin: 0 auto; text-align: center; width: 50em;" | |||
|- | |||
! colspan="1"|+ | |||
! colspan="8" width="25%"|Bits 0 — 7 | |||
! colspan="8" width="25%"|8 — 15 | |||
! colspan="16" width="50%"|16 — 31 | |||
|- | |||
! 0 | |||
| colspan="16"| Hardware type (HTYPE) | |||
| colspan="16"| Protocol type (PTYPE) | |||
|- | |||
! 32 | |||
| colspan="8"| Hardware length (HLEN) | |||
| colspan="8"| Protocol length (PLEN) | |||
| colspan="16"| Operation (OPER) | |||
|- | |||
! 64 | |||
| colspan="32"| Sender hardware address (SHA) | |||
|- | |||
! ? | |||
| colspan="32"| Sender protocol address (SPA) | |||
|- | |||
! ? | |||
| colspan="32"| Target hardware address (THA) | |||
|- | |||
! ? | |||
| colspan="32"| Target protocol address (TPA) | |||
|} | |||
|} | |||
; Hardware type (HTYPE) : Каждый канальный протокол передачи данных имеет свой номер, который хранится в этом поле. Например, [[Ethernet]] имеет номер 0x0001. | |||
; Protocol type (PTYPE) : Код сетевого протокола. Например, для [[IPv4]] будет записано 0x0800. | |||
; Hardware length (HLEN) :Длина физического адреса в байтах. Адреса Ethernet имеют длину 6 байт (0x06). | |||
; Protocol length (PLEN) :Длина логического адреса в байтах. IPv4 адреса имеют длину 4 байта (0x04). | |||
; Operation :Код операции отправителя: 0x0001 в случае запроса и 0x0002 в случае ответа. | |||
; Sender hardware address (SHA) : Физический адрес отправителя. | |||
; Sender protocol address (SPA) : Логический адрес отправителя. | |||
; Target hardware address (THA) :Физический адрес получателя. Не требуется при запросе. | |||
; Target protocol address (TPA) : Логический адрес получателя. | |||
=== | === Пример запроса === | ||
[[Файл:ARP-request.png|ARP-request]] | |||
Если хост с IPv4 адресом 10.10.10.123 и MAC адресом 00:0D:9D:86:59:E2 хочет послать пакет другому хосту с адресом 10.10.10.140, но не знает его MAC адрес, то он должен послать ARP запрос для разрешения адреса. | |||
Пакет, изображённый ниже, изображает широковещательный запрос. | |||
Если хост с IP 10.10.10.140 присутствует в сети и доступен, то он получает этот запрос ARP и возвращает ответ. | |||
==== | {| border="0" align="center" | ||
|- | |||
| | |||
{| class="wikitable" style="margin: 0 auto; text-align: center; width: 50em;" | |||
|- | |||
! colspan="1"| | |||
! colspan="8" width="25%"|Bits 0 — 7 | |||
! colspan="8" width="25%"|8 — 15 | |||
! colspan="16" width="50%"|16 — 31 | |||
|- | |||
! 0 | |||
| colspan="16"| Hardware type = 0x0001 | |||
| colspan="16"| Protocol type = 0x0800 | |||
|- | |||
! 32 | |||
| colspan="8"| Hardware length = 0x06 | |||
| colspan="8"| Protocol length = 0x04 | |||
| colspan="16"| Operation = 0x0001 | |||
|- | |||
! 64 | |||
| colspan="32"| SHA (first 32 bits) = 0x000D9D86 | |||
|- | |||
! 96 | |||
| colspan="16"| SHA (last 16 bits) = 0x59E2 | |||
| colspan="16"| SPA (first 16 bits) = 0x0A0A | |||
|- | |||
! 128 | |||
| colspan="16" | SPA (last 16 bits) = 0x0A7B | |||
| colspan="16"| THA (first 16 bits) = 0x0000 | |||
|- | |||
! 160 | |||
| colspan="32"| THA (last 32 bits) = 0x00000000 | |||
|- | |||
! 192 | |||
| colspan="32"| TPA = 0x0A0A0A8C | |||
|} | |||
|} | |||
=== | === Пример ответа === | ||
В ситуации, описанной выше, если узел с адресом 10.10.10.140 имеет адрес MAC 00:09:58:D8:33:AA, то он отправит в ответ пакет, проиллюстрированный ниже. Заметим, что блоки адресов отправителя и получателя теперь поменяли значения (отправитель ответа теперь получатель запроса; получатель ответа — отправитель запроса). Кроме того, в ответе есть MAC-адрес узла 10.10.10.140 в поле физического адреса отправителя (SHA), а поле THA не пустое (одноадресный ответ). | |||
Любой узел в той же сети, что и отправитель с получателем, тоже получит запрос (так как он широковещательный) и таким образом добавит в свой кэш информацию об отправителе. Ответ ARP направлен только источнику запроса ARP, поэтому ответ ARP не доступен другим узлам в сети. | |||
=== | {| border="0" align="center" | ||
{{ | |- | ||
| | | | ||
| | {| class="wikitable" style="margin: 0 auto; text-align: center; width: 50em;" | ||
| | |- | ||
| | ! colspan="1"|+ | ||
}} | ! colspan="8" width="25%"|Bits 0 — 7 | ||
! colspan="8" width="25%"|8 — 15 | |||
! colspan="16" width="50%"|16 — 31 | |||
|- | |||
! 0 | |||
| colspan="16"| Hardware type = 0x0001 | |||
| colspan="16"| Protocol type = 0x0800 | |||
|- | |||
! 32 | |||
| colspan="8"| Hardware length = 0x06 | |||
| colspan="8"| Protocol length = 0x04 | |||
| colspan="16"| Operation = 0x0002 | |||
|- | |||
! 64 | |||
| colspan="32"| SHA (first 32 bits) = 0x000958D8 | |||
|- | |||
! 96 | |||
| colspan="16"| SHA (last 16 bits) = 0x33AA | |||
| colspan="16"| SPA (first 16 bits) = 0x0A0A | |||
|- | |||
! 128 | |||
| colspan="16" | SPA (last 16 bits) = 0x0A8C | |||
| colspan="16"| THA (first 16 bits) = 0x000D | |||
|- | |||
! 160 | |||
| colspan="32"| THA (last 32 bits) = 0x9D8659E2 | |||
|- | |||
! 192 | |||
| colspan="32"| TPA = 0x0A0A0A7B | |||
|} | |||
|} | |||
* '''Замечание.''' Длина полей SHA, SPA, THA, TPA зависит от параметров Hardware length и Protocol length соответственно. | |||
== Кэш ARP == | |||
Эффективность функционирования ARP во многом зависит от кэша ARP (''ARP cache''), который имеется на каждом хосте. В кэше содержится составленная операционной системой таблица соответствия адресов MAC и IP. | |||
Время жизни записи в кэше оставлено на усмотрение разработчика. По умолчанию может составлять от десятков секунд (например, 20 секунд) до четырёх часов ([[Cisco IOS]]).<ref>{{Cite web |url=http://www.embeddedsystemtesting.com/2013/01/arp-timeout-value-for-linux-windows.html |title=Embedded System Testing Blog: ARP Timeout Value for Linux, Windows, Cisco 2960 and DELL Switch<!-- Заголовок добавлен ботом --> |access-date=2013-11-08 |archive-date=2013-09-21 |archive-url=https://web.archive.org/web/20130921032752/http://www.embeddedsystemtesting.com/2013/01/arp-timeout-value-for-linux-windows.html |url-status=live }}</ref> | |||
== Обнаружение конфликтов адресов (Address Conflict Detection) == | |||
ARP может использоваться для обнаружения конфликтов IP-адресов в локальной сети. RFC 5227 определяет формат запроса ''ARP Probe'' с полем ''SPA'', состоящим из всех нулей (адрес IP 0.0.0.0). Перед назначением адреса IP интерфейсу хост может проверить, что этот адрес не используется другим хостом сегмента локальной сети. | |||
== ARP-оповещение (ARP Announcement) == | |||
ARP-оповещение ({{lang-en2|ARP Announcement}}) — это пакет (обычно ARP-запрос<ref>[http://www1.ietf.org/mail-archive/web/dhcwg/current/msg03797.html Re: [dhcwg] Gratuitous ARP in DHCP vs. IPv4 ACD Draft<!-- Заголовок добавлен ботом -->] {{webarchive|url=https://web.archive.org/web/20071012093401/http://www1.ietf.org/mail-archive/web/dhcwg/current/msg03797.html |date=2007-10-12 }}</ref>), содержащий корректную SHA и SPA хоста-отправителя, с TPA, равной SPA. Это не разрешающий запрос, а запрос на обновление кэша ARP других хостов, получающих пакет. | |||
Большинство операционных систем посылает такой пакет при включении хоста в сеть, что позволяет предотвратить ряд проблем. Например, при смене сетевой карты (когда необходимо обновить связь между адресами IP и MAC), такой запрос исправит записи в кэше ARP других хостов в сети. | |||
ARP-оповещения также используются для «защиты» адресов IP в протоколе [[Zeroconf]], описанном в RFC 3927. | |||
== Добровольный запрос ARP (Gratuitous ARP) == | |||
Специальный случай запроса ARP — запрос собственного адреса IP, он получил название «''Gratuitous ARP''» (добровольный запрос ARP){{sfn|ZvonDozvon}}. | |||
В таком запросе адреса IP отправителя и получателя совпадают. | |||
''Gratuitous ARP'' используется в двух целях{{sfn|ZvonDozvon}}: | |||
# оповещение соседних устройств о том, что в сегменте сети появился новый адрес IP; | |||
# проверка свободности адреса IP (используется ли он другим устройством). | |||
== См. также == | |||
* [[MAC-адрес]] | |||
* [[IP-адрес]] | |||
* [[DHCP]] | |||
* [[RARP]] | |||
* [[BOOTP]] | |||
* [[ARP-spoofing]] | |||
* [[Proxy ARP]] | |||
== Примечания == | |||
{{примечания}} | |||
== Литература == | |||
* {{ref|en}} RFC 826 : Address Resolution Protocol | |||
* {{ref|en}} RFC 1577 : Classical IP and ARP over ATM | |||
* {{ref|en}} RFC 2390 : Inverse Address Resolution Protocol | |||
* {{ref|en}} RFC 5227 : IPv4 Address Conflict Detection | |||
== Ссылки == | |||
* {{ref|en}} [http://wiki.wireshark.org/Gratuitous_ARP Gratuitous ARP] | |||
* {{ref|en}} [http://www.eventhelix.com/RealtimeMantra/Networking/Arp.pdf ARP Sequence Diagram] // EventStudio 1.0 documentation. — {{Wayback|url=http://www.eventhelix.com/RealtimeMantra/Networking/Arp.pdf |date=20061110090649 }} | |||
* {{ref|fr}} [http://www.authsecu.com/arpflood/ Free ARP tools with source code] | |||
* {{ref|en}} [https://web.archive.org/web/20090903074149/http://sid.rstack.org/arp-sk/ ARP-SK ARP traffic generation tools] | |||
* [http://www.xgu.ru/wiki/ARP-spoofing ARP-спуфинг] | |||
* {{ref|en}} [http://coderseye.com/how-to-clear-arp-cache-on-linux-or-unix/ How To Clear ARP Cache On Linux or Unix] | |||
* {{Публикация|статья |заглавие=Протокол ARP — протокол разрешения адресов, принцип работы |ссылка=https://zvondozvon.ru/tehnologii/protokoli/arp|издание=ZvonDozvon.ru |ref=ZvonDozvon }} | |||
* [https://wireshark.wiki/wiki/Правила_чтения_таблиц,_описывающих_структуру_заголовков_сетевых_протоколов Правила чтения таблиц, описывающих структуру заголовков сетевых протоколов] | |||
= | {{переработать|дата=2010-02-09}} | ||
{{IPstack}} | |||
[[Категория:Протоколы канального уровня]] | |||
Текущая версия от 14:09, 15 ноября 2025
Ошибка скрипта: Модуля «hatnote» не существует.{{#if: | }} Шаблон:ОРИСС Шаблон:Карточка протокола ARP (англ. Шаблон:Lang-en2 — протокол определения адреса) — протокол в компьютерных сетях, предназначенный для определения MAC-адреса другого компьютера по известному IP-адресу.
Описание протокола было опубликовано в ноябре 1982 года в RFC 826. ARP был спроектирован для передачи IP-пакетов через пакеты (кадры) Ethernet. Принцип выяснения аппаратного адреса целевого хоста, использованный в ARP, был затем использован в сетях других типов.
Наибольшее распространение ARP получил благодаря повсеместности сетей IP, построенных поверх Ethernet, поскольку в них практически всегда используется ARP. В семействе протоколов IPv6 ARP не существует, его функции возложены на ICMPv6.
Описание
Рассмотрим суть функционирования 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-адрес компьютеру с МАС-адресом (напр. a0:ea:d1:11:f1:01)». Сеть Ethernet доставляет этот запрос всем устройствам в том же сегменте Ethernet, в том числе и компьютеру Б. Компьютер Б отвечает компьютеру А на запрос и сообщает свой MAC-адрес (напр. 00:ea:d1:11:f1:11) Теперь, получив MAC-адрес компьютера Б, компьютер А может передавать ему любые данные через сеть Ethernet.
Существуют следующие типы сообщений ARP: запрос ARP (ARP request) и ответ ARP (ARP reply). Система-отправитель при помощи запроса ARP запрашивает аппаратный адрес системы-получателя, который приходит внутри ответа ARP.
Перед тем, как передать пакет сетевого уровня через сегмент Ethernet, сетевой стек проверяет кэш ARP, чтобы выяснить, не зарегистрирована ли уже в его таблице нужная информация об узле-получателе. Если такой записи в кэше ARP нет, то выполняется широковещательный запрос ARP. Этот запрос для устройств в сети имеет следующий смысл: «Кто-нибудь знает физический адрес устройства, обладающего таким-то адресом IP?» Когда хост с этим адресом IP примет такой пакет запроса, он должен ответить: «Да, это мой адрес IP и мой аппаратный адрес такой-то». После этого отправитель запроса сохранит аппаратный адрес получателя в свой кэш ARP и сможет адресно передать информацию получателю.
Ниже приведён пример запроса и ответа ARP. <см. внизу страницы>
Записи в кэше ARP могут быть статическими и динамическими. Пример, данный выше, описывает динамическую запись кэша. Можно также создавать статические записи в таблице В большинстве операционных систем это можно сделать при помощи команды:
arp -s <IP-адрес> <MAC-адрес>
В Windows Server 2003 записи в таблице ARP, созданные динамически, остаются в кэше в течение 2 минут. Если в течение этих двух минут произошла повторная передача данных по этому адресу, то время хранения записи в кэше продлевается ещё на 2 минуты. Эта процедура может повторяться несколько раз, но максимум запись в кэше просуществует до 10 минут. После этого запись будет удалена из кэша, и при необходимости будет отправлен повторный запрос ARP<ref>Шаблон:Публикация</ref>.
В более новых операционных системах время хранения записей в таблице ARP и метод хранения выбираются программно и при желании их можно изменить.
Варианты протокола ARP
ARP изначально был разработан не только для IP, этот протокол также можно использовать для выяснения адресов MAC в различных протоколах 3 уровня (англ. Шаблон:Lang-en2). ARP был адаптирован также для получения других (аппаратных) адресов 2 уровня модели OSI (Шаблон:Lang-en2).
Протоколы InARP и ATM ARP используются в разных вариантах инкапсуляции IP over ATM, описанных в RFC 1577 (Шаблон:Lang-en2)<ref name="IBM adapters_atm_tcpip.html">Шаблон:Публикация</ref>.
В настоящее время ARP в основном используется для сопоставления адресов IP и MAC в сетях ethernet.
Inverse ARP
Inverse Address Resolution Protocol, Inverse ARP или InARP — протокол для получения адресов сетевого уровня (например адресов IP) других рабочих станций по их адресам канального уровня (например, DLCI в сетях Frame Relay). InARP обычно используется в сетях Frame Relay и ATM.
Сравнение ARP и InARP
ARP переводит адреса сетевого уровня в адреса канального уровня, в то же время InARP можно рассматривать как его инверсию. InARP реализовано как расширение ARP. Форматы пакетов этих протоколов одни и те же, различаются лишь коды операций и заполняемые поля.
RARP
Reverse Address Resolution Protocol, Reverse ARP или RARP, как и InARP, переводит адреса канального уровня в адреса сетевого уровня. Но RARP используется для получения логических адресов самих станций отправителей, в то время как в InARP-протоколе отправитель знает свои адреса и запрашивает логический адрес другой станции. От RARP отказались в пользу BOOTP, который был в свою очередь заменён DHCP.
Принцип работы
- Узел, которому нужно выполнить отображение адреса IP на аппаратный адрес (Ethernet hardware address, MAC-адрес), формирует запрос ARP с адресом IP получателя, вкладывает его в кадр протокола канального уровня и рассылает его широковещательно.
- Все узлы сегмента локальной сети получают запрос ARP и сравнивают указанный там адрес IP с собственным.
- В случае совпадения собственного адреса IP с полученным в запросе ARP, узел формирует ответ ARP, в котором указывает и свой адрес IP, и свой аппаратный адрес, и отправляет его уже адресно на аппаратный адрес отправителя запроса ARP.
Преобразование адресов выполняется путём поиска в таблице соответствия адресов IP и MAC. Эта таблица, называемая таблицей ARP, хранится в памяти операционной системы и содержит записи для каждого известного ей узла сети. В двух столбцах содержатся адреса IP и Ethernet (MAC). Если требуется преобразовать адрес IP в MAC, то в таблице ARP ищется запись с соответствующим адресом IP.
| 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
Ниже проиллюстрирована структура пакета, используемого в запросах и ответах 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 байт (0x06).
- Protocol length (PLEN)
- Длина логического адреса в байтах. IPv4 адреса имеют длину 4 байта (0x04).
- Operation
- Код операции отправителя: 0x0001 в случае запроса и 0x0002 в случае ответа.
- Sender hardware address (SHA)
- Физический адрес отправителя.
- Sender protocol address (SPA)
- Логический адрес отправителя.
- Target hardware address (THA)
- Физический адрес получателя. Не требуется при запросе.
- Target protocol address (TPA)
- Логический адрес получателя.
Пример запроса
Если хост с IPv4 адресом 10.10.10.123 и MAC адресом 00:0D:9D:86:59:E2 хочет послать пакет другому хосту с адресом 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), а поле THA не пустое (одноадресный ответ).
Любой узел в той же сети, что и отправитель с получателем, тоже получит запрос (так как он широковещательный) и таким образом добавит в свой кэш информацию об отправителе. Ответ ARP направлен только источнику запроса ARP, поэтому ответ ARP не доступен другим узлам в сети.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Замечание. Длина полей SHA, SPA, THA, TPA зависит от параметров Hardware length и Protocol length соответственно.
Кэш ARP
Эффективность функционирования ARP во многом зависит от кэша ARP (ARP cache), который имеется на каждом хосте. В кэше содержится составленная операционной системой таблица соответствия адресов MAC и IP.
Время жизни записи в кэше оставлено на усмотрение разработчика. По умолчанию может составлять от десятков секунд (например, 20 секунд) до четырёх часов (Cisco IOS).<ref>Шаблон:Cite web</ref>
Обнаружение конфликтов адресов (Address Conflict Detection)
ARP может использоваться для обнаружения конфликтов IP-адресов в локальной сети. RFC 5227 определяет формат запроса ARP Probe с полем SPA, состоящим из всех нулей (адрес IP 0.0.0.0). Перед назначением адреса IP интерфейсу хост может проверить, что этот адрес не используется другим хостом сегмента локальной сети.
ARP-оповещение (ARP Announcement)
ARP-оповещение (Шаблон:Lang-en2) — это пакет (обычно ARP-запрос<ref>Re: [dhcwg] Gratuitous ARP in DHCP vs. IPv4 ACD Draft Шаблон:Webarchive</ref>), содержащий корректную SHA и SPA хоста-отправителя, с TPA, равной SPA. Это не разрешающий запрос, а запрос на обновление кэша ARP других хостов, получающих пакет.
Большинство операционных систем посылает такой пакет при включении хоста в сеть, что позволяет предотвратить ряд проблем. Например, при смене сетевой карты (когда необходимо обновить связь между адресами IP и MAC), такой запрос исправит записи в кэше ARP других хостов в сети.
ARP-оповещения также используются для «защиты» адресов IP в протоколе Zeroconf, описанном в RFC 3927.
Добровольный запрос ARP (Gratuitous ARP)
Специальный случай запроса ARP — запрос собственного адреса IP, он получил название «Gratuitous ARP» (добровольный запрос ARP)Шаблон:Sfn.
В таком запросе адреса IP отправителя и получателя совпадают.
Gratuitous ARP используется в двух целяхШаблон:Sfn:
- оповещение соседних устройств о том, что в сегменте сети появился новый адрес IP;
- проверка свободности адреса IP (используется ли он другим устройством).
См. также
Примечания
Литература
- Шаблон:Ref RFC 826 : Address Resolution Protocol
- Шаблон:Ref RFC 1577 : Classical IP and ARP over ATM
- Шаблон:Ref RFC 2390 : Inverse Address Resolution Protocol
- Шаблон:Ref RFC 5227 : IPv4 Address Conflict Detection
Ссылки
- Шаблон:Ref Gratuitous ARP
- Шаблон:Ref ARP Sequence Diagram // EventStudio 1.0 documentation. — Шаблон:Wayback
- Шаблон:Ref Free ARP tools with source code
- Шаблон:Ref ARP-SK ARP traffic generation tools
- ARP-спуфинг
- Шаблон:Ref How To Clear ARP Cache On Linux or Unix
- Шаблон:Публикация
- Правила чтения таблиц, описывающих структуру заголовков сетевых протоколов
