L2 ARP-таблица: как IP находит MAC
IP-адрес — это ещё не всё. Внутри одной сети данные бегают не по IP, а по MAC-адресам. А связывает одно с другим маленький, но незаменимый протокол — ARP. Если ARP сломался — «пинг не идёт», хотя IP настроен верно. Это тема, по которой заваливают джунов на собеседованиях и которая всплывает в каждой второй аварии. Разберём по косточкам.
- Чем MAC-адрес отличается от IP-адреса и зачем нужны оба
- Как кадр и пакет вкладываются друг в друга («матрёшка» инкапсуляции)
- Как работает ARP: запрос («кто такой …?») и ответ — вплоть до полей пакета
- Что происходит с MAC-адресами, когда пакет идёт через шлюз — самое важное озарение урока
- Как читать ARP-таблицу на Windows, Linux и Cisco — и что значат её состояния
- Сколько живут записи и почему «само починилось через пару минут»
- Что такое gratuitous ARP и proxy ARP
- Два таймера, которые не дружат (ARP vs MAC-таблица) — откуда берётся unicast flooding
- Как всё это называется в IPv6 (Neighbor Discovery) — задел на будущее
- Типичные аварии: дубликат IP, «застрявшая» запись, ARP-spoofing — и плейбук диагностики
Перед отправкой пакета устройство решает: получатель в моей сети (по маске) — шлю напрямую; в чужой — отдаю шлюзу. Сегодня разберём, как физически устроено это «шлю напрямую» — и увидишь, что даже «отдаю шлюзу» без ARP не работает.
1. Два адреса: IP и MAC — зачем оба
У любого сетевого устройства два адреса, и они играют разные роли:
| IP-адрес | MAC-адрес | |
|---|---|---|
| Пример | 192.168.1.10 | a4:5e:60:1f:22:0b |
| Уровень OSI | L3 (сетевой) | L2 (канальный) |
| Кто назначает | Настраивает инженер / DHCP | Прошит в «железе» на заводе |
| Меняется? | Легко — перенастроил и всё | Обычно постоянный (можно подменить программно) |
| Зона действия | Глобальная — виден через много сетей | Локальная — живёт только внутри одной сети |
| Роль | «В какую сеть и по какому городу везти» — глобальная доставка | «Какому конкретному устройству в этой сети отдать» — локальная доставка |
IP — это город и улица, MAC — это лицо конкретного человека
Письмо едет по стране по адресу (IP): страна, город, улица, дом. Но когда почтальон уже пришёл в дом, он отдаёт письмо в руки конкретному человеку — узнаёт его в лицо (MAC). IP довозит пакет до нужной сети, а внутри сети последний шаг делается по MAC. ARP — это как раз «а покажите паспорт»: по IP узнать, чьё это «лицо» (MAC).
«Но зачем два адреса? Почему не хватает одного IP?» — законный вопрос новичка. Ответ: коммутатор — устройство простое и быстрое. Он не разбирает IP-заголовки, не знает масок и маршрутов — он просто смотрит на MAC получателя и мгновенно пробрасывает кадр в нужный порт. Это разделение труда: L2 (MAC) — быстрая доставка «в пределах двора», L3 (IP) — умная доставка «через весь мир». Убери MAC — и каждому свитчу пришлось бы быть роутером.
Из чего состоит MAC-адрес
MAC-адрес — это 6 байт (48 бит), обычно пишут шестью парами hex-цифр:
- Первые 3 байта — OUI (Organizationally Unique Identifier): код производителя сетевой карты. По нему можно узнать вендора — погугли «MAC vendor lookup» и вбей начало любого MAC. На работе это реально полезно: видишь в таблице MAC с OUI Cisco — значит, за портом железка Cisco, а не ПК бухгалтера.
- Последние 3 байта — серийник внутри производителя.
- Особый MAC
ff:ff:ff:ff:ff:ff— broadcast, «всем в этой сети». Через минуту он сыграет главную роль.
Один и тот же MAC пишут по-разному: Linux/Windows — a4:5e:60:1f:22:0b,
Cisco — a45e.601f.220b, иногда — A4-5E-60-1F-22-0B. Не дай себя
запутать: это одна и та же строка байтов, просто с разными разделителями.
Сравнивая MAC из двух систем, приведи их в голове к одному виду.
2. Матрёшка: как пакет прячется в кадр
Чтобы понять ARP, нужно одно фундаментальное знание — инкапсуляция. Звучит страшно, на деле — матрёшка:
- Пакет (L3) — это данные + IP-адреса. Он как письмо в конверте с городом и улицей.
- Кадр (L2) — это пакет, завёрнутый ещё в один конверт с MAC-адресами. Внешний конверт для доставки «внутри двора».
- По проводу всегда летит кадр. Коммутатор читает только внешний конверт (MAC), роутер вскрывает его и читает внутренний (IP).
И вот ключевой момент: чтобы собрать кадр, отправителю нужно вписать MAC получателя. А он знает только IP. Где взять MAC? Вот ровно эту дыру и закрывает ARP.
3. Проблема, которую решает ARP
Ситуация: ПК-A (192.168.1.10) хочет отправить пакет ПК-B (192.168.1.20).
Они в одной сети — значит, общаются напрямую, через коммутатор. Но коммутатор работает
по MAC-адресам, а ПК-A знает только IP получателя. MAC-адрес ПК-B он не
знает. Тупик?
Нет. ПК-A кричит на всю сеть вопрос: «Кто владеет адресом 192.168.1.20? Отзовись, сообщи свой MAC!» Этот «крик» и есть ARP-запрос (ARP = Address Resolution Protocol, «протокол разрешения адресов»).
4. Как работает ARP — шаг за шагом
ff:ff:ff:ff:ff:ff — «всем-всем-всем». Внутри вопрос: «У кого IP 192.168.1.20? Ответьте мне (вот мой IP и MAC)».Вот как этот обмен выглядит в снифере (Wireshark) — две строки, которые ты будешь узнавать с одного взгляда:
Заметь: сам ARP-запрос — это крошечный кадр, в котором всего четыре значащих поля: «мой IP, мой MAC, искомый IP, MAC — неизвестен». Никакой магии.
5. А что, если получатель в другой сети? Главное озарение урока
Теперь соединим этот урок с прошлым. ПК-A (192.168.1.10) пингует сервер
8.8.8.8 в интернете. По маске ПК понимает: «чужая сеть → отдаю шлюзу». Вопрос на
засыпку: чей MAC ПК-A подставит в кадр?
Не MAC сервера 8.8.8.8! До него ARP «не докричится» — broadcast не выходит за пределы своей сети. ПК-A делает ARP-запрос на IP шлюза (192.168.1.1) и собирает кадр так:
Читается это так: «кадр — шлюзу, пакет — серверу». Шлюз получает кадр (он адресован ему по MAC), вскрывает его, видит IP 8.8.8.8, понимает «это не мне — надо передать дальше», выбрасывает старый конверт-кадр и заворачивает пакет в новый — уже с MAC следующего роутера. И так на каждом участке пути.
«Меняется ли MAC-адрес отправителя, когда пакет проходит через роутер?» Правильный ответ: да — на каждом L3-хопе кадр пересобирается, и в новом кадре MAC отправителя — это MAC исходящего порта роутера. IP-адреса при этом не трогаются (кроме NAT — но это уже другая история).
6. ARP-таблица — как её читать
ARP-таблица — это просто шпаргалка «IP → MAC», которую устройство держит у себя, чтобы не переспрашивать по сто раз. Смотрим на всех трёх системах, с которыми работаешь.
Windows (твой рабочий ноутбук):
Linux (серверы и почти любое сетевое железо внутри):
Состояния в Linux — не шум, а диагноз: REACHABLE — сосед подтверждён недавно;
STALE — запись старовата, но ею можно пользоваться (обновится сама); FAILED /
INCOMPLETE — ARP-запрос ушёл, ответа нет. Устройство выключено,
отключён кабель или его вообще нет с таким адресом.
На маршрутизаторе Cisco (главная команда, которую ты будешь вводить постоянно):
Разбираем колонки show ip arp по полочкам:
| Колонка | Что значит |
|---|---|
| Address | IP-адрес, который мы «знаем» |
| Age (min) | Сколько минут записи. - — это адрес самого роутера (не стареет). Большой возраст → скоро запись протухнет и обновится. |
| Hardware Addr | MAC этого IP. Incomplete — роутер спрашивал, но никто не ответил: устройства нет, оно выключено или не в этом VLAN. |
| Type | Почти всегда ARPA — стандартный Ethernet ARP. |
| Interface | Через какой порт/VLAN этот сосед доступен. |
ARP работает только внутри одной сети (одного broadcast-домена). Ты никогда не увидишь в ARP-таблице MAC устройства из Интернета или из другой подсети — только MAC своего шлюза. Для чужой сети роутер знает MAC следующего роутера, а не конечного получателя.
7. Сколько живут записи — и почему «само починилось»
Записи в ARP-таблице не вечные — у каждой есть срок годности, после которого устройство переспросит. И вот тут кроется разгадка классической мистики «ничего не трогали — само починилось через 5 минут»:
| Система | Время жизни записи (по умолчанию) |
|---|---|
| Linux | гибко, обычно десятки секунд до перехода в STALE |
| Windows | 15 секунд – 45 секунд (рандомизировано) |
| Cisco IOS | 4 часа (240 минут)! |
Видишь подвох? На ПК запись обновится за минуту, а роутер Cisco может 4 часа
помнить старый MAC. Классика: заменили клиенту роутер (новый MAC на том же IP), у клиента «всё
лежит», а через N минут «само заработало» — это просто на нашем PE протухла старая ARP-запись.
Опытный инженер не ждёт: clear ip arp 192.168.1.20 — и сразу проверяет.
У свитча есть своя таблица — MAC-таблица (за каким портом какой MAC), и живёт её запись по умолчанию всего 5 минут. А ARP-запись на роутере Cisco — 4 часа. Теперь представь тихого соседа (например, сервер, который только отвечает): свитч его MAC уже забыл, а роутер по ARP ещё помнит и шлёт кадры. Куда свитч денет кадр с неизвестным MAC получателя? Правильно, из урока про коммутацию: во все порты (unicast flooding). В большой сети это выглядит как «откуда на моём порту чужой трафик?!» и лишняя нагрузка.
Лечится выравниванием таймеров (ARP ≤ MAC aging) или просто знанием: увидел странный «чужой» unicast на порту — вспомни про эти два таймера. На собеседовании уровня повыше это любимый вопрос «на понимание, а не на зубрёжку».
8. Gratuitous ARP — «представление без вопроса»
Обычно ARP — это «вопрос → ответ». Но бывает gratuitous ARP (беспричинный, «добровольный» ARP): устройство само, без всякого вопроса объявляет всем: «Я — владелец IP 192.168.1.1, мой MAC такой-то». Зачем?
- Обновить соседей. Роутер включился или сменил MAC (например, переключился резервный шлюз) — рассылает GARP, и у всех в таблице сразу правильный MAC. Это лекарство от проблемы «4 часа» из прошлого раздела.
- Проверить дубликат IP. При настройке адреса устройство спрашивает «а этот IP уже кем-то занят?». Если кто-то ответит — конфликт адресов.
- Резервирование шлюза (VRRP/HSRP). Два роутера делят один «виртуальный» IP шлюза. При переключении на резервный GARP мгновенно переучивает сеть, чтобы трафик пошёл на новый.
Proxy ARP — сосед-самозванец (легальный)
Ещё один родственник: proxy ARP. Роутер отвечает на ARP-запрос вместо устройства из другой сети: «давай свой кадр мне, я передам». Звучит удобно, но в современных сетях это чаще источник странностей, чем польза: устройства «думают», что огромный кусок мира — их соседи. На операторском оборудовании proxy ARP обычно выключают. Знай, что это такое: если в ARP-таблице куча разных IP с одинаковым MAC (MAC роутера) — ты смотришь на работу proxy ARP.
А в IPv6 ARP нет — там Neighbor Discovery
Забегая вперёд (IPv6 подробно — в ступени 2): в новом протоколе интернета ARP заменили на NDP (Neighbor Discovery Protocol). Идея та же — «у меня есть адрес, дай MAC», — но сделана аккуратнее: вместо broadcast «орём на весь двор» используется точечный multicast, и добавлены проверки. Соответствия почти один в один, узнаешь всё знакомое:
| Мир IPv4 | Мир IPv6 | Смысл |
|---|---|---|
| ARP request (broadcast) | Neighbor Solicitation (multicast) | «кто владелец адреса — пришли MAC» |
| ARP reply | Neighbor Advertisement | «это я, вот мой MAC» |
| Gratuitous ARP | Unsolicited NA + DAD | «объявляюсь сам» + проверка дубликата адреса |
| ARP-таблица | Neighbor cache | show ipv6 neighbors / ip -6 neigh |
| ARP spoofing → DAI | NDP spoofing → RA/ND Guard | та же атака, та же защита на свитче |
Вывод, который стоит унести: принцип «IP логический, MAC локальный, между ними — таблица соседей» переживёт любые протоколы. Выучил его один раз на ARP — IPv6 дастся бесплатно.
9. Ликбез: что такое VLAN — «дворы» внутри одного свитча
Прежде чем перейти к авариям, закроем термин, который дальше будет встречаться в каждой второй диагностике: VLAN (Virtual LAN, «виртуальная локальная сеть»). Без него плейбуки ниже читались бы с пробелом.
Вспомни: broadcast (и ARP-запрос в том числе) слышат все устройства одной сети. А теперь представь офисный коммутатор на 48 портов, куда воткнуты и бухгалтерия, и склад, и камеры видеонаблюдения. Хотим, чтобы это были три отдельные сети: чтобы broadcast камер не сыпался на бухгалтерию, а склад не видел серверов напрямую. Покупать три отдельных свитча? Не нужно. Один физический свитч можно логически разрезать на несколько изолированных — это и есть VLAN.
VLAN = дворы одного жилого комплекса с заборами
Один комплекс (свитч), но дворы разделены заборами (VLAN 10, VLAN 20, VLAN 30). Крикнешь во дворе (broadcast) — услышат только соседи по твоему двору. В чужой двор так просто не попасть: нужно выйти через ворота и пройти через улицу — то есть через роутер. Заметь параллель с уроком 3: VLAN делит «дворы» на L2 так же, как VRF делит «миры маршрутов» на L3.
- Каждому порту свитча назначают номер VLAN: «порты 1–10 — VLAN 10 (бухгалтерия), 11–20 — VLAN 20 (склад)». Устройства разных VLAN не видят друг друга по L2 — даже сидя на одном свитче.
- ARP не пересекает границу VLAN. Каждый VLAN — свой broadcast-домен, свой «двор». Вот почему в плейбуках дальше есть шаг «а в том ли VLAN порт?»: устройство с правильным IP, воткнутое не в тот VLAN, на ARP не ответит — для твоего «двора» его просто не существует.
- Между свитчами VLAN'ы тянутся через trunk-порт: по одному кабелю едут кадры сразу многих VLAN, каждый кадр помечен номером (тег 802.1Q) — как конверты с номером двора.
- У оператора VLAN — повседневный инструмент: на одном порту к зданию «нарезаются» разные клиенты и услуги (вспомнишь это в уроке про EVPL).
Для этого пути хватит понимания «VLAN = изолированный двор внутри свитча, ARP через забор не кричит». Глубоко (теги 802.1Q, trunk/access, STP) VLAN разобран в треке «Сети для инженера», модуль 3.
10. Типичные аварии, связанные с ARP
Два устройства настроены на один IP. ARP-таблица «мигает»: то один MAC, то другой. Симптом —
связь «то есть, то нет». На Cisco в логах: %IP-4-DUPADDR: Duplicate address ….
Лечение — найти второе устройство и убрать конфликт. Как найти: по MAC определяем вендора (OUI),
по show mac address-table | include a45e на свитче — конкретный порт, за которым
сидит «двойник».
Поменяли железку (новый MAC), а старая запись ещё живёт в ARP-таблице соседа — трафик летит на
«мёртвый» MAC. Помни про 4 часа у Cisco! Решается руками:
clear ip arp 192.168.1.20 на Cisco / ip neigh flush dev eth0 на Linux /
arp -d * на Windows.
ARP наивен: он верит любому ответу, даже незапрошенному. Злоумышленник рассылает ложные ARP-ответы «шлюз — это я», и трафик жертв идёт через него (man-in-the-middle). Защита на операторском оборудовании — Dynamic ARP Inspection (DAI) и DHCP snooping: свитч сверяет ARP-ответы с базой «кто на каком порту легально получил адрес» и отбрасывает подделки. Знать про это полезно уже сейчас — и это твой мостик в сетевую безопасность.
11. Плейбук: «пинг до соседа не идёт» — диагностика по шагам
Соберём урок в рабочий алгоритм. Дано: устройство A не пингует устройство B в той же сети. Действуй по порядку и не перескакивай:
arp -a / ip neigh / show ip arp.
Есть запись с нормальным MAC? Иди к шагу 4. Нет записи или Incomplete/FAILED — дальше.clear ip arp / arp -d — и смотри,
какой MAC придёт в свежем ответе.show mac address-table на
свитче: смотри, на каких портах светятся оба MAC.12. Мини-лаба: посмотри ARP своими глазами
arp -a. Найди запись про свой шлюз (его адрес ты узнал
в лабе урока 1). Вот MAC твоего роутера.cc:2d:e0) в любой «MAC vendor
lookup» в браузере. Совпало с брендом твоего роутера?arp -d 192.168.1.x, нужны права администратора) или просто выбери
IP, которого нет в таблице. Сделай ping — и снова arp -a: запись появилась!
Это ARP отработал за долю секунды до первого пинга.ping 8.8.8.8, затем arp -a. Записи про 8.8.8.8 нет
и не будет — только шлюз. Ты проверил главное правило ARP на собственном компьютере.13. Словарик урока
| Термин | По-английски | Смысл в одну строку |
|---|---|---|
| MAC-адрес | MAC address | физический адрес сетевой карты, 6 байт, работает внутри одной сети |
| Кадр | frame | «конверт» L2 с MAC-адресами; в нём едет пакет |
| Пакет | packet | «конверт» L3 с IP-адресами; едет внутри кадра |
| Инкапсуляция | encapsulation | вкладывание пакета в кадр (матрёшка) |
| ARP-запрос / ответ | ARP request / reply | broadcast-вопрос «чей IP?» и личный ответ с MAC |
| Broadcast | broadcast | кадр «всем» (MAC ff:ff:ff:ff:ff:ff), не выходит за пределы сети |
| OUI | OUI | первые 3 байта MAC — код производителя |
| Gratuitous ARP | GARP | объявление о себе без вопроса — обновляет соседей |
| Proxy ARP | proxy ARP | роутер отвечает на ARP вместо чужой сети (обычно выключают) |
| DAI | Dynamic ARP Inspection | защита свитча от поддельных ARP-ответов |
| VLAN | Virtual LAN | изолированный «двор» внутри свитча; ARP через его границу не проходит |
| Trunk | trunk port | порт, по которому между свитчами едут кадры сразу многих VLAN (с тегами 802.1Q) |
show ip arp. Нет ARP-записи для
шлюза — не будет и связи наружу.
14. Задачи — реши сам
Задача 1. ПК (192.168.1.10/24) открывает сайт 203.0.113.80. Какие MAC и IP будут в кадре, который выйдет из ПК? Шлюз — 192.168.1.1 (MAC cc:2d:e0:11:aa:01), MAC ПК — a0:11:22:33:44:55.
Кадр: MAC получателя = cc:2d:e0:11:aa:01 (шлюз!), MAC отправителя = a0:11:22:33:44:55. Пакет внутри: IP отправителя = 192.168.1.10, IP получателя = 203.0.113.80. Кадр — шлюзу, пакет — серверу.
Задача 2. В show ip arp запись: 192.168.1.50 0 Incomplete. Что это значит и что проверить?
Роутер послал ARP-запрос для .50, ответа нет. Устройство выключено/нет линка/не тот VLAN/такого адреса нет. Проверить: физику порта, VLAN, включено ли устройство, правильный ли адрес в заявке.
Задача 3. Заменили клиенту роутер. Клиент недоступен, хотя новый настроен верно. Через 20 минут «само заработало». Что произошло и как надо было?
На нашем PE жила старая ARP-запись со старым MAC (Cisco хранит до 4 часов; тут повезло за 20 мин).
Надо было сразу: clear ip arp <IP клиента> — и связь бы появилась мгновенно.
Задача 4. В ARP-таблице десять разных IP из чужих сетей, и у всех один MAC. Что это?
Proxy ARP: за все эти адреса отвечает один роутер своим MAC. Либо это легальный (но нежелательный) proxy ARP, либо повод насторожиться (spoofing).
Задача 5. Почему ARP-запрос — broadcast, а ответ — unicast?
Запрос broadcast, потому что MAC получателя ещё неизвестен — спросить можно только «всех». В ответе адресат уже известен (его IP и MAC были в запросе), поэтому отвечают лично — незачем шуметь на всю сеть.
Задача 6. Два ПК воткнуты в один свитч, адреса из одной сети, маски совпадают — а пинга нет, ARP-запись Incomplete. Свитч исправен. Что проверить?
VLAN портов. Если порты в разных VLAN, ПК находятся в разных «дворах»: broadcast
(и ARP-запрос) между ними не проходит, хотя физически они на одном свитче. Смотри
show vlan brief — порты обоих ПК должны быть в одном VLAN.
Задача 7. На порту доступа виден unicast-трафик, адресованный «тихому» серверу из этого же VLAN, хотя порт — не серверный. Как это объяснить двумя таймерами?
MAC-таблица свитча забыла тихий сервер (5 минут), а роутер по ARP помнит его до 4 часов и продолжает слать кадры. Кадр с неизвестным получателем свитч рассылает во все порты VLAN — unicast flooding. Лечение: выровнять таймеры (ARP ≤ MAC aging) или заставить сервер иногда «подавать голос».
Задача 8. При переключении VRRP на резервный роутер связь у всех восстановилась мгновенно, без ожидания таймеров ARP. Какой механизм это обеспечил?
Gratuitous ARP: новый Master сам разослал объявление «виртуальный IP шлюза — теперь за этим MAC», и все соседи мгновенно обновили свои таблицы, не дожидаясь протухания записей.
Задача 9. Чем в IPv6 заменён ARP-запрос и почему новый способ «тише»?
Neighbor Solicitation протокола NDP. Он уходит не broadcast'ом «всем во дворе», а на специальный multicast-адрес, который слушает почти только нужный хост — остальные устройства кадр даже не обрабатывают.
Почему устройству мало знать только IP получателя внутри своей сети?
Потому что доставка внутри сети идёт по MAC-адресам (коммутатор работает на L2). IP нужно «перевести» в MAC — этим и занимается ARP.
Куда отправляется ARP-запрос — одному устройству или всем?
Всем — это broadcast (MAC-получатель ff:ff:ff:ff:ff:ff). Но
отвечает только владелец запрошенного IP.
В ARP-таблице роутера для доступа в Интернет чей MAC ты увидишь?
MAC своего шлюза / следующего роутера, а не сервера в Интернете. ARP не выходит за пределы своей сети.
Связь «то есть, то нет», в логе Duplicate address. Что это?
Конфликт IP — два устройства с одним адресом. ARP-запись прыгает между их MAC. Надо найти и убрать «двойника» (по OUI и mac address-table свитча).
Ты уже дважды видел слова «таблица» и «шлюз решает, куда дальше». Пора заглянуть внутрь роутера оператора: у него не одна таблица маршрутов, а десятки — по одной на клиента. Зачем и как — в уроке про VRF.