Прикладной протокол DHCP

В этой статье мы изучим прикладной сетевой протокол DHCP, который используется для автоматизированной настройки сетевых устройств.















Описание протокола




DHCP (Dynamic Host Configuration Protocol) — протокол, который служит для назначения IP-адресов сетевым устройствам.




Этот протокол находится на прикладном уровне моделях OSI и TCP/IP, а в качестве транспортного протокола используется — UDP.




Это клиент-серверный протокол. При этом клиент использует UDP порт 68, а сервер слушает UDP порт 67. В процессе обмена информацией клиент получает от сервера IP адрес, а также может запросить некоторую другую информацию для настройки сети.




Документация (rfc-2131)- доступна здесь.




Алгоритм работы протокола DHCP




Протокол DHCP работает по очень простому алгоритму, который называется DORA. DORA — это аббревиатура состоящая из 4 первых букв сообщений, которые передаются по сети при получении сетевых настроек клиентом от DHCP сервера.




Алгоритм работы DHCP протокола




  1. DHCP Discover. Вначале клиент не имеет своего IP-адреса. Поэтому он с IP-адреса 0.0.0.0 отправляет широковещательный (broadcast) запрос для поиска DHCP сервера. Отправляет он этот запрос на IP-адрес — 255.255.255.255 и на MAC-адрес — ff:ff:ff:ff:ff:ff. В запросе клиент сообщает информацию о себе, например: свой идентификатор, имя хоста и другую информацию. Также в запросе он указывает какую информацию, помимо IP-адреса он хочет получить от сервера. Например, маску подсети, адрес шлюза, адреса DNS-серверов, статические маршруты и другое. Если обобщить, то в этом сообщении клиент ищет DHCP сервер в локальной сети, отправляет информацию о себе и запрашивает сетевые настройки у сервера. Это сообщение получают все участники локальной сети, но отвечают на него только DHCP сервера.



  2. DHCP Offer. DHCP сервер отвечает клиенту предложением занять определённый IP-адрес. При этом он может ответить широковещательно (если это ты запрашивал IP адрес, то можешь взять этот). Или может напрямую ответить клиенту, ведь он уже знает его MAC-адрес. Кроме IP-адреса и других запрашиваемых сетевых настроек, сервер сообщает клиенту время, на которое он может занять этот IP-адрес. При этом сервер резервирует этот IP-адрес за этим клиентом на некоторое время. Также, при настройке сервера, администратор указывает ему, какие настройки он может выдавать. Чтобы клиент получил запрашиваемую настройку, клиент должен её запросить и сервер должен быть настроен на отправку этой опции. Если сервер не настроен на выдачу определённой опции, которую запросил клиент, то ошибок не произойдет, просто клиент не получит именно эту опцию, а остальные опции он получит.



  3. DHCP Request. Клиент получивший DHCP Offer, в ответ отправляет DHCP Request. Это сообщение отправляется широковещательно, чтобы сообщить другим DHCP серверам, что клиент начал работать с определённым сервером. Этим сообщением клиент уведомляет DHCP сервер, что принял от него IP-адрес и другие опции.



  4. DHCP Ack. DHCP сервер получив DHCP Request, отправляет подтверждение и уведомляет клиента на сколько ему выдали IP-адрес и другие опции. Это сообщение также может быть либо прямым (Unicast), либо широковещательным (Broadcast), в зависимости от сервера.




Опции DHCP




Выше я писал, что сервер выдаёт клиенту IP-адрес и другие настройки, которые запросил клиент. Такие, другие настройки, запрашиваются в качестве DHCP опций. Клиент их запрашивает, а сервер, если может, их отправляет.




Вот некоторые из опций:




  • 1 — Маска подсети;



  • 3 — Шлюз по умолчанию (или список шлюзов);



  • 4 — Список серверов времени (NTP серверов);



  • 6 — Список DNS серверов;



  • 15 — Имя домена;



  • 33 — Список статических маршрутов;



  • 119 — Поисковый домен.




Если клиент не получает какую-то сетевую настройку, то нужно проверить:




  • во-первых, запрашивает ли клиент эту опцию у сервера;



  • во-вторых, настроен ли сервер на выдачу информации по этой опции.









Несколько DHCP серверов в локальной сети




Если в одном широковещательном домене появляется несколько DHCP серверов, то клиент примет настройки от того DHCP сервера, который ему первее ответит. При этом, разные DHCP сервера могут выдавать разные сетевые настройки и IP-адреса из разных подсетей. Получится ситуация, что одни клиенты получат одни сетевые настройки, а другие — другие сетевые настройки. При этом локальная сеть ломается и сетевому администратору нужно понять — почему.




Представьте ситуацию, вы администрируете локальную сеть, у вас в сети есть 1 настроенный DHCP сервер и всё работает хорошо. Затем кто-то приносит из дома роутеры (которые тоже являются DHCP серверами) и подключает их к общему коммутатору. Получается следующая картина:




Несколько независимых DHCP серверов в 1 локальной сети




При этом, каждый компьютер может получить сетевые настройки от любого DHCP сервера. Эти настройки не согласованы друг с другом. Клиенты перестают видеть друг друга в сети. Некоторые клиенты теряют доступ к интернету. В общем — проблема за проблемой.




Чтобы избежать подобной ситуации, на современных (умных) коммутаторах можно включить опцию — DHCP snooping. А затем указать доверенные порты, к которым могут быть подключены DHCP сервера. Все остальные порты остаются недоверенными и отбрасывают сообщения DHCP offer и DHCP Ack. При этом в сети остаётся работать 1 DHCP сервер (ведь мы его подключили к доверенному порту) и клиенты получают согласованные сетевые настройки.




На коммутаторе включена опция DHCP snooping и только DHCP Сервер 1 включен в доверенный порт



2023-04-12T13:24:04
Теория