how/network
IP знаешь, а как пакет вообще выйдет из сетевой карты? Сначала надо узнать MAC соседа. ARP делает это одним broadcast’ом.
Ты знаешь IP-адрес соседа в сети - например 192.168.1.20. Но
сетевая карта не умеет работать с IP. Она оперирует [[mac-address|
MAC-адресами]] - это «номер» физического сетевого интерфейса, типа
bb:bb:bb:22:22:22.
Чтобы отправить любой пакет, ноут должен завернуть его в [[ethernet-frame|Ethernet-фрейм]]. А во фрейме на месте получателя нужен MAC, не IP. Откуда его взять, если ты знаешь только IP?
ARP (Address Resolution Protocol) - это и есть «справочное бюро»:
шлёшь broadcast «у кого 192.168.1.20?», тот отвечает «у меня, мой
MAC такой-то». Запоминаешь, дальше шлёшь напрямую.
Нажми ▶ - увидим как этот обмен происходит за 2 пакета.
Host A хочет отправить пакет на 192.168.1.20. По
маске подсети понимает: «это моя сеть, шлю напрямую».
Но в [[ethernet-frame|Ethernet-фрейм]] нужен MAC получателя, а в кеше его нет:
$ ip neigh
# (пусто для 192.168.1.20)
Без MAC фрейм не собрать. Нужно спросить.
итого
Что важно запомнить:
FF:FF:FF:FF:FF:FF. Свитч обязан залить его во все порты, поэтому
все соседи получают запрос - но отвечает только тот, у кого
совпал IPПосмотреть свой ARP-кеш живьём - ip neigh.