Определения
Определим значения, помещаемые в поле TYPE заголовков пакетов Ethernet:
ether_type$XEROX_PUP, ether_type$DOD_INTERNET, ether_type$CHAOS,
И дополнительно определим новый тип:
ether_type$ADDRESS_RESOLUTION.
Определим также следующие значения (они будут использоваться в дальнейшем обсуждении):
ares_op$REQUEST (= 1, если сначала передается старший бит), ares_op$REPLY (= 2), ares_hrd$Ethernet (= 1).
Формат пакета
Для обмена информацией о преобразовании между протокольными адресами и 48-битовыми адресами Ethernet требуется формат пакета, который будет при необходимости включать протокол преобразования адресов (Address Resolution). Формат такого пакета показан ниже.
Уровень передачи Ethernet (не обязательно доступный пользователю):
- 48-битовый Ethernet-адрес получателя
- 48-битовый Ethernet-адрес отправителя
- 16-битовое значение типа протокола = ether_type$ADDRESS_RESOLUTION
Поле данных пакета Ethernet :
- 16 битов: (ar$hrd) — пространство аппаратных адресов (например, Ethernet, Packet Radio Net и др.)
- 16 битов: (ar$pro) — пространство протокольных адресов. Для Ethernet это набор значений поля “тип” ether_typ$<protocol>.
- 8 битов: (ar$hln) — размер каждого аппаратного адреса в байтах
- 8 битов: (ar$pln) — размер каждого протокольного адреса в байтах
- 16 битов: (ar$op) — код операции (ares_op$REQUEST | ares_op$REPLY)
- n байтов: (ar$sha) — аппартаный адрес отправителя пакета (n берется из поля ar$hln).
- m байтов: (ar$spa) — протокольный адрес отправителя пакета (m берется из поля ar$pln).
- n байтов: (ar$tha) — аппаратный адрес получателя, если он известен.
- m байтов: (ar$tpa) — протокольный адрес получателя.