Открыть сервис

Протокол DHCP

Протокол динамической настройки узла (DHCP) — это сетевой протокол прикладного уровня модели TCP/IP, предназначенный для автоматического назначения IP-адресов и других параметров сетевой конфигурации (маска подсети, шлюз по умолчанию, адреса DNS-серверов, домен поиска) сетевым устройствам (компьютерам, смартфонам, принтерам, сетевым камерам и т. д.). DHCP позволяет централизованно управлять адресным пространством локальной сети, существенно упрощая администрирование и исключая конфликты, связанные с ручным вводом данных.

История

Протокол DHCP появился как развитие протокола BOOTP (Bootstrap Protocol), который был определён в 1985 году (RFC 951) для загрузки бездисковых рабочих станций. BOOTP требовал статического сопоставления MAC-адреса и IP-адреса, что было негибким для растущих сетей.

В 1993 году IETF (Internet Engineering Task Force) выпустила RFC 1531, описывающий DHCP как расширение BOOTP. Главным нововведением стала возможность динамического выделения адресов на время (аренда) и автоматического освобождения адресов после отключения клиента. Последующие версии спецификации (RFC 2131, 1997 год; RFC 3442, 2002 год; RFC 3315, 2003 год — DHCPv6 для IPv6) уточнили и расширили функциональность.

Архитектура и принцип работы

DHCP работает по модели «клиент-сервер». Сервер хранит пул адресов и параметров, а клиент на этапе инициализации запрашивает конфигурацию.

Взаимодействие (обмен сообщениями)

Процесс получения адреса состоит из четырёх этапов (в упрощённом виде — для IPv4):

  1. DHCPDISCOVER (обнаружение): клиент отправляет широковещательный UDP-пакет (порт назначения 67) с просьбой найти DHCP-сервер.
  2. DHCPOFFER (предложение): каждый сервер, получивший запрос, отправляет клиенту пакет с предложением IP-адреса (UDP, порт источника 68, порт назначения 67).
  3. DHCPREQUEST (выбор): клиент выбирает одно из предложений (обычно первое полученное) и отправляет широковещательный пакет с подтверждением выбора (указывает выбранный адрес) — это уведомляет другие серверы, что их адреса не нужны.
  4. DHCPACK (подтверждение): сервер подтверждает аренду адреса, отправляя пакет с параметрами (маска, шлюз, DNS и т. д.).

В некоторых случаях клиент может отправить DHCPDECLINE, если обнаружит конфликт адресов (например, проверкой с помощью ARP), а сервер — DHCPNAK, если адрес недоступен.

Таймеры аренды

  • Аренда (lease): время, на которое клиенту выделяется адрес (по умолчанию от нескольких часов до 24 часов).
  • T1 (50 %): по истечении половины срока аренды клиент пытается продлить её, отправляя серверу запрос напрямую (unicast).
  • T2 (87,5 %): если сервер не ответил, клиент переходит к широковещательному поиску любого DHCP-сервера.

Виды выделения адресов

Протокол поддерживает три механизма:

  • Динамическое выделение (динамическая аренда): наиболее распространённый режим. Адрес берётся из пула и выдаётся на конечный срок. По истечении срока адрес возвращается в пул. Применяется в сетях с большим числом временно подключаемых устройств (гостевые сети, интернет-провайдеры, корпоративные офисы).
  • Автоматическое выделение: сервер навсегда резервирует адрес за конкретным MAC-адресом (запись в таблице). Адрес не возвращается в пул, даже если устройство отключено. Применяется для стабильных узлов (серверы, сетевые принтеры) без ручной настройки.
  • Ручное (статическое) выделение: администратор вручную сопоставляет MAC-адрес с конкретным IP-адресом и параметрами на сервере. Клиент получает фиксированный адрес через DHCP без риска конфликта. Этот метод сочетает статическую конфигурацию с автоматической доставкой.

Структура и типы сообщений

Сообщения DHCP базируются на формате BOOTP и передаются в UDP. Для IPv4 порт сервера — 67, клиента — 68. Поля пакета включают:

  • op: код операции (запрос/ответ).
  • htype/hlen: тип и длина аппаратного адреса.
  • hops: количество ретрансляторов.
  • xid: идентификатор транзакции (сопоставление запроса и ответа).
  • secs: секунды с начала запроса.
  • flags: флаг (например, широковещательный флаг).
  • ciaddr: IP-адрес клиента (если уже есть).
  • yiaddr: «ваш» (предлагаемый) IP-адрес.
  • siaddr: IP-адрес сервера (в предложениях).
  • giaddr: IP-адрес ретранслятора (relay agent) — используется в сетях с промежуточными агентами.
  • chaddr: аппаратный адрес (MAC).
  • sname, file: опциональные поля (имя сервера, загрузочный файл).
  • options: переменное поле — до 312 байт, содержит опции (маска, шлюз, DNS, домен, сервер времени и т. д.).

