Что такое протокол ARP
Что проверяют
Знаете ли вы, что происходит ниже сокета. От разработчика на Go не ждут настройки коммутаторов, ждут понимания, почему первый пакет после простоя уходит с задержкой и почему сервис перестал отвечать после переезда виртуального адреса, хотя код не менялся.
Как отвечать
ARP сопоставляет адрес IPv4 с аппаратным адресом внутри одного сегмента сети. Отправитель рассылает широковещательный запрос, владелец адреса отвечает своим адресом канального уровня, ответ оседает в таблице соседей на несколько минут.
Дальше важны следствия, а не определение:
ARP не выходит за пределы широковещательного домена. Для получателя за маршрутизатором хост выясняет адрес шлюза, а не адрес получателя.
Пакет ARP едет не внутри IP, а прямо в кадре канального уровня, поэтому протокол принято считать пограничным между канальным и сетевым уровнями.
В IPv6 ARP не применяется: там обнаружение соседей поверх ICMPv6 и мультикаст вместо широковещания.
Безопасность: ложный ответ подменяет соответствие адресов и заворачивает трафик на чужую машину. Защита живёт в сети (инспекция ARP на коммутаторе, статические записи), а со стороны приложения остаётся только TLS с проверкой сертификата.
Диагностика: таблица соседей в системных утилитах и дамп трафика. В Go всё это скрыто стандартной библиотекой, руками ARP собирают только в сетевых утилитах через сырые сокеты.
Где спотыкаются
Говорят, что хост всегда выясняет адрес получателя. За пределами своей сети он выясняет адрес шлюза, и дальше кадр переписывается на каждом маршрутизаторе, пока адреса IP остаются прежними.
Считают, что от устаревшей записи спасает увеличенное время жизни кэша. Наоборот: чем дольше живёт запись, тем дольше трафик идёт на исчезнувший адрес. Помогают короткий срок, безусловное оповещение при переезде адреса и очистка записи.
Путают назначение протоколов: называют ARP преобразованием имени в адрес, хотя это DNS, или считают, что в сетях IPv6 работает тот же механизм.