Зачем вообще два адреса
Вопрос звучит логично: если у устройства уже есть IP, зачем ему ещё и MAC? Ответ в том, что адреса работают на разных уровнях и решают разные задачи. IP-адрес нужен, чтобы понять направление в масштабах всего интернета. MAC-адрес нужен, чтобы доставить кадр конкретному хосту внутри одного сегмента.
Есть и историческая причина: Ethernet и IP разрабатывались независимо. Ethernet вообще не знает про IP и прекрасно передаёт другие протоколы, а IP работает поверх не только Ethernet, но и Wi-Fi, и мобильных сетей. Разделение уровней позволяет менять одно, не трогая другое, — и именно поэтому Wi-Fi когда-то удалось добавить в сети, не переписывая интернет.
Получается двухэтапная схема. Система знает IP получателя, но чтобы собрать кадр, ей нужен MAC следующего узла на пути — соседа или шлюза. Этот перевод и выполняет ARP.
Как работает запрос
Механизм предельно прямолинейный. Устройство рассылает широковещательный кадр по всей сети с вопросом: «у кого адрес 192.168.1.1, сообщите свой MAC». Кадр получают все устройства сегмента, но отвечает только владелец адреса — уже обычным адресным кадром лично спросившему. Ответ запоминается в таблице, чтобы не спрашивать снова.
Важная деталь: запрос уходит только в свою сеть. Если получатель в другой подсети, устройство даже не пытается узнать его MAC — оно спрашивает адрес шлюза, потому что дальше везти пакет будет он. Поэтому в ARP-таблице обычного компьютера почти всегда мало записей: соседи, с которыми реально был обмен, и шлюз.
Что лежит в таблице
Посмотреть её можно командой arp -a — она одинаково работает и в Windows, и в Linux. Записи бывают динамические, полученные через запрос, и статические, прописанные вручную. Динамические живут недолго — от десятков секунд до нескольких минут, — после чего протухают и запрашиваются заново.
Это и позволяет сети переживать замену оборудования без ручного вмешательства: поменяли роутер — через пару минут все про него узнали. Обратная сторона: пока старая запись жива, связи с новым устройством не будет. Отсюда странное «после замены железки минуту ничего не работало, а потом само починилось» — это протухла запись в ARP.
Gratuitous ARP
Иногда устройство рассылает ARP-ответ, которого никто не спрашивал. Звучит странно, но смысл есть: так оно объявляет сети «этот IP теперь мой, запишите новый MAC». Механизм используется при переключении на резервный сервер, когда общий адрес переезжает с одной машины на другую, и при подключении к сети — чтобы сразу проверить, не занят ли адрес кем-то ещё.
Подмена ARP и почему она так легко удаётся
В протоколе нет никакой проверки подлинности. Кто ответил на запрос — тому и поверили. Больше того, как мы только что выяснили, устройство вообще может прислать ответ по собственной инициативе, и его тоже запишут в таблицу.
Отсюда классическая атака. Злоумышленник в той же сети убеждает ваш компьютер, что MAC шлюза принадлежит ему, а шлюз — что ваш адрес тоже у него. Трафик начинает ходить через чужую машину в обе стороны, при этом внешне всё работает: страницы открываются, скорость почти не падает. Это и есть «человек посередине».
Как это заметить
Самый простой признак — в ARP-таблице два разных IP с одинаковым MAC-адресом, причём один из них шлюз. Ещё симптом: записи в таблице меняются чаще обычного. В домашней сети это проверяется парой команд, в корпоративной обычно есть системы, которые следят за такими вещами сами.
Чем защищаются
Чинить сам ARP бессмысленно — защиты в нём не предусмотрено by design. Поэтому защита строится вокруг: на управляемых коммутаторах включают Dynamic ARP Inspection, который отбрасывает ответы, не совпадающие с данными DHCP; сеть режут на VLAN, чтобы уменьшить круг потенциальных соседей; критичные адреса вроде шлюза прописывают статически.
Но главная защита — шифрование прикладного трафика. Перехватить HTTPS-сессию подменой ARP не выйдет: содержимое останется нечитаемым, видно будет только сам факт обращения к домену. Именно поэтому в публичном Wi-Fi критично не «не подключаться вообще», а не ходить по незащищённым протоколам и не игнорировать предупреждения браузера о сертификате.
Proxy ARP: когда за чужой адрес отвечает роутер
Бывает, что на ARP-запрос отвечает вовсе не владелец адреса, а маршрутизатор — «этот адрес не мой, но шлите мне, я передам». Это proxy ARP, и придуман он был для устройств, которые не умеют работать со шлюзом по умолчанию: им кажется, что вся сеть рядом, а роутер тихо принимает их трафик на себя.
Сегодня механизм чаще встречается в другом виде — при подключении по VPN. Клиент получает адрес из офисной сети, но физически находится далеко; чтобы остальные устройства офиса могли до него достучаться, VPN-сервер отвечает на ARP-запросы за него.
Знать про это стоит по одной причине: proxy ARP отлично маскирует ошибки в настройках. Устройство с неправильной маской продолжает работать, потому что роутер отвечает за все адреса подряд, — и проблема всплывает только через год, когда конфигурацию меняют. Если в ARP-таблице половина разных адресов указывает на один и тот же MAC маршрутизатора, вы наблюдаете именно это.








