DHCP (Dynamic Host Configuration Protocol) — протокол динамической настройки узла в сети TCP/IP.
Опишу возможные типы DHCP сообщений:
DHCPDISCOVER — запрос клиента на наличие адресов.
DHCPOFFER — предложение сервера на получение адреса.
DHCPREQUEST — запрос клиента на получение адреса (предложенного сервером в DHCPOFFER), а также продление аренды IP адреса.
DHCPACK — подтверждение сервера о выдаче адреса.
DHCPDECLINE — отказ клиента в получении предложенного адреса (например когда клиент видит что в сети уже кем-то используется предложенный IP адрес).
DHCPNAK — отказ сервера в выдаче запрошенного адреса, обычно после этого клиент шлет DHCPDISCOVER.
DHCPRELEASE — уведомление клиента об освобождении адреса.
DHCPINFORM — запрос клиента о дополнительных параметрах.
Опишу процесс успешного получения DHCP клиентом IP адреса от DHCP сервера:
1) DHCP клиент с IP адреса 0.0.0.0 через порт UDP 67 шлет в сеть IP адресу 255.255.255.255 широковещательное сообщение DHCPDISCOVER «Хочу получить IP адрес».
2) DHCP сервер или DHCP сервера если их несколько получают это сообщение и отвечают клиенту со своего IP через порт UDP 68 сообщением DHCPOFFER «Предлагаю такой-то IP адрес». Отправка сообщение выполняется на широковещательный адрес 255.255.255.255 или адрес шлюза если клиент находится в другой сети.
3) DHCP клиент получает это сообщение или сообщения и отвечает с IP адреса 0.0.0.0 только одному DHCP серверу сообщением DHCPREQUEST «Да, хочу этот IP адрес».
4) DHCP сервер шлет в ответ сообщение DHCPACK «Назначаю тебе этот IP адрес»
Так как у IP адреса есть время аренды по истечении которого он освобождается и DHCP сервер может его выдать например другому клиенту, то DHCP клиенты обычно запрашивают продление сообщением DHCPREQUEST и получают ответ DHCPACK.
Опишу состав DHCP сообщения:
op (тип сообщения, например DHCPDISCOVER, размер 1 байт)
htype (тип аппаратного адреса, размер 1 байт)
hlen (длина аппаратного адреса, например 6 для MAC адреса, размер 1 байт)
hops (количество агентов ретрансляции между сервером и клиентом, клиенты устанавливают значение 0, размер 1 байт)
xid (ID транзакции, генерируется клиентом в начале, размер 4 байта)
secs (прошедшее время в секундах с момента запроса получения адреса, может быть 0, размер 2 байта)
flags (поле для флагов, размер 2 байта)
ciaddr (IP адрес клиента, например если он запрашивает продление аренды, размер 4 байта)
yiaddr (IP адрес предложенный сервером клиенту, размер 4 байта)
siaddr (IP адрес сервера, размер 4 байта)
giaddr (IP адрес агента ретрансляции, размер 4 байта)
chaddr (аппаратный адрес клиента (MAC), размер 16 байт)
sname (имя сервера, 64 байта)
file (имя загрузочного файла, может использоваться для загрузки операционной системы по сети, 128 байт)
options (дополнительные опции)
Смотрите RFC
www.rfc-editor.org/rfc/rfc2131
www.rfc-editor.org/rfc/rfc2132
Смотрите также мои статьи:
- IPTables правила для DHCP
- Установка и использование dhcpdump
- Установка и настройка isc-dhcp-server в Ubuntu
- Тестирование DHCP сервера с dhcpperf