Мы знаем, что при общении в сети только после знания IP-адреса другой стороны можно инициировать соединение.Уровень, на котором находится IP-адрес, является сетевым уровнем, а под сетевым уровнем находится канальный уровень, где IP пакеты продолжают инкапсулироваться в Ethernet. Конечно, существуют и другие форматы уровня канала данных для кадров данных, но уровень канала данных также нуждается в механизме адресации, который часто представляет собой 48-битный аппаратный адрес, также известный как MAC-адрес.
Протокол ARP предназначен для обеспечения сопоставления между IP-адресами и соответствующими аппаратными адресами, поэтому протокол ARP также называетсяПротокол разрешения адресов.Основной рабочий процесс
Всякий раз, когда мы инициируем сетевое соединение, происходит не что иное, как следующий процесс:
-
Зная целевое имя хоста, через
gethostname
Функция преобразует имя хоста в IP-адрес.Эта функция называется преобразователем в DNS (система доменных имен).Рекомендуется прочитать сообщение в блоге г-на Жуана Ифэна здесь:Начало работы с принципами DNS. -
Приложение устанавливает соединение по TCP или UDP, используя полученный IP.
-
Если целевой хост находится в локальной сети и знает IP-адрес, мы можем найти соответствующий хост.Если целевой хост находится в удаленной сети, система найдет адрес следующей остановки в локальной сети и позволит Маршрутизатор перенаправляет IP через IP-маршрутизацию Дейтаграммы, эти операции относятся к ядру протокола IP и здесь не рассматриваются.
-
Прежде чем хост узнает IP-адрес и отправит дейтаграмму, ему фактически необходимо знать физический адрес целевого хоста на канальном уровне.Физический адрес каждого хоста, также известный как MAC-адрес, уникален в глобальном масштабе. На этом шаге нам нужен наш протокол ARP.
-
Протокол ARP отправляет запрос ARP. Этот запрос ARP является широковещательным кадром данных, что означает, что каждый компьютер в локальной сети может его получить. Кадр данных ARP содержит IP-адрес хоста назначения, поскольку он отправляется широковещательно. Если у хоста есть этот IP-адрес, он отправит обратно сообщение и отправит обратно свой собственный аппаратный адрес.
-
После получения аппаратного адреса хоста назначения кадр данных Ethernet, содержащий дейтаграмму IP, может быть отправлен в обычном режиме.
Формат ARP-пакета
В Ethernet запросы и ответы ARP имеют следующий формат пакета.
Адреса назначения и источника Ethernet: Адрес Ethernet получателя равен всем 1, т.е.FF:FF:FF:FF:FF:FF
Это широковещательный адрес.В локальной сети все интерфейсы Ethernet должны получать этот кадр данных.
тип рамы: тип кадра длиной 2 байта, сообщающий нам, какие данные несет этот кадр данных Ethernet. Для ARP эти два байта0x0806
, для дейтаграмм IP0x0800
, а RARP (протокол обратного разрешения адресов)0x8035
.
Тип оборудования и тип протокола: Эти два поля используются для описания пакета ARP, тип оборудования используется для указания того, какой тип физического адреса требуется, а тип протокола — это тип адреса протокола, который необходимо сопоставить. Когда используется для описания ARP, выражение состоит в том, что у меня тип протокола IP, а тип оборудования, который мне нужен, — это физический адрес Ethernet. Тогда аппаратный адрес равен 1, что означает адрес Ethernet, и тип протокола0x0800
, видим, что тип фрейма IP-дейтаграммы, упомянутый в предыдущем типе фрейма, тот же, что и было задумано намеренно.
Длина аппаратного адреса и длина адреса протокола: значения здесь равны 6 байтам и 4 байтам соответственно. Представляет 48-битный адрес Ethernet и 32-битный IP-адрес.
код операции: 1=>запрос ARP, 2=>ответ ARP, 3=>запрос RARP, 4=>ответ RARP. Эти значения используются для различения конкретных типов операций.Поскольку поля одинаковы, код операции должен быть указан, иначе запрос или ответ не будут понятны.
последние четыре поля:
- аппаратный адрес источника
- адрес исходного протокола
- целевой аппаратный адрес
- Адрес протокола назначения.Обратите внимание, что есть два поля, которые повторяются в заголовке пакета.Когда мы отправляем запрос ARP, толькоцелевой аппаратный адресОно пустое, потому что мы запрашиваем его значение, и когда соответствующая машина его получит, она запишет в это поле свой аппаратный адрес, изменит код операции на 2 и отправит обратно. Так они узнают аппаратные адреса друг друга и начинают реальное общение.
ARP-кэш
Зная принцип отправки ARP, мы не можем не задаться вопросом, не будет ли слишком медленно отправлять ARP-запрос на аппаратный адрес перед каждой отправкой, но на самом деле работа ARP очень эффективна. Это потому, что на каждом хосте есть кеш ARP, мы можем ввести в командной строкеarp -a
Получите все содержимое родного кеша ARP:
Все вышеперечисленное выполняется в локальной сети.Что, если запросы ARP отправляются с одного сетевого узла на другой сетевой узел? Далее представлена концепция ARP-прокси.
Прокси ARP
Если запрос ARP отправляется с одного сетевого узла на другой, маршрутизатор, соединяющий два узла, может ответить на запрос, процесс, называемый делегированным ARP или прокси-ARP. Мы знаем IP-маршрутизацию, и если хост не подключен, мы отправляем дейтаграмму по маршруту по умолчанию, а маршрутизатор пересылает дейтаграмму. В протоколе ARP на физический адрес узла запроса, который мы отправляем в сеть, также отвечает маршрутизатор, и получается физический адрес маршрутизатора.Отправитель отправляет дейтаграмму маршрутизатору в соответствии с этим физическим адресом, который пересылается маршрутизатором, и следующие вещи Это делается маршрутизатором, который принадлежит к протоколу IP.Конечно, в этом процессе протокол ARP постоянно используется для получения физического адреса каждого шага.
Суммировать
IP-адрес назначения находится в том же сегменте сети, что и он сам.
- Кэш arp имеет MAC-адрес IP-адреса назначения.: отправить прямо на этот физический адрес
- Кэш arp не имеет MAC-адреса IP-адреса назначения: Отправьте широковещательную рассылку ARP, чтобы запросить MAC-адрес целевого IP-адреса, кэшируйте MAC-адрес, а затем отправьте дейтаграмму на MAC-адрес.
Целевой IP-адрес не находится в том же сегменте сети, что и он сам
В этом случае пакет необходимо отправить на шлюз по умолчанию, поэтому в основном получается MAC-адрес шлюза.
- Кэш arp имеет MAC-адрес шлюза по умолчанию.: Напрямую отправьте данные IP, чтобы сообщить о шлюзе по умолчанию, а затем перенаправьте их во внешнюю сеть через шлюз.
- Кэш arp не имеет MAC-адреса шлюза по умолчанию: по-прежнему отправлять широковещательную рассылку ARP с запросом MAC-адреса шлюза по умолчанию, кэшировать адрес и отправлять дейтаграмму шлюзу.
Другая тема: спуфинг ARP
ARP-спуфингон жеотравление ARP,АнглийскийARP spoofing
, — это метод атаки на ARP, который кратко описан здесь.Рабочий механизмСпуфинг ARP в основном происходит, когда злоумышленник отправляет большое количество поддельных пакетов ARP в сеть, особенно на шлюз. Предположим, IP-адрес вашего шлюза192.168.0.2
, MAC-адрес00-11-22-33-44-55
, Данные, которые вы отправляете, будут проходить через этот MAC-адрес. В это время я отправляю много пакетов данных ARP, но мои пакеты построены. IP-это ваш IP, но я заменил MAC-адрес на свой MAC-адрес. время Когда вы обновляете свой ARP-кэш, он обрабатывает MAC-адрес моей машины как192.168.0.2
MAC-адрес, поэтому весь ваш трафик приходит ко мне, я могу изменить ваши данные и отправить их на шлюз, или ничего не делать, вы не сможете выйти в Интернет.Метод профилактикиВ идеале использовать статический ARP, но не в больших сетях, т.к. ARP часто нужно обновлять, другой метод, напримерDHCP snooping
, сетевое устройство может зарезервировать MAC-адрес каждого компьютера в сети через DHCP, и его можно обнаружить при отправке поддельного пакета данных ARP. Этот метод поддерживается некоторыми брендами сетевого оборудования.
Использованная литература:
- Подробное объяснение TCP/IP (Том 1: Протокол)
- Википедия:Address Resolution Protocol(ARP)