Протокол динамического конфигурирования ЭВМ DHCP
Поведение клиента DHCP
На рис. 6.5 представлена диаграмма состояний для DHCP-клиента. Клиент может получить следующие сообщения от сервера:
- DHCPOFFER
- DHCPACK
- DHCPNAK
Сообщение DHCPINFORM не показано на рис. 6.5. Клиент просто посылает DHCPINFORM и ждет сообщенияотклика DHCPACK. Раз клиент выбрал свои параметры, он завершил процесс конфигурации. Таблица 6.5 описывает использование полей и опций DHCP-сообщения клиента.
Инициализация и выделение сетевого адреса
Клиент начинает работу в состоянии INIT и формирует сообщение DHCPDISCOVER. Клиент должен ждать случайное время в интервале 110 секунд, чтобы десинхронизовать процессы при запуске DHCP. Клиент устанавливает ciaddr равным 0x00000000. Клиент может запросить специфические параметры путем включения опции parameter request list. Клиент может предложить сетевой адрес и/или время действия набора параметров путем включения опций запрошенный IP-адрес и IPaddress lease time (время аренды IP). Клиент должен включить свой аппаратный адрес в поле chaddr, если это необходимо для доставки DHCP-откликов. Клиент может включить уникальный идентификатор в опцию client identifier. Если клиент включил список запрашиваемых параметров в сообщение DHCPDISCOVER, он должен включать этот список во все последующие сообщения.
Клиент генерирует и записывает случайный идентификатор транзакции, вставляет этот идентификатор в поле xid. Клиент записывает свое локальное время для использования позднее при вычислении времени пригодности набора конфигурационных параметров. Клиент затем посылает широковещательно DHCPDISCOVER по локальному аппаратному адресу 0xffffffff, по широковещательному IP-адресу и UDP-порту DHCP-сервера.
Если xid приходящего сообщения DHCPOFFER не согласуется с xid последнего сообщения DHCPDISCOVER, сообщение DHCPOFFER должно игнорироваться. Любое приходящее сообщение DHCPACK также должно игнорироваться.
Клиент собирает сообщения DHCPOFFER за определенный период времени, выбирает одно сообщение DHCPOFFER из числа приходящих сообщений DHCPOFFER (например, первое сообщение DHCPOFFER или сообщение DHCPOFFER от сервера, используемого ранее) и извлекает адрес сервера из опции server identifier сообщения DHCPOFFER.
Если параметры приемлемы, клиент записывает адрес сервера, который предоставляет параметры из поля server identifier и посылает этот адрес в поле server identifier широковещательного сообщения DHCPREQUEST. Раз от сервера пришло сообщение DHCPACK, клиент инициализирован и переходит в состояние BOUND. Сообщение DHCPREQUEST содержит тот же xid, что и сообщение DHCPOFFER. Клиент записывает время истечения действия конфигурационного набора как сумму времени, когда был послан исходный запрос, и длительности действия конфигурационного набора из сообщения DHCPACK. Клиент должен выполнить проверку предложенного адреса, чтобы убедиться, что адрес не используется. Например, если он находится в сети, которая поддерживает ARP, клиент может послать запрос ARP для предложенного адреса. При посылке широковещательного ARPзапроса для предлагаемого адреса, клиент должен записать туда, как отправитель, свой аппаратный адрес и 0 в качестве IP-адреса отправителя, чтобы исключить конфликт с ARPкэшами в других ЭВМ той же субсети. Если оказалось, что сетевой адрес используется, клиент должен послать серверу сообщение DHCPDECLINE. Клиент должен широковещательно послать ARPотклик, чтобы уведомить о новом IP-адресе клиента и удалить устаревшие записи из ARPкэша ЭВМ, размещенных в той же субсети.
Инициализация при известном сетевом адресе
Клиент начинает работу в состоянии INITREBOOT и посылает сообщение DHCPREQUEST. Клиент должен вставить свой сетевой адрес в опцию requested IP-адрес сообщения DHCPREQUEST. Клиент может запросить специфические конфигурационные параметры, включив опцию parameter request list. Клиент генерирует и записывает случайный идентификатор транзакции и заносит этот идентификатор в поле xid. Клиент записывает свое локальное время для последующего использования при вычислении времени истечения пригодности конфигурационного набора параметров. Клиент не должен включать server identifier в сообщение DHCPREQUEST. Клиент затем широковещательно посылает DHCP-серверу сообщение DHCPREQUEST с использованием аппаратного широковещательного адреса и UDP-порта.
Раз от какогото сервера пришло сообщение DHCPACK с полем xid, согласующимся с тем, которое содержится в сообщении клиента DHCPREQUEST, клиент инициализирован и он переходит в состояние BOUND. Клиент записывает время истечения пригодности конфигурационного набора параметров, которое равно сумме времени, когда было послано сообщение DHCPREQUEST, и длительности пригодности конфигурационного набора, взятого из сообщения DHCPACK.