---------------------------------------------
| IP-адрес Ethernet-адрес |
---------------------------------------------
| 223.1.2.1 08:00:39:00:2F:C3 |
| 223.1.2.3 08:00:5A:21:A7:22 |
| 223.1.2.4 08:00:10:99:AC:54 |
---------------------------------------------
Табл.1. Пример ARP-таблицы
Принято все байты 4-байтного IP-адреса записывать десятичными числами,
разделенными точками. При записи 6-байтного Ethernet-адреса каждый
байт указывается в 16-ричной системе и отделяется двоеточием.
ARP-таблица необходима потому, что IP-адреса и Ethernet-адреса выбираются независимо, и нет какого-либо алгоритма для преобразования одного в другой. IP-адрес выбирает менеджер сети с учетом положения машины в сети internet. Если машину перемещают в другую часть сети internet, то ее IP-адрес должен быть изменен. Ethernet-адрес выбирает производитель сетевого интерфейсного оборудования из выделенного для него по лицензии адресного пространства. Когда у машины заменяется плата сетевого адаптера, то меняется и ее Ethernet-адрес.
Каждый сетевой адаптер принимает широковещательные передачи. Все драйверы Ethernet проверяют поле типа в принятом Ethernet-кадре и передают ARP-пакеты модулю ARP. ARP-запрос можно интерпретировать так: "Если ваш IP-адрес совпадает с указанным, то сообщите мне ваш Ethernet-адрес". Пакет ARP-запроса выглядит примерно так:
-----------------------------------------------------------
| IP-адрес отправителя 223.1.2.1 |
| Ethernet-адрес отправителя 08:00:39:00:2F:C3 |
-----------------------------------------------------------
| Искомый IP-адрес 223.1.2.2 |
| Искомый Ethernet-адрес <пусто> |
-----------------------------------------------------------
Табл.2. Пример ARP-запроса
Каждый модуль ARP проверяет поле искомого IP-адреса в полученном
ARP-пакете и, если адрес совпадает с его собственным IP-адресом, то посылает
ответ прямо по Ethernet-адресу отправителя запроса. ARP-ответ можно
интерпретировать так: "Да, это мой IP-адрес, ему соответствует такой-то
Ethernet-адрес". Пакет с ARP-ответом выглядит примерно так:
----------------------------------------------------------- | IP-адрес отправителя 223.1.2.2 | | Ethernet-адрес отправителя 08:00:28:00:38:A9 | ----------------------------------------------------------- | Искомый IP-адрес 223.1.2.1 | | Искомый Ethernet-адрес 08:00:39:00:2F:C3 | ----------------------------------------------------------- Табл.3. Пример ARP-ответаЭтот ответ получает машина, сделавшая ARP-запрос. Драйвер этой машины проверяет поле типа в Ethernet-кадре и передает ARP-пакет модулю ARP. Модуль ARP анализирует ARP-пакет и добавляет запись в свою ARP-таблицу.
Обновленная таблица выглядит следующим образом:
Если в сети нет машины с искомым IP-адресом, то ARP-ответа не будет и не будет записи в ARP-таблице. Протокол IP будет уничтожать IP-пакеты, направляемые по этому адресу. Протоколы верхнего уровня не могут отличить случай повреждения сети Ethernet от случая отсутствия машины с искомым IP-адресом.
Некоторые реализации IP и ARP не ставят в очередь IP-пакеты на то время, пока они ждут ARP-ответов. Вместо этого IP-пакет просто уничтожается, а его восстановление возлагается на модуль TCP или прикладной процесс, работающий через UDP. Такое восстановление выполняется с помощью таймаутов и повторных передач. Повторная передача сообщения проходит успешно, так как первая попытка уже вызвала заполнение ARP-таблицы.
Следует отметить, что каждая машина имеет отдельную ARP-таблицу для каждого своего сетевого интерфейса.