Когда сервер получает от клиента сообщение DHCPDISCOVER, он выбирает сетевой адрес для клиента, приславшего запрос. Если нет свободного адреса, сервер может проинформировать о проблеме системного администратора. Если адрес доступен, новый адрес должен быть выбран следующим образом:
Текущий адрес клиента, как это записано в текущем блоке параметров клиента, в противном случае
Предшествующий адрес клиента, как это записано в текущем блоке параметров клиента (срок действия которого истек или использование которого прекратилось), если этот адрес находится в пуле доступных адресов сервера, в противном случае
Адрес запрошенный в опции 'Запрошенный IP-адрес', если адрес корректен и еще не присвоен, в противном случае
Новый адрес, полученный из пула свободных адресов; адрес выбирается с учетом субсети, откуда получено сообщение (если 'giaddr' = 0) или с учетом адреса агента транспортировки, который доставил сообщение (когда 'giaddr' не равен 0).
Если это не требуется для корректной работы DHCP, сервер не должен повторно использовать выбранный сетевой адрес, прежде чем клиент пришлет сообщение серверу DHCPDISCOVER. Сервер может решить записать этот адрес, как предложенный клиенту. Он должен также выбрать время действия конфигурационного набора, согласно следующим правилам:
Если клиент не запросил специальный конфигурационный набор в сообщении DHCPDISCOVER и клиент уже имеет сетевой адрес, сервер присылает значение времени действия, ранее присвоенное данному адресу (заметим, что клиент должен явно запросить установления времени действия набора, чтобы переписать значение, ассоциированное с данным адресом), в противном случае
Если клиент не запросил определенное значение времени действия конфигурационного набора в сообщении DHCPDISCOVER и клиент не имеет сетевого адреса, сервер присваивает времени действия набора местное значение по умолчанию, в противном случае
Если клиент запросил специальный конфигурационный набор параметров в сообщении DHCPDISCOVER (вне зависимости оттого, имел ли он уже сетевой адрес), сервер может либо предоставить запрошенный набор (если это согласуется с местной политикой) или выбрать другой набор.
Таблица 3. Поля и опции, используемые DHCP-серверами
Поле
DHCPOFFER
DHCPACK
DHCPNAK
'op'
BOOTREPLY
BOOTREPLY
BOOTREPLY
'htype'
Из RFC "Assigned Numbers"
'hlen'
Длина аппаратного адреса в октетах
'hops'
'xid'
'xid' из сообщения клиента DHCPDISCOVER
'xid' из сообщения клиента DHCPREQUEST
'xid' из сообщения клиента DHCPREQUEST
'secs'
'ciaddr'
'ciaddr' из DHCPREQUEST или 0
'yiaddr'
IP-адрес предложенный клиенту
IP-адрес присвоенный клиенту
'siaddr'
IP-адрес следующего сервера загрузки
IP-адрес следующего сервера загрузки
'flags'
'flags' из сообщения клиента DHCPDISCOVER
флаги' из сообщения клиента DHCPREQUEST
'flags' из сообщения клиента DHCPREQUEST
'giaddr'
'giaddr' из сообщения клиента DHCPDISCOVER
'giaddr' из сообщения клиента DHCPREQUEST
'giaddr' >из сообщения клиента DHCPREQUEST
'chaddr'
'chaddr' из сообщения клиента DHCPDISCOVER
'chaddr' из сообщения клиента DHCPREQUEST
'chaddr' из сообщения клиента DHCPREQUEST
'sname'
Имя ЭВМ сервера или опции
Имя ЭВМ сервера или опции
(не используется)
'файл'
Файл загруз. клиента имя или опции
Файл загруз. клиента имя или опции
(не используется)
'опции'
опции
опции
Опция
DHCPOFFER
DHCPACK
DHCPNAK
Запрошенный IP-адрес
не должен
не должен
не должен
IP-адрес lease time
должен
должен (DHCPREQUEST) не должен (DHCPINFORM)
не должен
Использование полей 'файл'/'sname'
может
может
не должен
Тип сообщения DHCP
DHCPOFFER
DHCPACKDHCPNAK
Список параметров
не должен
не должен
не должен
Сообщение
должен
должен
должен
Идентификатор клиента
не должен
не должен
может
Идентификатор Vendor class
может
может
может
Идентификатор сервера
должен
должен
должен
Макс. размер сообщения
не должен
не должен
не должен
Все прочие
может
может
не должен
Раз сетевой адрес и конфигурационный набор параметров определены, сервер формирует сообщение DHCPOFFER с предлагаемыми конфигурационными параметрами. Для всех DHCP-серверов важно прислать одни и те же параметры (с единственно возможным исключением - новым предлагаемым сетевым адресом), что гарантирует предсказуемое поведение клиента вне зависимости от того, какой из серверов он выберет.
Сервер должен прислать клиенту:
Сетевой адрес клиента,
Время действия клиентского набора, как это определено правилами из данного раздела,
Параметры, запрошенные клиентом, согласно следующим правилам:
- Если в сервере явно задано значение параметра по умолчанию, сервер должен включить это значение в соответствующую опцию поля 'option', в противном случае
- Если сервер распознает параметр, как параметр, определенный в документе Host Requirements, сервер должен включить его значение по умолчанию (как это рекомендуется в документе Host Requirements), в соответствующую опцию в поле 'option', в противном случае
- Сервер не должен присылать значение этого параметра
Сервер должен предоставить столько запрошенных параметров, сколько возможно, должен опустить любые параметры, которые не может предоставить. Сервер должен включить каждый запрошенный параметр только один раз, если только не разрешено обратного в опциях DHCP и в документе Vendor Extensions BOOTP.
Сообщение DHCPREQUEST
Сообщение DHCPREQUEST может прийти от клиента, реагирующего на сообщение сервера DHCPOFFER, от клиента, верифицирующего ранее выделенный IP-адрес, или от клиента, расширяющего время действия конфигурационного набора. Если сообщение DHCPREQUEST содержит опцию 'server identifier', то это отклик на сообщение DHCPOFFER. В противном случае, сообщение является запросом верификации или расширения времени действия набора.
Если клиент использует 'client identifier' в сообщении DHCPREQUEST, он должен использовать его во всех последующих сообщениях. Если клиент включил список запрашиваемых параметров в сообщение DHCPDISCOVER, он должен включить этот список во все последующие сообщения. Любые конфигурационные параметры в сообщении DHCPACK не должны конфликтовать с полученными ранее в сообщении DHCPOFFER. Клиент должен использовать для конфигурации параметры из сообщения DHCPACK. Клиенты посылают сообщения DHCPREQUEST следующим образом:
DHCPREQUEST генерируется в состоянии INIT-REBOOT:
Поле 'server identifier' не должно быть заполнено, в опции 'Запрошенный IP-адрес' должен быть записан предшествующий адрес, присвоенный клиенту. 'ciaddr' должен быть равен нулю. Клиент пытается верифицировать присвоенный ранее конфигурационный набор. Сервер должен клиенту послать сообщение DHCPNAK, если ‘запрошенный IP-адрес’ не корректен, или относится к неверной сети.
DHCPREQUEST генерируется в состоянии RENEWING:
'server identifier' не должен быть заполнен, опция 'запрошенный IP-адрес' не должна быть заполнена, в 'ciaddr' должен быть записан IP-адрес клиента. В этой ситуации, клиент полностью сконфигурирован, и пытается расширить срок действия конфигурационного набора. Это сообщение будет послано по уникастному адресу, таким образом, в обмен не будет вовлечено никаких агентов транспортировки. Так как 'giaddr' не заполнен, DHCP-сервер будет полагаться на значениеn 'ciaddr', и использовать его при передаче данных клиенту.
Клиент может пожелать обновить или расширить время действия конфигурационного набора до T1. Сервер может пожелать не расширять время действия (например, по решению сетевого администратора), но должен в любом случае откликнуться сообщением DHCPACK.
DHCPREQUEST генерируется в состоянии REBINDING:
'server identifier' не должен быть заполнен, опция 'запрошенный IP-адрес' не должна быть заполнена, в 'ciaddr' должен быть записан IP-адрес клиента. В этой ситуации, клиент полностью сконфигурирован, и пытается увеличить время действия набора параметров. Это сообщение должно быть передано широковещательно по IP-адресу 0xffffffff. DHCP-сервер должен проверить корректность 'ciaddr' прежде чем откликаться на DHCPREQUEST. DHCPREQUEST от клиента в состоянии REBINDING имеет целью согласовать узлы, имеющие несколько DHCP-серверов, а также предложить механизм для согласования времен действия конфигурационных наборов, предлагаемых разными серверами. DHCP-сервер может расширить время действия набора параметров клиента, только если он имеет для этого административные привилегии.
Сообщение DHCPDECLINE
Если сервер получает сообщение DHCPDECLINE, клиент каким-то образом обнаружил, что предлагаемый сетевой адрес уже используется. Сервер должен пометить сетевой адрес как недоступный и уведомить администратора системы о возможной конфигурационной проблеме.
Сообщение DHCPRELEASE
При получении сообщения DHCPRELEASE, сервер помечает сетевой адрес, как не присвоенный. Сервер должен хранить запись с конфигурационными параметрами клиента для возможного последующего использования при поступлении соответствующего запроса.
Сообщение DHCPINFORM
Сервер реагирует на сообщение DHCPINFORM посылкой сообщения DHCPACK непосредственно по адресу, записанному в поле 'ciaddr' сообщения DHCPINFORM. Сервер не должен уведомлять клиента об истечении времени действия конфигурационного набора и не должен производить запись в 'yiaddr'. Сервер включает в сообщение DHCPACK другие параметры, как это определено в разделе 4.3.1.
Сообщения клиента
Таблица 4 характеризует различие между сообщениями клиента в различных состояниях
Таблица 4. Сообщения клиента для различных состояний