- Протокол ARP¶
- Алгоритм работы ARP протокола:¶
- Формат протокола¶
- ARP-request¶
- Заголовок кадра (L2)¶
- Протокол ARP (L3-L7)¶
- Общий формат ARP протокола¶
- ARP-reply¶
- Заголовок кадра (L2)¶
- Протокол ARP (L3-L7)¶
- По Итогу¶
- Пример arp дампа в wireshark¶
- Структура и принцип работы протокола ARP
- 1. Основы работы протокола ARP
- 2. Структура полей протокола ARP
- 3. Практика
Протокол ARP¶
Служебный протокол канального уровня. Вспомогательный протокол, предназначен для установления MAC адреса при известном ip устройства в броадкаст домене. Либо при определении MAC адреса шлюза, для отправки кадра на dgw при маршрутизации. Возможны варианты PROXY-ARP, Gratuitous ARP, но тут их пока рассматривать не буду, тут просто рассмотрю совсем базовые вещи. По сути, MAC адрес необходим для дальнейшей формирования кадра для его дальнейшей коммутации или маршрутизации.
Алгоритм работы ARP протокола:¶
- ARP-request — Запрашививается MAC адрес по известному ip адресу, при этом сообщаются «реквизиты отправителя» (mac и ip адрес отправителя)
- ARP-reply — Тот ip адрес(хотя и не всегда), которому отправлялся запрос отвечает отправителю ARP-запроса и сообщает свой MAC адрес.
Аналогия Проведу небольшую аналогию.
«Аналогия ARP-request»: «Эй, Я Иванов, мой номер телефона 232-323. Скажи, Козлов, какой у тебя номер телефона?», кричит Иванов в большой комнате.
«Аналогия ARP-reply»: «эй Иванов, Я Козлов, мой номер телефона 323-232», кричит Козлов Иванову.
- большая комната — броадкаст домен
- Фамилия: Иванов — это ip адрес отправителя
- Фамилия: Козлов — это ip адрес получателя
- номера телефонов — это MAC адреса.
Формат протокола¶
ARP-request¶
Запрос MAС адреса, соответствующий определенному ip адресу.
Заголовок кадра (L2)¶
При запросе о МАС адресе отправляется ARP запрос, где в заголовке кадра указывается:
- DA: броадкаст MAC адрес (ff:ff:ff:ff:ff:ff) — адрес назначения (всем)
- SA: MAС адрес источника (60:a4:4c:a9:b4:b0) — в данном случае
- Type: 0x806 — это номер, который означает ARP протокол.
В поле «Type» указывается,какой протокол находится на следующем(сетевом) уровне.
Протокол ARP (L3-L7)¶
Собственно как такового «классического» заголовка Layer 3 у ARP-a нет, а сразу идет сам ARP протокол.
В данном случае ARP-request
Общий формат ARP протокола¶
1. Hardware type¶
тип протокола канального уровня
В нашем случае, Hardware type = 1 — это номер, соответствующий протоколу Ethernet.
2. Protocol type¶
тип протокола сетевого уровня
В нашем случае, Protocol type = 0x0800 - это номер, соответствующий ipv4.
3. Hardware size¶
Размер адреса канального уровня
В нашем случае, Hardware size - это MAC адрес, соответственно это
4. Protocol size¶
Размер адреса сетевого уровня
В нашем случае, Protocol size - это ipv4 адрес, соответственно это
5. Opcode¶
6. Sender MAC Address¶
7. Sender IP Address¶
8. Target MAC Address¶
9. Target IP address¶
В данном случае это адрес
ARP-reply¶
Заголовок кадра (L2)¶
При запросе о МАС адресе отправляется ARP запрос, где в заголовке кадра указывается:
- DA: MAC адрес назначения (60:a4:4c:a9:b4:b0) - адрес назначения, тому кто отправлял ARP запрос
- SA: MAС адрес источника (00:00:5e:00:01:01)
- Type: 0x806 - это номер, который означает ARP протокол.
В поле "Type" указывается, какой протокол находится на следующем(сетевом) уровне.
Протокол ARP (L3-L7)¶
1. Hardware type¶
тип протокола канального уровня
2. Protocol type¶
тип протокола сетевого уровня
3. Hardware size¶
Размер адреса канального уровня
В нашем случае, Hardware size - это MAC адрес, соответственно это
4. Protocol size¶
Размер адреса сетевого уровня
В нашем случае, Protocol size - это ipv4 адрес, соответственно это
5. Opcode¶
6. Sender MAC Address¶
7. Sender IP Address¶
8. Target MAC Address¶
9. Target IP address¶
Padding¶
Заполнитель, в данном случае равен 18 byte - используется для увеличения кадра до минимальной длины 64 byte Т.е. размер кадра равен:
- заголовoк кадра = 14 bytes
- ARP = 28 bytes
- Padding = 18 bytes
- FCS - frame control summ = 4 bytes
- ИТОГО = 64 bytes
Примечание: FCS - не показывается при дампе.
По Итогу¶
В конечном счете отправитель узнает MAC адрес на который ему нужно будет отправлять и использует в дальнейшем для формирования заголовка кадра, который отправляется на известный ip адрес
на обоих Хостах добавляются ARP-записи, об изученной связке MAC-IP в ARP таблицу вида:
Пример arp дампа в wireshark¶
Весьма неплохая статья на эту тему
Структура и принцип работы протокола ARP
Маршрутизаторы передают пакеты по какому-либо логическому пути, который состоит из определённого количества каналов передачи данных, “читая” и “взаимодействуя” с сетевыми адресами. Пакеты, инкапсулированные в кадры (фреймы), передаются через канальную среду. Фреймы содержат уникальные идентификаторы канальной среды (например, MAC-адреса) для определения адресата источника и назначения в канальной среде.
Устройствам в канальной среде необходим способ определения идентификаторов канальной среды соседей для того чтобы фреймы могли быть отправлены корректному адресату назначения. Одним из таких механизмов определения для протокола IP версии 4 является протокол ARP - Address Resolution Protocol, описанный в RFC 826.
1. Основы работы протокола ARP
На рисунке 1 изображён процесс работы протокола ARP
Устройство, которому необходимо узнать идентификатор канальной среды другого устройства, создает пакет ARP Request. Данный запрос содержит в себе IP-адрес устройства для которого необходимо узнать идентификатор канального среды ( Target ), а также данные канальной среды (в данном случае MAC-адрес) и IP-адрес устройства, которое данный запрос сформировало ( Source ).
Пакет ARP Request инкапсулируется в фрейм. В качестве MAC-адреса источника выступает сам источник, в качестве MAC-адреса назначения используется broadcast адрес ( FFFF.FFFF.FFFF ).
Вот как выглядит ARP Request если захватить его с помощью wireshark
Подробно рассмотреть каждое поле запроса ARP можно скачав данный дамп
Broadcast адрес используется для того чтобы все узлы в канальной среде получили данный фрейм и обработали инкапсулированный внутри пакет. Все устройства, за исключением адресата назначения, поймут, что данный пакет не предназначается для них и попросту отбросят его. Устройство назначения обработает пакет и в ответ отправит ARP Reply адресату источника. Внутри ARP Reply будет содержаться как раз-таки MAC-адрес адресата назначения.
На следующем изображении можно увидеть как выглядит ARP Reply
Также скачав дамп с трафиком можно более подробно увидеть каждое поле пакета
2. Структура полей протокола ARP
Протокол ARP имеет следующие поля:
Стоит напомнить, что формат протокола обычно показывается в разрезе 4 байт. Из-за этого часть информации из полей протокола может быть показана как часть следующих 4 байт (на примере Hardware и IP адресации).
Hardware Type - 16-битное поле, определяющее “тип канальной среды”. Наиболее часто используемые типы представлены в таблице ниже
Номер | Тип среды |
---|---|
1 | Ethernet |
15 | Frame Relay |
17 | HDLC |
18 | Fiber Channel |
20 | Serial Link |
Но основную часть всё же занимает именно Ethernet.
Protocol Type - 16-битное поле, определяющее протокол сетевого уровня, который отправитель связывает с идентификатором канала передачи данных. Для протокола IP версии 4 значение данного поля равно 0x0800
Hardware Address Length - 8-битное поле, определяющее длину идентификатора канальной среды в байтах. MAC-адреса имеет длину 48 бит или 6 байт.
Protocol Address Length - 8-битное поле, определяющее длину адреса сетевого уровня в байтах. IP-адреса имеет длину 32 бита или 4 байта.
Operation - 16-битное поле, которое определяет какой тип пакета ARP используется:
- ARP Request - 1
- ARP Reply - 2
- Reverse ARP Request - 3
- Reverse ARP Reply - 4
- Inverse ARP Request - 8
- Inverse ARP Reply - 9
Последние 20 байт приходятся на адресацию канальной среды и сетевого уровня источника и назначения запроса (MAC-адрес 6 байт * 2 + IP-адрес 4 байт * 2 = 20)
3. Практика
Посмотрим небольшую практику на примере следующей схемы:
Для того чтобы отследить пакеты arp на устройствах cisco можно воспользоваться утилитой debug . Для этого необходимо в привилегированном режиме выполнить команду debug arp
Стоит обратить внимание на колонку Age в выводе команды на маршрутизаторе. Данная колонка показывает через какое количество времени данная запись будет удалена из таблицы ARP. Это сделано для того чтобы предотвратить перегрузку таблицы ARP устаревшими записями.
По умолчанию устройства cisco хранятся информацию у себя в таблице ARP в течение 4 часов, это можно проверить командой show interface | include ARP
Router# show int gi0/0 | inc ARP Encapsulation ARPA, loopback not set ARP type: ARPA, ARP Timeout 04:00:00 Router#
Поведение по умолчанию можно изменить, выполнив следующий набор команд (настройка актуальна для отдельного интерфейса)
Router# conf t Enter configuration commands, one per line. End with CNTL/Z. Router(config)# interface gi0/0 Router(config-if)# arp timeout 1800 Router(config-if)# end *Oct 4 20:56:43.122: %SYS-5-CONFIG_I: Configured from console by console Router# show int gi0/0 | inc ARP Encapsulation ARPA, loopback not set ARP type: ARPA, ARP Timeout 00:30:00 Router#
Для очистки ARP кэша можно выполнить команду
В следующий раз я вкратце рассмотрю другие разновидности протокола ARP: Proxy ARP , Gratuitous ARP , Reverse ARP .
P.S. вся информация представленная здесь используется исключительно в образовательных целях. Все совпадения с реальными объектами, адресами, именами и т.д. случайна и не несёт цели получить от этого выгоду или причинить кому-либо вред.
Updated: October 2, 2021