Протокол ARP расшифровывается, как Address Resolution Protocol — протокол разрешения адресов. В сети обычно взаимодействуем с компьютерами с помощью IP-адресов, или с помощью доменных имен, которые службой DNS все равно преобразуются в IP-адреса.
Но в реальности данные передаются с помощью какой-нибудь технологии канального уровня, например Ethernet. Коммутаторы Ethernet ничего не знают об IP-адресах и для передачи данных используют MAC-адреса. Следовательно, необходимо средство, которое позволяет по IP-адресу компьютера определить его МАК-адрес.
Таблица соответствия ARP
Самое простое средство это таблица соответствия. Мы создаем таблицу, в которой пишем IP-адрес и соответствующий ему MAC-адрес.
Такое средство действительно используется на практике, например в Linux такая табличка хранится в файле /etc/ethers. Однако в крупной сети такой подход не работает.
ARP-запрос
Протокол ARP позволяет автоматически определить МАК-адрес компьютера по его IP-адресу. Протокол работает в режиме запрос-ответ.
Компьютер, который хочет узнать МАК-адрес по известному IP-адресу, направляет ARP запрос “У кого IP 192.168.10.43?” Запрос отправляется на широковещательный МАК-адрес (FF:FF:FF:FF:FF:FF).
И этот запрос получают все компьютеры в сети. Тот компьютер, который узнал в запросе свой IP-адрес подготавливает и отправляет ARP ответ. В ответ включается IP-адрес компьютера (IP:192.168.10.43) и его МАК-адрес (MAC: 54:BE:F7:88:15:47).
Отправитель ARP запроса получает ответ, извлекает из него МАК-адрес и использует его для передачи данных по технологии канального уровня.
Формат ARP-запроса
ARP разрабатывался, как протокол общего назначения с возможностью применять его не только в Ethernet и не только для IP-адресов. Поэтому в начале ARP пакета идет служебная информация, которая позволяет определить с каким типом сетевого оборудования и с каким протоколом сетевого уровня мы работаем.
- Первое поле “тип сети”, говорит о том, какое оборудование мы используем в сети, 1 — соответствует Ethernet.
- Второе поле “тип протокола” в нем указывается протокол сетевого уровня 2048 означает IP.
- Дальше идет “длина локального адреса”, в нашем случае МАК-адреса 6 байт, “длина глобального адреса в нашем случае IP-адреса” 4 байта.
- Следующее поле код операции, 1 — соответствует ARP запросу, а 2 — ARP ответу.
- Затем идет полезная информация о локальных (1С:75:08:D2:49:45) и глобальных адресах (192.168.10.15). Указывается МАК-адрес и IP-адрес отправителя, для того, чтобы получатель знал, кому отправлять ответ.
- Глобальный адрес получателя (192.168.10.43).
- Локальный адрес получателя неизвестен (00:00:00:00:00:00)
Формат ARP-ответа
Формат ARP ответа точно такой же, только в поле “операция” стоит значение 2 и адрес, который мы ищем находится в поле локальный адрес отправителя.
Место в модели OSI
В модели взаимодействия открытых систем OSI протокол ARP находится между канальным и сетевым уровнем. Пакеты ARP вкладываются напрямую в кадры Ethernet без IP.
Из-за того, что ARP находится ниже сетевого уровня, пакеты ARP не проходят через маршрутизаторы. Таким образом, с помощью ARP можно узнать только МАК-адреса компьютеров, которые находятся в одной подсети, а адреса компьютеров, которые находятся в другой подсети отделенные маршрутизатором узнать нельзя.
Почему так происходит? ARP запрос отправляется на широковещательный адрес который получают все компьютеры внутри сети, но широковещательный трафик не проходит через маршрутизаторы, поэтому компьютеры в другой подсети за маршрутизатором ARP запрос не получат и не смогут отправить на него ответ.
ARP-таблица
После того, как МАК-адрес получателя найден, он кэшируется на компьютеры отправителя в ARP-таблице для того, чтобы не запрашивать МАК-адрес каждый раз по протоколу ARP.
Таблица состоит из 3-х полей — IP-адрес, MAC-адрес и Тип записи в ARP таблице. Есть статическая запись, которая внесена в таблицу вручную и динамическая запись, которая появилась в результате работы протокола ARP. Динамические записи имеют срок жизни после которого они удаляются, это нужно для того, чтобы отслеживать изменения IP-адресов в компьютерах.
Посмотреть ARP таблицу на компьютере можно с помощью команды arp -a.
Оптимизация ARP
ARP запрос отправляется на широковещательный адрес и его получают все компьютеры в сети, кроме ip-адреса для которого необходимо получить мак-адрес в ARP запрос. Отправитель также включает свой ip-адрес и свой мак-адрес, эти данные могут быть записаны всеми компьютерами в сети в ARP-таблицу, чтобы использовать когда они понадобятся.
Добровольный ARP-запрос (Gratuitous ARP)
Это запрос по ARP собственного ip-адреса, он используется для двух целей. Первая цель, быстрое оповещение всех компьютеров в сети от том, что у компьютера появился новый ip-адрес.
Другая цель это проверка использования данного ip-адреса другим компьютером. Если на добровольный ARP запрос пришел ответ, это значит, что какой-то компьютер в сети уже использует этот ip-адрес и назначать его компьютеру отправителя нельзя.
Выводы по протоколу ARP
ARP — протокол разрешения адресов, который позволяет по IP-адресу определить MAC-адрес компьютера в сети. ARP работает в режиме запрос-ответ. Запрос отправляется на широковещательный адрес и его получают все компьютеры в сети, а отвечает только тот компьютер, который узнал свой ip-адрес и в ответ он вкладывает искомый мак-адрес. Результаты ARP запросов для повышения производительности записываются в ARP-таблицу.