Address Resolution Protocol или ARP появился в далеком 1982 году.
Ближайшей аналогией работы протокола ARP является обычная школьная перекличка на уроке физкультуры. Учитель называет фамилию, кто-то отзывается. В журнал ставится точка – ученик на месте.
Точно так же работает протокол. Компьютер спрашивает у сети: «У кого адрес 192.168.1.1?» Кто-то отзывается «Я» и называет свой MAC. Эта пара IP-MAC сразу сохраняется в локальном кэше источника запроса. Быстро и лаконично.
У такой простоты есть и обратная сторона медали, но об этом поговорим в следующий раз.
В статье рассмотрим обычную сеть на базе Ethernet и IPv4. В IPv6 вместо ARP работает Neighbor Discovery, а на каналах «точка-точка» разрешение MAC-адреса может вообще не требоваться. Если интересно, пишите в комментариях, разберем IPv6 и Neighbor Discovery в следующих темах.
Начнем с вопроса, который я часто слышу от студентов:
Зачем нужен ARP, если у каждого устройства есть IP-адрес?
Зачем нужен ARP
Разрыв между IP и MAC
Давайте немного вспомним основы технологии Ethernet, которая лежит в основе создания локальных сетей.
Ethernet ничего не знает про IP.
Кадр Ethernet адресуется только по MAC-адресу. Для сетевой карты это будет адрес, зашитый производителем на заводе. Без дополнительных навыков мы даже не сможем его изменить.
MAC-адрес нужен для доставки данных внутри одного широковещательного домена. Коммутаторы и сетевые карты работают именно с MAC'ами.
IP-адрес – это уже штука логическая, назначаемая администратором на сетевом уровне. Он нужен для маршрутизации, чтобы пакет дошел из одной сети до другой.
И тут возникает проблема. IP-пакет от источника упаковывается в Ethernet-кадр. В заголовке кадра есть поля Source MAC и Destination MAC, но нет IP. Значит, отправитель должен знать MAC получателя, чтобы построить кадр.
И вот тут на сцене появляется протокол ARP, который выступает в роли переводчика. Он позволяет динамически определить MAC-адрес следующего узла и заполнить поле Destination MAC в Ethernet-кадре.
Почему не обойтись одним IP
Можно ли было сделать так, чтобы коммутаторы работали с IP вместо MAC? Теоретически это возможно. Но тогда коммутаторы превратились бы в маршрутизаторы. Им пришлось бы анализировать IP-заголовки и строить таблицы маршрутизации внутри своей сети. Звучит не очень логично.
Сегодня Ethernet и IP решают разные задачи. IP определяет путь между сетями, а Ethernet доставляет кадр в пределах локального сегмента. ARP связывает эти два механизма.
Что происходит до ARP
Перед отправкой данных в сеть ядро операционной системы должно ответить на вопрос «Куда передавать пакет?».
Здесь возможны несколько вариантов для ARP:
адрес находится в локальной подсети – ARP ищет MAC самого получателя;
адрес находится в другой сети – ARP ищет MAC следующего шлюза;
маршрута нет – ARP вообще не запускается.
Механизм маршрутизации сначала выбирает выходной интерфейс и IP-адрес следующего узла. Затем ARP сопоставляет этому IP-адресу MAC-адрес. Порядок преобразования адресов описан в RFC 826.
Получаем, что ARP переводит в MAC не обязательно IP конечного получателя. Он ищет IP следующего узла, которому должен быть передан Ethernet-кадр.
Как устроен обмен: Request и Reply
ARP Request или начало переклички
Компьютеру нужно отправить пакет, но MAC получателя неизвестен. Он формирует ARP-запрос со следующими полями:
- Операция: Request (код 1) - Отправитель IP: мой IP - Отправитель MAC: мой MAC - Целевой IP: IP получателя - Целевой MAC: 00:00:00:00:00:00 (не знаем)
И шлет это широковещательным запросом (broadcast): ff:ff:ff:ff:ff:ff. Все устройства в локальной сети получают кадр. Если целевой IP совпадает с адресом хоста, то хост отвечает. Если нет – молча отбрасывает.
Возможен вариант, когда ARP Request является unicast. В этом случае система проверяет адрес уже известного соседа.
ARP Reply или отклик
Устройство с нужным IP формирует ARP-ответ:
- **Операция:** Reply (код 2) - **Отправитель IP:** мой IP - **Отправитель MAC:** мой MAC - **Целевой IP:** IP запрашивавшего - **Целевой MAC:** MAC запрашивавшего
И шлет отклик напрямую запрашивавшему. Потому что в запросе был MAC отправителя, так что отвечать можно сразу на него.
Стенд в GNS3
Дальше будем показывать на стенде в GNS3:

