Как работает DHCP: этапы получения адреса и опции
DHCP (Dynamic Host Configuration Protocol, RFC 2131) — протокол, который автоматически выдаёт устройствам IP-адрес и сопутствующие сетевые параметры. Работает поверх UDP: сервер слушает порт 67, клиент — порт 68.
Главное удобство в том, что администратор не бегает по машинам с бумажкой: настройка приезжает сама, вместе с адресом.
Этапы получения адреса
Получение адреса называют DORA — по первым буквам четырёх сообщений: Discover, Offer, Request, Acknowledge.
Клиент (без адреса) DHCP-сервер
| |
| ---- 1. DHCPDISCOVER (broadcast) ----> |
| |
| <--- 2. DHCPOFFER (IP + опции) -------- |
| |
| ---- 3. DHCPREQUEST (broadcast) ------> |
| |
| <--- 4. DHCPACK (подтверждение) ------- |
| |
- Discover — клиент ещё без адреса рассылает broadcast (
255.255.255.255, источник0.0.0.0): «есть тут DHCP-сервер?». - Offer — сервер(ы) отвечают предложением: IP, маска, шлюз, время аренды. Ответить может несколько серверов сразу.
- Request — клиент выбирает одно предложение и снова шлёт broadcast-запрос, прося именно этот адрес. Так остальные серверы понимают, что их предложения не приняты.
- Acknowledge — выбранный сервер подтверждает аренду. С этого момента клиент может пользоваться адресом.
Обновление и освобождение адреса
Адрес выдаётся на ограниченное время — lease time. По умолчанию клиент должен продлевать аренду:
- на T1 (обычно 50% времени аренды) клиент шлёт
Requestнапрямую (unicast) тому серверу, который выдал адрес; - если сервер не ответил, на T2 (обычно 87,5%) клиент рассылает
Requestbroadcast’ом; - если и это не помогло — по истечении аренды клиент обязан освободить адрес.
Явно отдать адрес можно сообщением DHCPRELEASE, но на практике многие клиенты его не шлют — просто завершают работу, и адрес «доживает» до конца аренды.
DHCP relay
Если клиент и сервер находятся в разных подсетях, на помощь приходит relay-агент (обычно он включён на маршрутизаторе). Он ловит broadcast-запросы клиента и пересылает их серверу уже unicast’ом, добавляя поле giaddr (адрес relay-агента) и опцию 82. Сервер по giaddr понимает, из какой сети клиент, и выдаёт адрес из нужного пула.
Опции DHCP
Кроме самого адреса, DHCP умеет передавать кучу параметров. Опции устроены как «код–длина–значение» (TLV). Вот основные, с указанием, зачем они нужны:
| Код | Название | Для чего |
|---|---|---|
| 1 | Subnet Mask | Маска подсети |
| 3 | Router | Шлюз по умолчанию |
| 6 | Domain Name Server | Адреса DNS-серверов |
| 12 | Host Name | Имя хоста |
| 15 | Domain Name | DNS-суффикс (домен) |
| 42 | NTP Servers | Серверы точного времени (NTP) |
| 44 | NetBIOS Name Server | Адреса WINS-серверов (старая схема имён Windows) |
| 46 | NetBIOS Node Type | Режим разрешения NetBIOS-имён |
| 51 | IP Address Lease Time | Время аренды адреса |
| 53 | DHCP Message Type | Тип сообщения (Discover/Offer/…) |
| 54 | Server Identifier | Адрес выбранного DHCP-сервера |
| 58 / 59 | Renewal / Rebinding Time | Моменты T1 и T2 |
| 60 | Vendor Class Identifier | Клиент сообщает свой тип (например, PXEClient) |
| 61 | Client Identifier | Уникальный идентификатор клиента |
| 43 | Vendor-Specific | Произвольные данные вендора |
| 66 | TFTP Server Name | Адрес TFTP-сервера — для загрузки по сети |
| 67 | Bootfile Name | Имя загрузочного файла — для загрузки по сети |
| 82 | Relay Agent Information | Служебная информация от relay (порт, VLAN) |
| 93 | Client System Architecture | Архитектура клиента — BIOS или UEFI |
| 94 | Client Network Interface | Идентификатор сетевого интерфейса |
| 97 | Client Machine UUID | UUID машины |
| 119 | Domain Search | Список DNS-суффиксов для поиска имён |
| 121 | Classless Static Route | Бесклассовые статические маршруты |
| 252 | WPAD | Адрес автоопределения прокси-сервера |
Отдельно стоит выделить:
- NTP (42) — клиент сразу узнаёт, у кого сверять часы;
- WINS (44, 46) — для старых Windows-сетей, где имена машин резолвились через NetBIOS;
- TFTP/Bootfile (66, 67) вместе с 93, 94, 97 — это основа загрузки ОС по сети (PXE): сервер говорит клиенту, откуда и какой загрузчик качать.
Итог
DHCP — это не «просто выдача IP». Это способ доставить клиенту всё, что ему нужно для работы в сети: от шлюза и DNS до NTP, WINS и даже загрузочного файла для старта операционной системы по сети. О последнем — подробнее в отдельной статье про PXE и TFTP.