Структура и принцип работы протокола ARP

4 minute read

Маршрутизаторы передают пакеты по какому-либо логическому пути, который состоит из определённого количества каналов передачи данных, “читая” и “взаимодействуя” с сетевыми адресами. Пакеты, инкапсулированные в кадры (фреймы), передаются через канальную среду. Фреймы содержат уникальные идентификаторы канальной среды (например, MAC-адреса) для определения адресата источника и назначения в канальной среде.

Устройствам в канальной среде необходим способ определения идентификаторов канальной среды соседей для того чтобы фреймы могли быть отправлены корректному адресату назначения. Одним из таких механизмов определения для протокола IP версии 4 является протокол ARP - Address Resolution Protocol, описанный в RFC 826.

1. Основы работы протокола ARP

На рисунке 1 изображён процесс работы протокола ARP

Процесс работы протокола ARP

Устройство, которому необходимо узнать идентификатор канальной среды другого устройства, создает пакет ARP Request. Данный запрос содержит в себе IP-адрес устройства для которого необходимо узнать идентификатор канального среды (Target), а также данные канальной среды (в данном случае MAC-адрес) и IP-адрес устройства, которое данный запрос сформировало (Source).

Пакет ARP Request инкапсулируется в фрейм. В качестве MAC-адреса источника выступает сам источник, в качестве MAC-адреса назначения используется broadcast адрес (FFFF.FFFF.FFFF).

Вот как выглядит ARP Request если захватить его с помощью wireshark

ARP Request

Подробно рассмотреть каждое поле запроса ARP можно скачав данный дамп

Broadcast адрес используется для того чтобы все узлы в канальной среде получили данный фрейм и обработали инкапсулированный внутри пакет. Все устройства, за исключением адресата назначения, поймут, что данный пакет не предназначается для них и попросту отбросят его. Устройство назначения обработает пакет и в ответ отправит ARP Reply адресату источника. Внутри ARP Reply будет содержаться как раз-таки MAC-адрес адресата назначения.

На следующем изображении можно увидеть как выглядит ARP Reply

ARP Reply

Также скачав дамп с трафиком можно более подробно увидеть каждое поле пакета

2. Структура полей протокола ARP

Протокол ARP имеет следующие поля:

Формат протокола ARP

Стоит напомнить, что формат протокола обычно показывается в разрезе 4 байт. Из-за этого часть информации из полей протокола может быть показана как часть следующих 4 байт (на примере Hardware и IP адресации).

Hardware Type - 16-битное поле, определяющее “тип канальной среды”. Наиболее часто используемые типы представлены в таблице ниже

Номер Тип среды
1 Ethernet
15 Frame Relay
17 HDLC
18 Fiber Channel
20 Serial Link

Но основную часть всё же занимает именно Ethernet.

Hardware Type

Protocol Type - 16-битное поле, определяющее протокол сетевого уровня, который отправитель связывает с идентификатором канала передачи данных. Для протокола IP версии 4 значение данного поля равно 0x0800

Protocol Type

Hardware Address Length - 8-битное поле, определяющее длину идентификатора канальной среды в байтах. MAC-адреса имеет длину 48 бит или 6 байт.

Hardware Address Length

Protocol Address Length - 8-битное поле, определяющее длину адреса сетевого уровня в байтах. IP-адреса имеет длину 32 бита или 4 байта.

Protocol Address Length

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
Opcode

Последние 20 байт приходятся на адресацию канальной среды и сетевого уровня источника и назначения запроса (MAC-адрес 6 байт * 2 + IP-адрес 4 байт * 2 = 20)

MAC + IP адреса

3. Практика

Посмотрим небольшую практику на примере следующей схемы:

Схема №1

Для того чтобы отследить пакеты arp на устройствах cisco можно воспользоваться утилитой debug. Для этого необходимо в привилегированном режиме выполнить команду debug arp

1
2
3
4
5
6
7
8
9
10
Router# debug arp
ARP packet debugging is on
Router#
*Oct  4 18:48:11.317: IP ARP: rcvd req src 185.14.32.135 0050.0000.0200, dst 185.14.32.1 GigabitEthernet0/0
*Oct  4 18:48:11.317: IP ARP: creating entry for IP address: 185.14.32.135, hw: 0050.0000.0200
*Oct  4 18:48:11.317: IP ARP: sent rep src 185.14.32.1 5000.0003.0000,
                 dst 185.14.32.135 0050.0000.0200 GigabitEthernet0/0
Router# undebug all
All possible debugging has been turned off
Router#

Важно: команда debug очень требовательна к ресурсам, следует аккуратно использовать её на производстве. При неаккуратном задании параметров можно потерять доступ к устройству из-за постоянного спама сообщений в консоль.

Для просмотра таблицы ARP на устройствах cisco можно выполнить команду show arp в привилегированном режиме. Для операционной системы Windows можно выполнить команду arp -a, а для Linux команда выглядит arp -vn. Примеры выполнения команд приведены ниже:

Cisco ARP table
Windows ARP table
Linux ARP table

Стоит обратить внимание на колонку Age в выводе команды на маршрутизаторе. Данная колонка показывает через какое количество времени данная запись будет удалена из таблицы ARP. Это сделано для того чтобы предотвратить перегрузку таблицы ARP устаревшими записями.

По умолчанию устройства cisco хранятся информацию у себя в таблице ARP в течение 4 часов, это можно проверить командой show interface <имя_интерфейса> | include ARP

1
2
3
4
Router# show int gi0/0 | inc ARP
  Encapsulation ARPA, loopback not set
  ARP type: ARPA, ARP Timeout 04:00:00
Router#

Поведение по умолчанию можно изменить, выполнив следующий набор команд (настройка актуальна для отдельного интерфейса)

1
2
3
4
5
6
7
8
9
10
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 кэша можно выполнить команду

1
Router# clear arp-cache

В следующий раз я вкратце рассмотрю другие разновидности протокола ARP: Proxy ARP, Gratuitous ARP, Reverse ARP.

P.S. вся информация представленная здесь используется исключительно в образовательных целях. Все совпадения с реальными объектами, адресами, именами и т.д. случайна и не несёт цели получить от этого выгоду или причинить кому-либо вред.

Back to top ↑

Leave a comment