Если обратиться к документации, то можно увидеть, что DHCP (Dynamic Host Configuration Protocol) — это прикладной протокол, который умеет автоматически назначать IP-адрес любому устройству в сети. Далее объясним суть этого протокола человеческим языком и расскажем, как он работает.
Посмотрите на ваш компьютер. Он может работать в сети благодаря наличию IP-адреса, который состоит из четырёх блоков цифр, разделённых точкам. Например: 176.53.182.139. Это как почтовый адрес человека, только вместо города, дома и квартиры указываются узлы связи и маршрутизаторы. Без IP-адреса вы не сможете обмениваться данными с другими компьютерами, подключёнными к сети.
Не только ваш компьютер, но и вообще любое устройство при выходе в сеть получает static IP или dynamic IP. Статический присваивается вручную администратором сети (им может быть сисадмин в вашей компании или ваш провайдер). Динамический присваивается автоматически во время подключения к сети. Он ваш только на определённый период времени. Новый сеанс подключения почти всегда означает, что вам будет присвоен новый IP. Это удобно, когда к сети подключено большое количество устройств — не нужно каждому из них вручную задавать сетевые параметры.
Протокол DHCP отвечает за автоматическое назначение IP-адреса для любого подключающегося к сети устройства. Он представляет собой набор правил и цепочек действий, регулирующих соединение и обмен информационными пакетами между сетевыми устройствами. Работает по модели «клиент-сервер», где в роли клиента выступает ваш компьютер или любое другое устройство, которому требуется IP-адрес. Сервер же раздаёт эти адреса, но с тем расчётом, чтобы у разных устройств IP не были одинаковыми.
Обмен сообщениями между DHCP-сервером и клиентом
Обмен данными можно разбить на четыре базовых этапа, которые коротко называют DORA. Разберём каждый из них.
- Discover: Клиент опрашивает Сервер. Клиент (ваше устройство) ищет сервер (DHCP), чтобы получить IP-адрес, DNS, маску подсети и другие данные, необходимые для работы в сети. Для этого он отправляет сообщение «DHCPDISCOVER» на все устройства в своём сегменте сети. Подобные запросы называют широковещательными (broadcast). Возможность ответа на это сообщение есть только у DHCP-сервера.
- Offer: Сервер отвечает Клиенту. Получивший сообщение DHCP-сервер выбирает и отправляет клиенту ответ «DHCPOFFER» со свободным IP-адресом. Если приходит ответ сразу от нескольких серверов, то клиент может выбрать любой из них. И взаимодействует в дальнейшем только с ним.
- Request: Клиент подтверждает конфиг Сервера. Получивший сообщение об IP-адресе клиент отправляет сообщение «DHCPREQUEST» со своим IP на каждый DHCP-сервер в сети. Таким образом подтверждает использование адреса, а сетевые серверы понимают, что конкретный IP занят и его нельзя предлагать другим клиентам.
- Acknowledgement: Сервер подтверждает доступ Клиента. Сервер запоминает, что IP-адрес закреплён на определённый срок за конкретным устройством и отправляет ему данные об адресе, сроке его действия и другие сетевые настройки в сообщении «DHCPACK». Применив полученный конфиг, клиент получает возможность работать в сети.
Прочие варианты сообщений
Выше мы перечислили базовые типы сообщений, которыми могут обмениваться сервер и клиент. Теперь поговорим о сообщениях, которые тоже могут встретиться при взаимодействии с DHCP-сервером.
- DHCPINFORM. Запрос клиентом рабочей конфигурации локальных настроек сети.
- DHCPNAK. Сообщение сервера клиенту о том, что ему отказано в использовании IP-адреса.
- DHCPRELEASE. Клиент сообщает серверу, что освобождает IP-адрес.
- DHCPDECLINE. Клиент отправляет сообщение на сервер о том, что присваиваемый адрес в DHCP уже используется.
- DHCPINFORM. Клиент отправляет серверу сообщение о получении статического IP-адреса, когда настройки конфигурации требуют динамический.
Если DHCP-сервер и клиент находятся в разных сетях
Многие сети разделены на подсети. Сегментирование даёт возможность значительно улучшить эффективность работы сети, а также обеспечить её безопасность в случае компрометации или сбоя в одном из сегментов. Но при этом появляется вероятность того, что связка сервер–клиент будет разбита маршрутизаторами. А маршрутизаторы broadcast-трафик обычно не пропускают, из-за чего клиент и сервер из разных подсетей теряют возможность обмениваться сообщениями. Им надо помочь.
DHCP relay (ретрансляция) помогает решить проблему, так как позволяет роутеру передавать broadcast-трафик, относящийся к протоколу DHCP. Благодаря этой настройке между клиентом и сервером может вестись полноценный обмен сообщениями.