DHCP

Материал из Викиконспекты
Версия от 19:19, 4 сентября 2022; Maintenance script (обсуждение | вклад) (rollbackEdits.php mass rollback)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
DHCP в модели OSI и стеке TCP/IP.

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

Был предложен в 1993 г., и наиболее полное современное описание DHCP содержится в документе RFC 2131 (март 1997 г.).

DHCP является расширением протокола BOOTP, использовавшегося ранее для обеспечения бездисковых рабочих станций IP-адресами при их загрузке, и сохраняет с ним обратную совместимость.

Цель DHCP — устранить два основных ограничения, накладывающихся на другие анагологичные протоколы, а именно: отсутствие поддержки динамического назначения IP-адресов и возможность передавать от сервера на станцию-клиент лишь небольшое число параметров конфигурации.



Архитектура

Архитектура DHCP.

Работа протокола DHCP базируется на классической схеме клиент-сервер.

  • В роли клиентов выступают компьютеры сети, стремящиеся получить IP-адреса в так называемую аренду (lease).
  • DHCP-серверы выполняют функции диспетчеров, которые выдают адреса, контролируют их использование и сообщают клиентам требуемые параметры конфигурации.

Сервер поддерживает пул свободных адресов и, кроме того, ведет собственную регистрационную базу данных.




Сообщения

Взаимодействие DHCP-серверов с клиентами осуществляется путем обмена сообщениями.

Структура сообщения показана на рисунке, где в скобках указан размер поля в байтах.

Опишем подробнее поля:

Сообщение DHCP.
Поле Описание
op Тип сообщения (1 = BOOTREQUEST, 2 = BOOTREPLY)
htype Тип адреса оборудования
hlen Длина адреса оборудования
hops Используется ретранслирующим агентом
xid Идентификатор транзакции между сервером и клиентом
secs Время с момента выдачи DHCPREQUEST или начала обновления конфигурации
flags Флаги (первый бит маркирует широковещательные сообщения)
ciaddr IP-адрес клиента
yiaddr <Ваш> (клиентский) IP-адрес
siaddr IP-адрес следующего сервера, участвующего в загрузке
giaddr IP-адрес ретранслирующего агента
chaddr <Аппаратный> адрес клиента
sname Хост-имя сервера (опция)
file Имя загрузочного файла
options Поле дополнительных параметров

В роли транспортного протокола для обмена DHCP-сообщениями выступает UDP.

  • при отправке сообщения с клиента на сервер используется 67-й порт DHCP-сервера;
  • при передаче в обратном направлении - 68-й.

Эти номера портов, как и схожая структура сообщений, обеспечивают обратную совместимость DHCP с BOOTP. Конкретные процедуры взаимодействия клиентов и серверов BOOTP и DHCP регламентирует документ RFC 1542.

Алгоритм работы

Получение IP адреса

Алгоритм получения IP адреса.
  • Клиент посылает в свою подсеть широковещательное сообщение DHCPDISCOVER, в котором могут указываться устраивающие клиента IP-адрес и срок его аренды. В качестве IP-адреса источника указывается 0.0.0.0, в качестве адреса назначения - 255.255.255.255. Если DHCP-сервер отсутствует в подсети, то сообщение будет передано в другие подсети агентами протокола BOOTP.
  • Получив запрос от клиента, DHCP-сервер отвечает на него сообщением DHCPOFFER. В сообщение включается предлагаемый IP-адрес (yiaddr) и прочие конфигурации для клиента (адреса маршрутизаторов, DNS-серверов и т.д.).
    • На данном этапе сервер не обязан резервировать адрес, который он отправил клиенту.
  • Получив конфигурации от серверов (их может быть несколько, если в подсети более одного DHCP-севрера), клиент отправляет широковещательное сообщение DHCPREQUEST. В нем содержатся идентификатор выбранного сервера и, возможно, желательные значения запрашиваемых параметров конфигурации.
    • На данном этапе допускается, что клиента не устроит ни один из предложенных адресов, тогда он вновь отправит DHCPDISCOVER.
  • Получив DHCPREQUEST и убедившись, что в сообщении его идентификатор, сервер проверяет свободен ли в данный момент запрошенный адрес. Если да, то отправляет DHCPACK и вносит запись в базу, иначе отправляет DHCPNACK.
  • Получив сообщение DHCPACK, клиент обязан убедиться в уникальности IP-адреса (средствами протокола ARP) и зафиксировать суммарный срок его аренды.
    • Срок аренды: время, прошедшее между отправкой сообщения DHCPREQUEST и приемом ответного сообщения DHCPACK + срок аренды, указанный в DHCPACK.
    • Если адрес уже используется другой станцией, клиент отправляет DHCPDECLINE и начинает всю процедуру снова.
  • Для досрочного прекращения аренды адреса клиент отправляет серверу сообщение DHCPRELEASE.

Выбор адреса DHCP-сервером

Алгоритм работы DHCP-сервера при получении DHCPDISCOVER:

  • Если клиент запросил конкретный адрес, и в данный момент этот адрес свободен, то он будет отправлен клиенту.
  • Если клиент не запрашивал адрес, и адрес, закрепленный за ним в данный момент, свободен, то он будет отправлен клиенту.
  • Если ни один из предыдущих пунктов не выполнен, то адрес случайно выбирается из пула свободных адресов.
  • Если в пуле нет свободных адресов, то сервер отправляет сообщение о проблеме администратору.

Следует отметить, что сервер не обязан отвечать на каждый поступивший запрос DHCPDISCOVER. Такой подход дает возможность управления использованием сети: например, можно разрешить серверу отвечать только тем клиентам, которые предварительно зарегистрировались с помощью специальной процедуры.

Истечение срока аренды адреса

Когда срок аренды адреса подходит к концу клиент может:

  • Отправить DHCPRELEASE и начать процедуру получения адреса заново
  • Продлить аренду текущего адреса по алгоритму:
    • Когда проходит половина времени аренды адреса, клиент переходит в состояние RENEWING.
      • Клиент оправляет DHCP-серверу, выдавшему адрес, сообщение DHCPREQUEST с просьбой продлить срок аренды.
      • Получив DHCPACK, клиент пересчитывает срок аренды и продолжает работу в обычном режиме.
    • Если ответ не получен к моменту времени = 7/8 срока аренды адреса, то клиент переходит в состояние REBINDING.
      • Клиент отправляет широковещательное сообщение DHCPREQUEST со своим текущим сетевым адресом.
      • Получив DHCPACK, клиент пересчитывает срок аренды и продолжает работу в обычном режиме.
    • Если к моменту окончания аренды ответ не получен, то процедура получения адреса начинается сначала.
    • Если ответ DHCPACK придет с опозданием, но до завершения новой процедуры получения адреса, то клиент продолжает пользоваться предыдущим адресом.

Параметры конфигурации

Для каждого клиента DHCP-сервер заводит в своей базе запись с параметрами конфигурации. Каждой записи соответствует уникальный ключ (например, <номер подсети IP, аппаратный адрес>). Поддерживаемые параметры конфигурации определены в RFC 1122, RFC 1123, RFC 1196, RFC 1256.

Наиболее важные параметры:

  • выданный адрес
  • срок аренды
  • назначавшиеся ранее адреса
  • максимальный размер реассемблируемого пакета
  • перечень фильтров для нелокальной маршрутизации от источника
  • адрес для широковещательных пакетов
  • параметры статических маршрутов

Не все параметры конфигурации передаются в сообщениях между клиентом и сервером. Для многих из них в спецификации определены значения по умолчанию - они будут использованы клиентом, если соответствующие параметры отсутствуют в сообщении от сервера. Клиент может явно указать параметры, которые хочет получить в сообщениях DHCPDISCOVER и DHCPREQUEST.

Передача параметров конфигурации происходит в процессе получения IP-адреса. Если на клиенте адрес был задан вручную, то он отправляет сообщение DHCPINFORM, содержащее уже имеющийся адрес и запрос об отдельных параметрах конфигурации. DHCP-сервер проверяет правильность адреса клиента (но не наличие аренды) и отправляет DHCPACK с требуемыми параметрами конфигурации.

Пример исполнения алгоритма

  • DHCPDISCOVER
   TIME: 2016-12-11 21:33:51.313
   IP: 0.0.0.0 (6c:71:d9:56:a5:e3) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
   OP: 1 (BOOTPREQUEST)
   HTYPE: 1 (Ethernet)
   HLEN: 6
   HOPS: 0
   XID: bda4bd67
   SECS: 0
   FLAGS: 0
   CIADDR: 0.0.0.0
   YIADDR: 0.0.0.0
   SIADDR: 0.0.0.0
   GIADDR: 0.0.0.0
   CHADDR: 6c:71:d9:56:a5:e3:00:00:00:00:00:00:00:00:00:00
   SNAME: .
   FNAME: .
   OPTION:  53 (  1) DHCP message type         1 (DHCPDISCOVER)
   OPTION:  12 (  5) Host name                 omnom
   OPTION:  55 ( 13) Parameter Request List     
     1 (Subnet mask)
     28 (Broadcast address)
     2 (Time offset)
     3 (Routers)
     15 (Domainname)
     6 (DNS server)
     119 (Domain Search)      
     12 (Host name)
     44 (NetBIOS name server)
     47 (NetBIOS scope)
     26 (Interface MTU)
     121 (Classless Static Route)
     42 (NTP servers)
  • DHCPOFFER
   TIME: 2016-12-11 21:33:51.613
   IP: 192.168.10.1 (c8:3a:35:c:e5:30) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
   OP: 2 (BOOTPREPLY)
   HTYPE: 1 (Ethernet)
   HLEN: 6
   HOPS: 0
   XID: bda4bd67
   SECS: 0
   FLAGS: 0
   CIADDR: 0.0.0.0
   YIADDR: 192.168.10.101
   SIADDR: 0.0.0.0
   GIADDR: 0.0.0.0
   CHADDR: 6c:71:d9:56:a5:e3:00:00:00:00:00:00:00:00:00:00
   SNAME: .
   FNAME: .
   OPTION:  53 (  1) DHCP message type         2 (DHCPOFFER)
   OPTION:  54 (  4) Server identifier         192.168.10.1
   OPTION:  51 (  4) IP address leasetime      86140 (23h55m40s)
   OPTION:   1 (  4) Subnet mask               255.255.255.0
   OPTION:   3 (  4) Routers                   192.168.10.1
   OPTION:   6 (  4) DNS server                192.168.0.1
  • DHCPREQUEST
   TIME: 2016-12-11 21:33:51.614
   IP: 0.0.0.0 (6c:71:d9:56:a5:e3) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
   OP: 1 (BOOTPREQUEST)
   HTYPE: 1 (Ethernet)
   HLEN: 6
   HOPS: 0
   XID: bda4bd67
   SECS: 0
   FLAGS: 0
   CIADDR: 0.0.0.0
   YIADDR: 0.0.0.0
   SIADDR: 0.0.0.0
   GIADDR: 0.0.0.0
   CHADDR: 6c:71:d9:56:a5:e3:00:00:00:00:00:00:00:00:00:00
   SNAME: .
   FNAME: .
   OPTION:  53 (  1) DHCP message type         3 (DHCPREQUEST)
   OPTION:  54 (  4) Server identifier         192.168.10.1
   OPTION:  50 (  4) Request IP address        192.168.10.101
   OPTION:  12 (  5) Host name                 omnom
   OPTION:  55 ( 13) Parameter Request List     
     1 (Subnet mask)
     28 (Broadcast address)
     2 (Time offset)
     3 (Routers)
     15 (Domainname)
     6 (DNS server)
     119 (Domain Search)
     12 (Host name)
     44 (NetBIOS name server)
     47 (NetBIOS scope)
     26 (Interface MTU)
     121 (Classless Static Route)
     42 (NTP servers)
  • DHCPACK
   TIME: 2016-12-11 21:33:51.913
   IP: 192.168.10.1 (c8:3a:35:c:e5:30) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
   OP: 2 (BOOTPREPLY)
   HTYPE: 1 (Ethernet)
   HLEN: 6
   HOPS: 0
   XID: bda4bd67
   SECS: 0
   FLAGS: 0
   CIADDR: 0.0.0.0
   YIADDR: 192.168.10.101
   SIADDR: 0.0.0.0
   GIADDR: 0.0.0.0
   CHADDR: 6c:71:d9:56:a5:e3:00:00:00:00:00:00:00:00:00:00
   SNAME: .
   FNAME: .
   OPTION:  53 (  1) DHCP message type         5 (DHCPACK)
   OPTION:  54 (  4) Server identifier         192.168.10.1
   OPTION:  51 (  4) IP address leasetime      86400 (24h)
   OPTION:   1 (  4) Subnet mask               255.255.255.0
   OPTION:   3 (  4) Routers                   192.168.10.1
   OPTION:   6 (  4) DNS server                192.168.0.1