Протокол преобразования адресов ARP (RARP)
Протокол преобразования адресов ARP (RARP)
Как уже было сказано выше, маршрутизаторы упаковывают дейтаграммы IP в кадры локальных сетей (обычно Ethernet). Для установления соответствия MAC по IP адресу они используют специальный протокол разрешения адреса (Address Resolution Protocol, ARP). Соответственно, для решения обратной задачи (установления IP по известному MAC-адресу) используется реверсивный протокол разрешения адреса (Reverse Address Resolution Protocol, RARP). Классический случай применения RARP - старт рабочей станции, у которой IP-адрес не установлен в явном виде.
Алгоритм работы протокола следующий:
Работа протокола занимает вполне определенное, и часто не малое время, за которое дейтаграмма может быть потеряна (превысит время хранения в кэше сетевого адаптера). Поэтому, маршрутизаторы и рабочие станции с сети хранят таблицу соответствия (ARP-таблицу), по которой отправка производится без посылки ARP-запроса.
Кроме IP и МАС-адреса, в таблице хранится возраст записи, что позволяет ее обновлять по определенным условиям. Далее, нужно особо отметить, что во многих операционных системах таблица может быть сформирована вручную администратором сети. Такая возможность часто используется для установления жесткого соответствия MAC и IP адреса узла для ограничения несанкционированного доступа к различным ресурсам.
Таб. 9.6. Формат пакета протокола ARP/RARP в Ethernet
Тип оборудования (для Ethernet - 1) | Тип протокола (для IP-0800) | |
Длина МАС-адреса | Длина IP-адреса | Операция. 1-ARP (запрос), 2-ARP (ответ), 3-RARP (запрос), 4-RARP (ответ) |
Аппаратный адрес (для Ethernet МАС) отправителя (байты 9-14) | ||
IP-адрес отправителя (байты 15-18) | ||
Аппаратный адрес (для Ethernet МАС) получателя (байты 19-24) | ||
IP-адрес получателя (байты 25-28) |
В общем случае, форматы локальных адресов различны для разных видов протоколов. Поэтому красивую таблицу с определенными заранее полями составить сложно. Так как длина МАС-адреса в Ethernet составляет 6 байт, а IP - 4 байта, получается, что запрос занимает 28 байт.