В этой статье мы изучим прикладной сетевой протокол 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 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 сервера.
- DHCP Offer. DHCP сервер отвечает клиенту предложением занять определённый IP-адрес. При этом он может ответить широковещательно (если это ты запрашивал IP адрес, то можешь взять этот). Или может напрямую ответить клиенту, ведь он уже знает его MAC-адрес. Кроме IP-адреса и других запрашиваемых сетевых настроек, сервер сообщает клиенту время, на которое он может занять этот IP-адрес. При этом сервер резервирует этот IP-адрес за этим клиентом на некоторое время. Также, при настройке сервера, администратор указывает ему, какие настройки он может выдавать. Чтобы клиент получил запрашиваемую настройку, клиент должен её запросить и сервер должен быть настроен на отправку этой опции. Если сервер не настроен на выдачу определённой опции, которую запросил клиент, то ошибок не произойдет, просто клиент не получит именно эту опцию, а остальные опции он получит.
- DHCP Request. Клиент получивший DHCP Offer, в ответ отправляет DHCP Request. Это сообщение отправляется широковещательно, чтобы сообщить другим DHCP серверам, что клиент начал работать с определённым сервером. Этим сообщением клиент уведомляет DHCP сервер, что принял от него IP-адрес и другие опции.
- 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 сервера. Эти настройки не согласованы друг с другом. Клиенты перестают видеть друг друга в сети. Некоторые клиенты теряют доступ к интернету. В общем — проблема за проблемой.
Чтобы избежать подобной ситуации, на современных (умных) коммутаторах можно включить опцию — DHCP snooping. А затем указать доверенные порты, к которым могут быть подключены DHCP сервера. Все остальные порты остаются недоверенными и отбрасывают сообщения DHCP offer и DHCP Ack. При этом в сети остаётся работать 1 DHCP сервер (ведь мы его подключили к доверенному порту) и клиенты получают согласованные сетевые настройки.