Основные типы сообщений (опция 53)

  • DHCPDISCOVER (1)
  • DHCPOFFER (2)
  • DHCPREQUEST (3)
  • DHCPDECLINE (4)
  • DHCPACK (5)
  • DHCPNAK (6)
  • DHCPRELEASE (7) — клиент освобождает адрес досрочно
  • DHCPINFORM (8) — клиент запрашивает только параметры (без адреса)
  • DHCPFORCERENEW (9) — принудительное обновление аренды (используется в DHCP-simplified)

DHCPv6

Для протокола IPv6 существует отдельная версия — DHCPv6, определённая в RFC 3315 (2003 год) с дополнениями (RFC 3633, RFC 3736 и др.). DHCPv6 работает через UDP-порты 546 (клиент) и 547 (сервер). В отличие от DHCPv4, DHCPv6 не использует широковещательные запросы — клиент отправляет multicast-сообщение на адрес all_dhcp_relay_agents_and_servers (FF02::1:2).

DHCPv6 может передавать не только адреса (SLAAC — Stateless Address Autoconfiguration — может использоваться без DHCP), но и другие параметры (DNS, домен, NTP). Выделяют stateful (администратор поддерживает базу адресов) и stateless (только параметры, адреса назначаются SLAAC) режимы.

Реализации и программное обеспечение

  • Серверные реализации: ISC DHCP (Internet Systems Consortium, устаревший), Kea (современная реализация от ISC, C++), dnsmasq (лёгкий, встроен в маршрутизаторы), dhcpd (OpenBSD), Microsoft DHCP Server (в составе Windows Server).
  • Клиентские реализации: dhcpcd (Linux/BSD), dhclient (ISC, в большинстве дистрибутивов), но в современных системах чаще используется NetworkManager (включает встроенный DHCP-клиент) или systemd-networkd.

Безопасность и ограничения

Протокол DHCP изначально не предусматривал аутентификации, что создаёт уязвимости:

  • DHCP-подмена (DHCP spoofing): злоумышленник запускает собственный DHCP-сервер, раздающий ложные шлюзы и DNS-серверы (атака «человек посередине»).
  • DHCP-голодание (DHCP starvation): отправка множества запросов с разными MAC-адресами, исчерпывающая пул сервера.
  • Гонка ложного сервера: атака, при которой ложный сервер отвечает раньше легитимного, принуждая клиента использовать его предложение.

Для защиты применяются:

  • DHCP Snooping (коммутаторы Cisco, MikroTik и др.) — фильтрация DHCP-сообщений от недоверенных портов.
  • 802.1X (аутентификация портов).
  • Статические резервирования для важных устройств.
  • Использование опции 82 (Relay Agent Information) для идентификации источника запроса.
  • Внедрение аутентификации сообщений (RFC 3118 — Authentication for DHCP Messages, редко применяется на практике из-за сложности) и протокола Secure DHCP (RFC 4039).

Применение

DHCP используется повсеместно в любых IP-сетях:

  • Домашние сети: роутеры автоматически раздают адреса клиентам (Wi-Fi, Ethernet).
  • Корпоративные сети: администрирование тысяч рабочих станций и мобильных устройств без ручного ввода.
  • Провайдеры интернет-услуг: выделение публичных адресов абонентам (динамические IP-адреса).
  • Гостиницы, аэропорты, кафе: гостевые сети с быстрым подключением.
  • IoT и умные устройства: автоматическая настройка датчиков, камер, ламп.
  • Тестирование и отладка: временные IP-адреса для лабораторных машин.

Интересные факты

  • Первый DHCP-сервер (ISC DHCP) был написан Тедом Лемоном в 1997 году и долгое время оставался стандартом в Unix-системах.
  • В протоколе BOOTP размер поля options составлял 64 байта, DHCP увеличил его до 312 байт (за счёт сокращения поля file). Позднее (RFC 3396) возможность расширения до 312 байт была кодифицирована.
  • Опция 82 (Relay Agent Information) позволяет провайдерам отслеживать, из какого порта коммутатора пришёл запрос, — это используется для тарификации и ограничения доступа.
  • Спецификация RFC 2131 считается одной из самых читаемых и цитируемых в истории IETF (более 3000 ссылок на Google Scholar).
  • Некоторые устройства (например, некоторые IP-телефоны) поддерживают DHCP-опцию 12 (Host Name), что позволяет автоматически задавать имя хоста в сети.

Источники

  • RFC 2131 — Dynamic Host Configuration Protocol (1997, актуальная версия для IPv4).
  • RFC 3315 — Dynamic Host Configuration Protocol for IPv6 (DHCPv6).
  • RFC 3442 — The Classless Static Route Option for DHCP.
  • RFC 3396 — Encoding Long Options in DHCP.
  • RFC 4039 — Rapid Commit Options for DHCPv4.
  • Droms, Ralph. “Dynamic Host Configuration Protocol”. IETF (Internet Engineering Task Force).
  • Stevens, W. Richard. TCP/IP Illustrated, Volume 1: The Protocols. Addison-Wesley, 1994.
  • Tanenbaum, Andrew S. Computer Networks (5th Edition). Pearson, 2010.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →