Как IP-адреса сопоставляются с MAC-адресами?

14

Я читал о различиях между MAC-адресами и IP-адресами и о том, почему мы нуждаемся в них обоих.

Подводя итог, можно сказать, что MAC-адреса - это физические неизменяемые уникальные идентификаторы для каждого устройства, в то время как IP-адреса назначаются, изменяются и являются виртуальными. Для сравнения, MAC-адреса похожи на людей с постоянными именами, а IP-адреса находятся там, где они в настоящее время живут.

В реальном мире мы связываем адреса и имена с помощью телефонной книги. Какой механизм связывает IP-адреса с MAC-адресами и где этот механизм находится в сети?

CodyBugstein
источник
5
Изучив ваши вопросы, я думаю, вам пригодится хорошая книга. Подумайте над тем, чтобы изучить что-то вроде TCP / IP Illustrated, Vol. 1: Протоколы Стивенса (к сведению, издание 1993 года, как правило, считается лучше, чем переиздание 2011 года, хотя издание 1993 года охватывает только IPv4 по глубине).
Майк Пеннингтон
«Иллюстрированная сеть: как TCP / IP работает в современной сети» и / или «Руководство по TCP / IP: всеобъемлющий, иллюстрированный справочник по интернет-протоколам» также стоит посмотреть.
Дженс Линк
4
@MikePennington Спасибо, это хороший способ выразить это, в отличие от "RTFM" и -1. Я читаю это сейчас онлайн :)
CodyBugstein
Связанный: superuser.com/questions/623511/…
leonbloy
1
В действительности, MAC-адреса не являются ни физическими, ни неизменными, ни уникальными. Я видел устройства, которые рандомизируют свои MAC при каждой перезагрузке. Практически на любой платформе есть утилиты для временного или постоянного изменения MAC почти каждого интерфейса. iOS 8 будет даже рандомизировать Wi-Fi MAC для сканирования сетей.
MacLemon

Ответы:

19

Механизм называется протоколом разрешения адресов (ARP) . Каждое устройство ARP Ethernet IPv4 разрешает MAC-адреса Ethernet для целевых IP-адресов. Сопоставления IP с Mac хранятся в таблице ARP каждого устройства (телефонная книга по вашей аналогии).

Для упрощения: в большинстве случаев для разрешения MAC-адреса, связанного с IP-адресом, вы отправляете широковещательный пакет ARP (всем устройствам в сети), спрашивая, у кого этот IP-адрес. Устройство с таким IP-адресом отвечает на ARP (со своим MAC-адресом).

mulaz
источник
я думаю, что большую часть времени он просто выглядит из локальной таблицы arp. Просто в первый раз он должен сделать трансляцию
Cruncher
^ Да, конечно, после того, как он обнаруживает MAC устройств, он некоторое время хранит их в таблице ARP (пару минут), поэтому ему не нужно повторять процесс запроса ARP для каждого пакета.
Мулаз
О, я не осознавал, что он упал со стола через пару минут. Я думал, что это держится некоторое время. Означает ли это, что для яда ARP необходимо отправлять ответы ARP квази-часто?
Cruncher
Да, и «настоящий» хост не должен отправлять какие-либо пакеты на зараженную машину, иначе машина будет хранить «настоящий» MAC.
Мулаз
1
В зависимости от того, что вы пытаетесь достичь.
Мулаз
13

Поскольку вопрос был помечен с помощью IPv6, я отвечу за это, поскольку IPv6 сильно отличается от IPv4.

Начнем с того, что нет такой вещи как ARPv6. Сопоставление между адресами уровня 2 и IPv6 выполняется с помощью протокола обнаружения соседей (NDP), который отправляется по протоколу ICMPv6. Таким образом, вы не должны игнорировать ICMPv6 и отфильтровывать его, как это принято с устаревшими IP. NDP предоставляет два типа сообщений, которые представляют интерес здесь: запрос соседа и объявление соседа. Узел, который хочет узнать адрес канального уровня для определенного IP-адреса, отправляет запрос соседа на соответствующий многоадресный адрес запрашиваемого узла канала - больше нет широковещательной передачи для IPv6.

Например, если рассматриваемый адрес равен 2001:db8::0011:2233:4455:6677, то соответствующий адрес многоадресной рассылки запрашиваемого узла равен ff02::1:ff55:6677и соответствующий адрес многоадресной рассылки Ethernet 33:33:ff:55:66:77. Все узлы с адресом, оканчивающимся на, *55:6677принадлежат этой многоадресной группе и будут прослушивать это - это, скорее всего, только сама целевая система. Запрос соседей содержит также адреса одноадресной IPv6 и MAC-адрес запрашивающей системы.

При получении целевой узел отвечает сообщением соседей, которое отправляется на адрес одноадресной передачи (канальный уровень и IPv6) запрашивающего узла. Таким образом, запрашивающий узел узнает MAC-адрес целевого узла.

И да, NDP-спуфинг работает так же, как ARP-спуфинг. И нет, IPsec не является ответом.

countermode
источник
« Сам ARP нельзя использовать, потому что он был создан для 4-байтовых адресов сетевого уровня (т. Е. IPv4)». Это не так. ARP использует поля длины адреса для указания длины адреса (до 255 октетов) для адресов как уровня 2, так и уровня 3 (см. RFC 826). Причина, по которой ARP не может использоваться с IPv6, заключается в том, что IPv6 не имеет широковещательной рассылки.
Рон Мопин
1
ARP был заменен на NDP в v6 по соображениям безопасности (а затем, как и у всех хороших протоколов, смежных с v6, наблюдалось значительное расширение возможностей), а не потому, что v6 не имеет широковещательной передачи - ARP использует только широковещательную передачу L2 и легко может быть расширена для обеспечения адреса v6.
Ник Бастин
2
Я не знаю, был ли ARP заменен по соображениям безопасности. Насколько я понимаю, было желание охватить все протоколы управления ICMPv6. Как побочный эффект, да, вы можете защитить ICMPv6 с помощью IPsec. Однако IPsec требует обмена ключами, а IKE работает по протоколу UDP, для чего требуется IP-адрес. Одной из задач NDP является согласование IP-адреса, и обмен ключами вручную не масштабируется, поэтому идея NDP + IPsec = безопасный NDP не работает таким образом. Альтернативы, такие как SeND, еще не запущены (и, вероятно, никогда не будут). В конце концов, я не вижу никаких преимуществ безопасности NDP перед ARP.
контрмод
4

Верхний ответ хороший. Если это поможет, вот описание с точки зрения аналогии с телефонной книгой. Реальные сетевые термины в скобках.

На основании их имени (IP-адреса) вы знаете, что они живут в вашем районе (широковещательный домен). Сначала вы просматриваете свою телефонную книгу (кэш ARP), чтобы узнать, знаете ли вы уже их адрес (MAC-адрес). Если их нет в телефонной книге, вы выходите на улицу и кричите (транслируете) «Где живет Стив?» Достаточно громко, чтобы все могли услышать (запрос ARP). Предполагая, что Стив на самом деле живет там и не спит, он отвечает - только вам, не крича - «Вот мой адрес» (ответ ARP). Вы записываете это в свою телефонную книгу для дальнейшего использования (кеширование ARP).

Jacktose
источник
Конечно. Это было забавное упражнение для меня. Реальные вещи, такие как широковещательная / одноадресная передача, не сопоставляются идеально по аналогии (крики / разговоры / почта?), Так что возьмите немного соли.
Джектоз
Для редактора: я использовал адрес позже в аналогии, для MAC.
Джектоз
2
  1. MAC-адреса могут быть изменены. В Linux используйте ip или ifconfig для большинства Windows, посмотрите настройки драйвера вашего сетевого интерфейса.

  2. Вы ничего не конвертируете. MAC-адреса находятся на уровне 2, а IP - на уровне 3 модели OSI. Для IPv4 ARP используется для определения того, какой MAC-адрес (уровень 2) принадлежит определенному IP-адресу (уровень 3). Для IPv6 используется ICMPv6 (Neighbor Discovery).

Дженс Линк
источник
Извините, я должен был сказать «перевести», а не «конвертировать»
CodyBugstein
0

Протокол разрешения адресов (ARP)

IP-адрес ---> ARP ---> MAC-адрес

MAC-адрес ---> RARP ---> IP-адрес

IP-адрес = логический адрес [32 бита]

MAC-адрес = физический адрес [48 бит]

Сетевой уровень (IP) ----> ARP ---> Канальный уровень (MAC)

IP-адрес необходим на сетевом уровне для идентификации хоста источника / назначения.

MAC-адрес необходим на канальном уровне для идентификации хоста источника / назначения.

Дипанкар Налуй
источник
Вы ошибаетесь в отношении RARP (многие люди имеют эту неправильную идею). Это то, что использовалось хостом для определения своего собственного IP-адреса, а не IP-адресов других хостов. Это больше не используется.
Рон Мопин
0

Сетевой стек сначала ищет целевой IP в своей таблице маршрутизации, из этого он определяет две вещи.

  1. Через какой интерфейс должен быть отправлен пакет.
  2. Каков IP-адрес следующего перехода. Если в таблице маршрутизации не указан следующий переход, в качестве следующего перехода используется IP-адрес получателя.

Обратите внимание, что IP-адрес следующего перехода является чисто локальной концепцией, он никогда не становится частью пакета, отправляемого по сети.

Если пакет должен быть отправлен на многоточечном канальном уровне (например, Ethernet и т. Д.), ОС затем ищет следующий переход в своей таблице arp (ipv4) или соседнего обнаружения (ipv6). Если он находит там нестандартную запись, то у него есть MAC-адрес, который ему нужен, и он может отправить пакет.

Если он не имеет пригодной для использования записи, он удерживает пакеты, предназначенные для следующего перехода, и отправляет запрос на поиск MAC-адреса. Механизмы здесь немного отличаются между v4 и v6.

В v4 arp запросы отправляются. Обычно это широковещательная рассылка, но в некоторых случаях, если у хоста есть устаревшая запись, он может сначала выполнить одноадресный запрос и вернуться к широковещательной передаче только в случае сбоя. Ответ обычно одноадресный.

В версии 6 запросы на отправку соседей отправляются по адресу многоадресной рассылки, созданному из адреса следующего перехода. Цель отвечает одноадресной рекламой соседа. Хосты также могут отправлять объявления о соседях группе «многоадресная рассылка всех узлов» (или, по сути, широковещательной), чтобы обновить записи в своих кешах обнаружения соседних узлов.

Питер Грин
источник