Структура и принцип работы протокола 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
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
. Примеры выполнения команд приведены ниже:
Стоит обратить внимание на колонку 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