За облаком находится Ubuntu 26.04.
Стенд выбран в таком формате, потому что его просто воспроизвести в домашних условиях. Мне не нравится работать с Cisco 3745 в роли Ethernet-switch, он не слишком стабильно себя ведет, поэтому в сети работает обычный коммутатор.
Если интересно, напишите в комментариях, соберу стенд на базе реальных коммутаторов Cisco 2960/3560/3750 и Eltex MES2324/2424.
Сразу приведу таблицу с IP- и MAC-адресами:
Устройство | Интерфейс | IP-адрес | MAC-адрес |
Виртуальный шлюз Hyper-V | - | 172.25.32.1 | 00:15:5d:6d:4c:3d |
Ubuntu | eth0 | 172.25.47.226/20 | 00:15:5d:67:6f:01 |
vESR | gi 1/0/5 (e0) | 172.25.43.109/20 | 0c:11:31:38:00:00 |
Cisco R2 | gi 0/0 | 172.25.38.168/20 | ca01.0580.0008 |
Начинаем изучать ARP на практике на примере Ubuntu.
ARP и Ubuntu
Начнем с того, что ARP работает только после выбора маршрута. Используем команду ip -4 route get, которая не отправляет пакеты. Она показывает решение ядра о маршрутизации. Поле dev указывает выходной интерфейс, src – выбранный IP-адрес источника, а via – следующий шлюз. Строка cache означает, что показан результат поиска маршрута для указанного адреса.
Синтаксис команды:
ip -4 route get <IP-адрес назначения>
В моем случае:
jetcry@ubuntu-2604:~$ ip -4 route get 172.25.38.168 172.25.38.168 dev eth0 src 172.25.47.226 uid 1000 cache jetcry@ubuntu-2604:~$ ip -4 route get 8.8.8.8 8.8.8.8 via 172.25.32.1 dev eth0 src 172.25.47.226 uid 1000 cache jetcry@ubuntu-2604:~$
В первом случае маршрут должен быть непосредственно через eth0. Во втором появится via 172.25.32.1. Это значит, ARP будет искать MAC шлюза, а не 8.8.8.8. Если интересно, то синтаксис ip route get можно посмотреть в документации.
Просмотр таблицы ARP
Продолжаем современной командой для просмотра таблицы ARP на Ubuntu:
ip neigh
На самом деле дальше возможны два варианта команды:
ip neighbor
и
ip neighbour
Они равнозначны. Я не стал выбирать и ввел только первые символы:
jetcry@ubuntu-2604:~$ ip neigh 172.25.32.1 dev eth0 lladdr 00:15:5d:6d:4c:3d REACHABLE 172.25.43.109 dev eth0 lladdr 0c:11:31:38:00:00 STALE jetcry@ubuntu-2604:~$
Команда показывает две известные Ubuntu пары IP-MAC на интерфейсе eth0. Виртуальный шлюз сейчас находится в состоянии REACHABLE, а vESR в состоянии STALE.
Переходим к расшифровке состояний ARP-кеша.
Состояния ARP на Ubuntu
Жизненный цикл записи Linux имеет следующие состояния:
INCOMPLETE– разрешение еще выполняется, MAC неизвестен;REACHABLE– достижимость недавно подтверждена;STALE– MAC известен, но подтверждение устарело. Запись все еще можно использовать;DELAY– система ждет подтверждения от протоколов верхнего уровня перед проверкой;PROBE– выполняется активная проверка;FAILED– попытки разрешения или проверки закончились неудачно;PERMANENT– статическая запись.
По умолчанию базовое значение REACHABLE составляет 30 секунд, а фактический интервал выбирается в пределах от 15 до 45 секунд. Первая проверка после перехода к проверке соседа обычно откладывается на пять секунд.
Просмотрим таймеры Linux командами:
sysctl net.ipv4.neigh.eth0.base_reachable_time_ms
и
sysctl net.ipv4.neigh.eth0.delay_first_probe_time
В моем случае:
jetcry@ubuntu-2604:~$ sysctl net.ipv4.neigh.eth0.base_reachable_time_ms net.ipv4.neigh.eth0.base_reachable_time_ms = 30000 jetcry@ubuntu-2604:~$ sysctl net.ipv4.neigh.eth0.delay_first_probe_time net.ipv4.neigh.eth0.delay_first_probe_time = 5 jetcry@ubuntu-2604:~$
Уточню, что base_reachable_time_ms – это не время жизни записи в таблице, а период, в течение которого достижимость считается подтвержденной.
Покажем смену состояний записи ARP в реальном времени командой:
ip -4 monitor neigh
Результат:
jetcry@ubuntu-2604:~$ ip -4 monitor neigh 172.25.32.1 dev eth0 lladdr 00:15:5d:6d:4c:3d STALE 172.25.32.1 dev eth0 lladdr 00:15:5d:6d:4c:3d PROBE 172.25.32.1 dev eth0 lladdr 00:15:5d:6d:4c:3d REACHABLE
Результаты изменения состояния будут отображаться в течение времени. Я прервал команду примерно через пару минут.
Запись шлюза последовательно перешла из STALE в PROBE. После успешной проверки стала REACHABLE, потому что Linux снова подтвердил доступность соседа.
ARP – невидимая основа ICMP
Для следующей диагностики ARP совместно с ICMP настраиваю два подключения к виртуальной машине Ubuntu через PowerShell и SSH. В первом окне я буду выполнять команды. Второе окно будет выводить результаты диагностики через tcpdump. Команда во втором окне не будет меняться:
sudo tcpdump -ni eth0 -e 'arp or icmp'
Здесь:
-n запрещает разрешение имен;
-i eth0 выбирает интерфейс;
-e показывает Ethernet-заголовок и MAC-адреса.
Выполняю из первого окна пинг до IP-адреса Cisco:
PING 172.25.38.168 (172.25.38.168) 56(84) bytes of data. 64 bytes from 172.25.38.168: icmp_seq=1 ttl=255 time=22.8 ms 64 bytes from 172.25.38.168: icmp_seq=2 ttl=255 time=10.2 ms … jetcry@ubuntu-2604:~$
Фрагмент диагностики tcpdump:
jetcry@ubuntu-2604:~$ sudo tcpdump -ni eth0 -e 'arp or icmp' … 10:09:48.068533 00:15:5d:67:6f:01 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 172.25.38.168 tell 172.25.47.226, length 28 10:09:48.081095 ca:01:05:80:00:08 > 00:15:5d:67:6f:01, ethertype ARP (0x0806), length 60: Reply 172.25.38.168 is-at ca:01:05:80:00:08, length 46 10:09:48.081128 00:15:5d:67:6f:01 > ca:01:05:80:00:08, ethertype IPv4 (0x0800), length 98: 172.25.47.226 > 172.25.38.168: ICMP echo request, id 47418, seq 1, length 64 10:09:48.091298 ca:01:05:80:00:08 > 00:15:5d:67:6f:01, ethertype IPv4 (0x0800), length 98: 172.25.38.168 > 172.25.47.226: ICMP echo reply, id 47418, seq 1, length 64
Видим, что перед ICMP работает ARP.
При отсутствии готовой ARP-записи ICMP-пакет ожидает завершения ARP-обмена. В моем примере от отправки ARP Request до получения Reply прошло около 12,6 мс, после чего ICMP Echo Request был отправлен практически сразу.
Получаем, что первый пинг может быть медленнее остальных или вообще не дойти.
После этого проверяем записи:
jetcry@ubuntu-2604:~$ ip neigh 172.25.32.1 dev eth0 lladdr 00:15:5d:6d:4c:3d DELAY 172.25.43.109 dev eth0 lladdr 0c:11:31:38:00:00 STALE 172.25.38.168 dev eth0 lladdr ca:01:05:80:00:08 STALE jetcry@ubuntu-2604:~$
В таблице появилась новая запись, соответствующая нашей Cisco.
Полезные команды при работе с ARP
Начнем с команды удаления ARP-записи:
sudo ip -4 neigh del <IP-адрес> dev <интерфейс>
Удаляю запись Cisco:
jetcry@ubuntu-2604:~$ sudo ip -4 neigh del 172.25.38.168 dev eth0
Проверяю:
jetcry@ubuntu-2604:~$ ip neigh 172.25.32.1 dev eth0 lladdr 00:15:5d:6d:4c:3d REACHABLE 172.25.43.109 dev eth0 lladdr 0c:11:31:38:00:00 STALE jetcry@ubuntu-2604:~$
Можно использовать команду:
sudo ip neigh flush all
Но надо учитывать, что она затрагивает все интерфейсы и обе версии IP.
Затем установим статическую запись ARP. Для этого нам потребуется утилита arp из пакета net-tools, который можно установить через:
sudo apt update sudo apt install net-tools
Синтаксис команды:
sudo arp -s <IP устройства> <MAC устройства>
В моем случае для Cisco:
sudo arp -s 172.25.38.168 ca:01:05:80:00:08
После этого:
jetcry@ubuntu-2604:~$ ip neigh 172.25.32.1 dev eth0 lladdr 00:15:5d:6d:4c:3d REACHABLE 172.25.43.109 dev eth0 lladdr 0c:11:31:38:00:00 STALE 172.25.38.168 dev eth0 lladdr ca:01:05:80:00:08 PERMANENT jetcry@ubuntu-2604:~$
Обратите внимание на изменение статуса у записи на PERMANENT.
Следующая команда позволит проверить соседство только через ARP.
Сначала установим утилиту arping:
sudo apt install arping
После этого вводим саму команду:
sudo arping -c 2 -I eth0 172.25.38.168
Использование sudo здесь не ошибка, потому что arping формирует ARP-кадры напрямую. Ему требуется привилегия ядра Linux CAP_NET_RAW, которая разрешает процессу самостоятельно формировать сетевые пакеты и кадры. Она нужна arping, поскольку программа отправляет ARP-запросы напрямую, минуя обычные сетевые механизмы приложений.
На моем стенде в первом окне ввожу команду:
jetcry@ubuntu-2604:~$ sudo arping -c 2 -I eth0 172.25.38.168 ARPING 172.25.38.168 60 bytes from ca:01:05:80:00:08 (172.25.38.168): index=0 time=1.953 msec 60 bytes from ca:01:05:80:00:08 (172.25.38.168): index=1 time=10.057 msec --- 172.25.38.168 statistics --- 2 packets transmitted, 2 packets received, 0% unanswered (0 extra) rtt min/avg/max/std-dev = 1.953/7.134/10.057/3.673 ms jetcry@ubuntu-2604:~$
Диагностика во втором окне:
10:17:40.805995 00:15:5d:67:6f:01 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 58: Request who-has 172.25.38.168 tell 172.25.47.226, length 44 10:17:40.807927 ca:01:05:80:00:08 > 00:15:5d:67:6f:01, ethertype ARP (0x0806), length 60: Reply 172.25.38.168 is-at ca:01:05:80:00:08, length 46 10:17:41.807188 00:15:5d:67:6f:01 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 58: Request who-has 172.25.38.168 tell 172.25.47.226, length 44 10:17:41.817206 ca:01:05:80:00:08 > 00:15:5d:67:6f:01, ethertype ARP (0x0806), length 60: Reply 172.25.38.168 is-at ca:01:05:80:00:08, length 46
За две секунды arping отправил два широковещательных ARP Request и получил от Cisco два адресных Reply.
Переходим к Eltex.
ARP и Eltex vESR
Просмотр своего MAC-адреса
Для просмотра MAC-адресов своих интерфейсов воспользуемся командой:
sh int status
Фрагмент вывода на моем vESR:
vesr# sh int status Interface Admin Link MTU MAC address Last change Mode State State (d,h:m:s) -------------------- ---------- ----- ----- ----------------- ------------- ------------ gi1/0/5 Up Up 1500 0c:11:31:38:00:00 00,00:05:55 routerport … vesr#
Таблица ARP
Затем проверяем таблицу ARP:
show arp
На моем vESR:
vesr# show arp Interface IP address MAC address State Age(min) --------------- --------------- ----------------- --------------- ---------- gi1/0/5 172.25.32.1 00:15:5d:6d:4c:3d stale -- gi1/0/5 172.25.43.109 0c:11:31:38:00:00 -- -- gi1/0/5 172.25.47.226 00:15:5d:67:6f:01 stale --
ARP для конкретного IP-адреса
Запись для конкретного IP-адреса:
vesr# show arp ip-address 172.25.47.226 Interface IP address MAC address State Age(min) --------------- --------------- ----------------- --------------- ---------- gi1/0/5 172.25.47.226 00:15:5d:67:6f:01 stale --
Удаление записи ARP
Удалим запись о MAC-адресе для IP 172.25.47.226 (моя Ubuntu):
clear arp-cache ip-address 172.25.47.226
Проверим таблицу ARP для этого адреса:
vesr# clear arp-cache ip-address 172.25.47.226 vesr# show arp ip-address 172.25.47.226 Interface IP address MAC address State Age(min) --------------- --------------- ----------------- --------------- ---------- gi1/0/5 172.25.47.226 -- failed -- vesr#
Обратите внимание на изменившийся статус записи – failed.
Статическая запись ARP
Создадим статическую запись командой:
ip arp <IP-адрес> <MAC-адрес> <тип интерфейса> <номер интерфейса>
В моем случае:
configure ip arp 172.25.47.226 00:15:5d:67:6f:01 gigabitethernet 1/0/5 end commit confirm
После этого обратите внимание на state:
vesr# sh arp Interface IP address MAC address State Age(min) --------------- --------------- ----------------- --------------- ---------- gi1/0/5 172.25.32.1 00:15:5d:6d:4c:3d stale -- gi1/0/5 172.25.43.109 0c:11:31:38:00:00 -- -- gi1/0/5 172.25.47.226 00:15:5d:67:6f:01 permanent -- vesr#
Запись получает статус permanent.
Ситуация полностью повторяет таблицу состояний ARP на Ubuntu.
Таймер ARP
Можно посмотреть таймер для ARP на интерфейсе командой:
show arp configuration <тип интерфейса> <номер интерфейса>
У меня:
vesr# show arp configuration gigabitethernet 1/0/5 Globally configured ARP reachable time is 160000 msec Interface ARP reachable time, msec --------------- ------------------------- gi1/0/5 160000 vesr#
Таймер установлен в значение 160 секунд.
Как сказано в документации, установить таймер ARP на данном интерфейсе можно командой
vesr(config)# ip arp reachable-time <время таймера в мс>
Установим таймер на 20 секунд:
configure ip arp reachable-time 20000 end commit confirm
Что видит Ubuntu, когда vESR пингует Cisco?
Я удалил статическую запись ARP для Cisco и запустил пинг до нее. Посмотрим, что отобразится на Ubuntu:
vesr#ping 172.25.38.168 !!!!! vesr#
На Ubuntu видим:
jetcry@ubuntu-2604:~$ sudo tcpdump -ni eth0 -e 'arp or icmp' tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 10:37:37.269401 0c:11:31:38:00:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 172.25.38.168 tell 172.25.43.109, length 46
Больше ничего нет. Следующие пакеты целенаправленно шли на Cisco.
Мы закончили рассматривать основные команды на vESR, переходим к следующему вендору.
ARP и Cisco
Просмотр MAC интерфейса
Посмотреть MAC интерфейса можно с помощью:
show interfaces GigabitEthernet0/0 | include addr
На моем 7200:
R2#show interfaces GigabitEthernet0/0 | include addr Hardware is 82543, address is ca01.0580.0008 (bia ca01.0580.0008) R2#
Таблица ARP
Команда для просмотра IPv4-записей в таблице:
show ip arp
Команда show arp исторически может отображать записи и для других сетевых протоколов.
R2#show ip arp Protocol Address Age (min) Hardware Addr Type Interface Internet 172.25.32.1 30 0015.5d6d.4c3d ARPA GigabitEthernet0/0 Internet 172.25.38.168 - ca01.0580.0008 ARPA GigabitEthernet0/0 Internet 172.25.47.226 7 0015.5d67.6f01 ARPA GigabitEthernet0/0 R2#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 172.25.32.1 30 0015.5d6d.4c3d ARPA GigabitEthernet0/0 Internet 172.25.38.168 - ca01.0580.0008 ARPA GigabitEthernet0/0 Internet 172.25.47.226 7 0015.5d67.6f01 ARPA GigabitEthernet0/0 R2#
Поля в выводе команд:
- Protocol – всегда Internet (IPv4).
- Address – IP.
- Age – время с момента последнего обновления (в минутах). Пустое поле (-) означает адрес собственного интерфейса или статическую запись.
- Hardware Addr – MAC.
- Type – ARPA (стандартный Ethernet). Может быть SNAP, SAP и другие, но в современных сетях почти всегда ARPA.
- Interface – через какой интерфейс видим.
ARP для конкретного IP-адреса
Если я хочу посмотреть запись для конкретного IP-адреса:
R2#show ip arp 172.25.47.226 Protocol Address Age (min) Hardware Addr Type Interface Internet 172.25.47.226 7 0015.5d67.6f01 ARPA GigabitEthernet0/0
Статическая запись ARP
Настроим статическую запись на уровне конфигурирования:
configure terminal arp <IP-адрес> <MAC-адрес в формате XXXX.XXXX.XXXX> arpa
В моем случае:
configure terminal arp 172.25.47.226 0015.5d67.6f01 arpa
Обратите внимание, как изменится вывод команды sh arp:
R2#sh arp Protocol Address Age (min) Hardware Addr Type Interface …. Internet 172.25.47.226 - 0015.5d67.6f01 ARPA
После этого при пинге с Cisco на Ubuntu нет предварительного широковещательного запроса в сеть:
R2#ping 172.25.47.226 !!!!! R2#
Первые пакеты на Ubuntu:
jetcry@ubuntu-2604:~$ sudo tcpdump -ni eth0 -e 'arp or icmp' 10:58:28.768369 ca:01:05:80:00:08 > 00:15:5d:67:6f:01, ethertype IPv4 (0x0800), length 114: 172.25.38.168 > 172.25.47.226: ICMP echo request, id 3, seq 0, length 80 10:58:28.768396 00:15:5d:67:6f:01 > ca:01:05:80:00:08, ethertype IPv4 (0x0800), length 114: 172.25.47.226 > 172.25.38.168: ICMP echo reply, id 3, seq 0, length 80
Удаление записи ARP
Удалим статическую запись командой:
no arp 172.25.47.226 0015.5d67.6f01 arpa
Проверяем таблицу ARP:
R2(config)#no arp 172.25.47.226 0015.5d67.6f01 arpa R2(config)#do sh arp Protocol Address Age (min) Hardware Addr Type Interface Internet 172.25.32.1 7 0015.5d6d.4c3d ARPA GigabitEthernet0/0 Internet 172.25.38.168 - ca01.0580.0008 ARPA GigabitEthernet0/0 Internet 172.25.43.109 5 0c11.3138.0000 ARPA GigabitEthernet0/0 R2(config)#
Больше нет записи об этом MAC-адресе.
Она появится, если мы снова запустим пинг до Ubuntu:
R2#ping 172.25.47.226 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.25.47.226, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 8/19/32 ms R2#sh arp Protocol Address Age (min) Hardware Addr Type Interface Internet 172.25.32.1 8 0015.5d6d.4c3d ARPA GigabitEthernet0/0 Internet 172.25.38.168 - ca01.0580.0008 ARPA GigabitEthernet0/0 Internet 172.25.43.109 5 0c11.3138.0000 ARPA GigabitEthernet0/0 Internet 172.25.47.226 0 0015.5d67.6f01 ARPA GigabitEthernet0/0
После удаления записи Cisco сначала пришлось определить MAC-адрес Ubuntu с помощью ARP. Пока выполнялся ARP-обмен, первая попытка ping завершилась без ответа и была обозначена точкой. Следующие четыре попытки выполнялись уже с готовой ARP-записью.
Таймер ARP
Посмотреть таймаут интерфейса можно командой:
show interfaces GigabitEthernet0/0 | include ARP
У меня:
R2#show interfaces GigabitEthernet0/0 | include ARP Encapsulation ARPA, loopback not set ARP type: ARPA, ARP Timeout 04:00:00
Изменить таймер на интерфейсе можно через несколько команд:
configure terminal interface GigabitEthernet0/0 arp timeout <значение таймера в секундах> end
По умолчанию Cisco использует 14 400 секунд, то есть целых четыре часа. Cisco предупреждает, что слишком короткий таймер увеличивает ARP-трафик. Синтаксис просмотра, очистки, статических записей приведен в официальном руководстве Cisco.
В качестве примера изменим таймаут на 20 секунд:
configure terminal interface GigabitEthernet0/0 arp timeout 20 end
Итоги
Протокол ARP – это фундамент работы сетей на IPv4. Он решает только одну задачу, переводит IP в MAC. На нем работает все, что упаковывается в кадры Ethernet.
Перед каждым первым пакетом к новому соседу или шлюзу система делает одно и то же:
1. Смотрит в ARP-кэш.
2. Если нет записи – шлет ARP Request.
3. Ждет ARP Reply.
4. Только потом отправляет ICMP, TCP, UDP, … (нужное выбрать).
В нашем примере ICMP выступает просто в роли полезной нагрузки, которую ARP позволяет доставить.
Еще отмечу, что запись в кэше ARP живет не вечно. У каждой платформы свой взгляд на то, сколько именно времени отвести на каждую строчку в ARP-таблице.
Конечно, таймеры разных платформ нельзя сравнивать напрямую. В Linux значение base_reachable_time_ms определяет период подтвержденной достижимости, но не время удаления записи. Eltex задает базовый интервал обновления динамической записи, Cisco изначально использует четырехчасовой тайм-аут ARP-кэша.
Такие значения на сетевых устройствах выбраны из-за того, что частая очистка ARP-таблицы будет создавать лишний широковещательный трафик.
ARP – это простой и быстрый протокол. Но у его простоты есть и обратная сторона.
Вспомните школьную перекличку. Учитель не проверяет, кто отозвался. В следующей статье мы разберем ситуацию, когда на перекличке появится самозванец.

