linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
home/linux/how/arp

how/network

Как ARP находит MAC по IP

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 пакета.

step 1/4·00 · нужно отправить, MAC соседа неизвестен
L2 switchhost A192.168.1.10aa:aa:aa:11:11:11ip neigh(empty)host B192.168.1.20bb:bb:bb:22:22:22host C192.168.1.30cc:cc:cc:33:33:33host A знает свой ip и mac, но не знает mac хоста B - фрейм собрать не из чего

§ шаги

  1. Host A хочет отправить пакет на 192.168.1.20. По маске подсети понимает: «это моя сеть, шлю напрямую».

    Но в [[ethernet-frame|Ethernet-фрейм]] нужен MAC получателя, а в кеше его нет:

    bash
    $ ip neigh
    # (пусто для 192.168.1.20)

    Без MAC фрейм не собрать. Нужно спросить.

итого

Что важно запомнить:

  • ARP-запрос - это [[broadcast-domain|L2 broadcast]] на FF:FF:FF:FF:FF:FF. Свитч обязан залить его во все порты, поэтому все соседи получают запрос - но отвечает только тот, у кого совпал IP
  • Ответ идёт точечно (unicast) - свитч уже знает на каком порту ноут, шлёт reply только туда
  • Связку IP↔MAC ноут запоминает в кеше (neighbor-таблица). Когда захочешь снова - не надо снова broadcast'ить
  • ARP работает только внутри одного broadcast-домена. Через роутер он не проходит - там вступает [[routing-table|routing]]
  • В IPv6 ARP заменён на NDP (через ICMPv6), но идея та же

Посмотреть свой ARP-кеш живьём - ip neigh.

§ копнуть в базу знаний

  • mac-addressMAC-адрес - что это и зачем
  • broadcast-domainbroadcast-домен - где работает ARP
  • ethernet-frameEthernet-фрейм - куда подставляется MAC
  • routing-tablerouting table - что делать если IP не в нашей подсети
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки