Протокол динамического конфигурирования ЭВМ DHCP
Введение
Протокол динамической конфигурации ЭВМ DHCP (Dynamic Host Configuration Protocol, RFC-2131, -2132, -2485, -2563, -2610, -2855, -2937, -2939, -3004, -3011, -3046, -3942, -4030, -4039; [6.16], [6.17], [6.18] и [6.19]) служит для предоставления конфигурационных параметров ЭВМ, подключенных к Интернет. DHCP имеет два компонента: протокол предоставления специфических для ЭВМ конфигурационных параметров со стороны DHCP-сервера и механизм предоставления ЭВМ сетевых адресов.
Протокол DHCP используется, помимо загрузки бездисковых станций или Хтерминалов (BOOTP), сервиспровайдерами для пулов модемов, когда число одновременно занятых модемов существенно меньше их полного числа. Это позволяет сэкономить заметное число IP-адресов. Протокол эффективен для случая распределения адресов за Firewall, где для ЭВМ в защищенной зоне все равно бессмысленно выделять реальные IP-адреса.
DHCP построен по схеме клиентсервер, где DHCP-сервер выделяет сетевые адреса и доставляет конфигурационные параметры динамически конфигурируемым ЭВМ.
ЭВМ не должна действовать как DHCP-сервер, если только она специально не сконфигурирована системным администратором. IP-протокол требует установки многих параметров. Так как IP-протокол может быть использован самым разным сетевым оборудованием, значения этих параметров не могут быть угаданы заранее. Кроме того, схема распределенного присвоения адресов зависит от механизма выявления уже используемых адресов. ЭВМ могут не всегда корректно зарезервировать свои сетевые адреса, таким образом, схема распределенного выделения адресов не может гарантировать уникальности сетевых адресов.
DHCP поддерживает три механизма выделения IP-адресов. При автоматическом выделении DHCP присваивает клиенту постоянный IP-адрес. При динамическом присвоении DHCP присваивает клиенту IP-адрес на ограниченное время. При ручном выделении, IP-адрес выделяется клиенту сетевым администратором, а DHCP используется просто для передачи адреса клиенту. Конкретная сеть применяет один или более этих механизмов, в зависимости от политики сетевого администратора.
Динамическое присвоение адресов представляет собой единственный механизм, который автоматически позволяет повторно использовать адрес, который не нужен клиенту.
Динамическое присвоение адресов является оптимальной схемой для клиентов, подключаемых к сети временно, или совместно использующих один и тот же набор IP-адресов и не нуждающихся в постоянных адресах.
Формат сообщений DHCP базируется на формате сообщений BOOTP, чтобы можно было воспользоваться процедурами транспортировки данных, описанными в спецификации BOOTP [6.7, 6.16], и обеспечить совместимость DHCPсерверов с существующими клиентами BOOTP. Использование агентов транспортировки BOOTP исключает необходимость наличия DHCPсерверов в каждом физическом сегменте сети.
Существует несколько протоколов Интернет, которые так или иначе связаны с проблемой присвоения сетевых адресов. Протокол RARP (Reverse Address Resolution Protocol) [6.9] через расширения, описанные в DRARP (Dynamic RARP [6.5]), не только позволяет определить сетевой адрес, но и включает в себя автоматический механизм распределения IP-адресов.
BOOTP является транспортным механизмом сбора конфигурационной информации. Протокол BOOTP является масштабируемым, определены стандартные расширения [6.11] для нескольких конфигурационных параметров. Морган предложил расширение BOOTP для динамического присвоения IP-адресов. Протокол NIP (Network Information Protocol), использованный в проекте Athena МТИ, предоставляет распределенный динамический механизм выделения IP-адресов [6.14]. Протокол RLP (Resource Location Protocol [6.1]) служит для нахождения серверов, предоставляющих услуги верхнего уровня. Бездисковые рабочие станции компании Sun Microsystems применяют процедуру загрузки, которая с привлечением механизма RARP, TFTP и RPC, называемого bootparams, предоставляет бездисковой ЭВМ конфигурационную информацию и фрагменты операционной системы.
Имеется предложение по использованию протокола ARP (Address Resolution Protocol) для нахождения и выбора ресурсов [6.6]. Наконец, в RFC Host Requirements [6.3, 6.4] упоминаются специфические требования к конфигурированию ЭВМ и предлагается сценарий инициализации бездисковых ЭВМ.
Протокол DHCP предназначен для предоставления клиентам конфигурационных параметров, описанных в RFC Host Requirements. После получения через DHCP необходимых параметров, клиент должен быть готов к обмену пакетами с любой другой ЭВМ в Интернет. Не все эти параметры необходимы для первичной инициализации клиента. Клиент и сервер могут согласовывать список необходимых параметров.
Протокол DHCP позволяет, но не требует конфигурации параметров клиента, не имеющих прямого отношения к IP-протоколу. DHCP не обращается к системе DNS для регистрации адреса [6.12, 6.13]. DHCP не может использоваться для конфигурации маршрутизаторов. При описании протокола применены следующие определения.
Ниже приводится список основных задач DHCP.
- DHCP представляет собой механизм, а не политику. DHCP должен управляться местными системными администраторами, путем задания желательных конфигурационных параметров
- Клиенты не должны требовать ручной конфигурации. Каждый клиент должен быть способен прочесть локальные конфигурационные параметры
- Сети не должны требовать ручной конфигурации для отдельных клиентов. В нормальных условиях сетевой администратор не должен вводить каких-либо индивидуальных конфигурационных параметров клиента
- DHCP не требует отдельного сервера для каждой субсети
- Клиент DHCP должен быть готов получить несколько откликов на запрос конфигурационных параметров. Для повышения надежности и быстродействия можно использовать несколько DHCPсерверов, обслуживающих перекрывающиеся области сети
- DHCP должен сосуществовать с ЭВМ, которые сконфигурированы вручную
- DHCP должен быть совместим с логикой работы BOOTP-агента, описанной в RFC-951 и RFC-1542 [6.16]
- DHCP должен обслуживать существующих клиентов BOOTP
- гарантировать, что любой специфический сетевой адрес не будет использоваться более чем одним клиентом одновременно
- поддерживать DHCP конфигурацию клиента при стартовой перезагрузке DHCP-клиента. Клиенту DHCP должен, при каждом запросе по мере возможности, присваиваться один и тот же набор конфигурационных параметров (например, сетевой адрес)
- поддерживать конфигурацию DHCP-клиента при перезагрузке сервера, и, по мере возможности, DHCP-клиенту должен присваиваться один и тот же набор конфигурационных параметров
- позволять автоматически присваивать конфигурационные параметры новым клиентам, чтобы избежать ручной конфигурации
- поддерживать фиксированное или постоянное присвоение конфигурационных параметров для заданного клиента
Краткий обзор протокола
С точки зрения клиента, DHCP является расширением механизма BOOTP. Такая схема позволяет существующим BOOTP-клиентам успешно сотрудничать с DHCP-серверами без необходимости изменения стартовой программы клиента. В RFC-1542 [6.2] детализировано взаимодействие между BOOTP и DHCPклиентами и серверами [6.8]. Имеется несколько новых, опционных операций, которые оптимизируют взаимодействие между DHCPклиентами и серверами.
На рис. 6.1 представлен формат сообщения DHCP, а в таблице 4.1 перечислены поля этого сообщения. Числа в скобках указывают размер каждого из полей в октетах.
Существует два принципиальных отличия между DHCP и BOOTP. Во-первых, DHCP определяет механизмы, через которые клиентам на определенное время могут быть присвоены сетевые адреса, давая возможность последовательного присвоения сетевого адреса различным клиентам. Во-вторых, DHCP предоставляет механизм, который позволяет клиенту получить все необходимые ему для работы конфигурационные параметры.
DHCP вводит небольшое изменение в терминологию, имеющее целью прояснить значение одного из полей. Поле vendor extensions в BOOTP переименовано в поле опции в DHCP. Аналогично, помеченные информационные элементы, использованные в поле BOOTP vendor extensions, которые именовались как расширения производителя, теперь называются просто опции.
DHCP определяет новую опцию client identifier, которая используется для прямой передачи идентификатора клиента DHCP серверу. Это изменение исключает перегрузку поля chaddr в сообщениях BOOTP, где chaddr используется как в качестве аппаратного адреса для пересылки сообщений откликов BOOTP, так и в качестве идентификатора клиента. Идентификатор клиента представляет собой непрозрачный ключ, который не должен интерпретироваться сервером; например, идентификатор клиента может содержать аппаратный адрес, идентичный тому, который лежит в поле chaddr, или он может содержать другой идентификатор типа, такой, как DNS-имя. Идентификатор клиента, выбранный DHCP клиентом, должен быть уникальным для субсети, к которой он подключен. Если клиент использует идентификатор клиента в одном сообщении, он должен использовать тот же идентификатор во всех последующих сообщениях, чтобы гарантировать корректную идентификацию клиента всеми серверами. DHCP определяет поле siaddr как адрес сервера для применения во время следующего шага процесса начальной загрузки клиента. DHCP-сервер может прислать свой собственный адрес в поле siaddr, если сервер готов обеспечить последующую загрузку (например, доставку образа операционной системы). DHCP-сервер всегда присылает свой адрес в опции server identifier. Назначения полей заголовка представлены в таблице 6.1.
поле | байт | описание |
---|---|---|
op | 1 | Код операции сообщения / тип сообщения |
1 | 1= BOOTREQUEST, 2 = BOOTREPLY | |
htype | 1 | Тип аппаратного адреса, смотри раздел ARP в RFC "Assigned Numbers"; например, '1' для Ethernet |
Hlen | 1 | Длина аппаратного адреса (например, '6' для Ethernet) |
Шаги | 1 | Клиент устанавливает это поле равным нулю, поле используется опционно агентами транспортировки, когда загрузка осуществляется через посредника |
Xid | 4 | ID-транзакции, случайное число, выбираемое клиентом и используемое как клиентом, так и сервером для установления соответствия между запросами и откликами |
Secs | 2 | Заполняется клиентом, число секунд с момента начала запроса адреса или рестарта процесса |
Флаги | 2 | Флаги (смотри рис. 6.1) |
Ciaddr | 4 | IP-адрес клиента заполняется только в случае, если клиент находится в состоянии BOUND, RENEW или REBINDING и может реагировать на запросы ARP |
Yiadd | 4 | IP-адрес следующего сервера, используемого в процессе загрузки; присылается сервером в DHCPOFFER, DHCPACK |
Giaddr | 4 | IP-адрес агента транспортировки, используется, когда загрузка осуществляется через посредника |
Chaddr | 16 | Аппаратный адрес клиента |
Sname | 64 | Опционное имя ЭВМ-сервера, строка завершается нулем |
Файл | 128 | Имя файла загрузки (Boot-файла), строка завершается нулем; имя generic или нуль в DHCPDISCOVER, полное описание прохода в DHCPOFFER |
Опции | var | Поле опционных параметров |
Поле опции имеет переменную длину. Клиент DHCP должен быть готов получать DHCP-сообщения с полем опции длиной, по крайней мере, 312 октетов. Это требование подразумевает, что DHCPклиент должен быть готов получать сообщения длиной до 576 октетов. DHCP-клиенты могут согласовать применение более длинных DHCP-сообщений с помощью опции maximum DHCP message size. Поле options может быть еще расширено в полях файл и sname.
В случае, когда клиент использует DHCP для начальной конфигурации (прежде чем программа клиента полностью сконфигурирована), DHCP требует использования клиентского программного обеспечения в вольной интерпретации RFC-1122. Программа должна принять и передать IP-уровню любой IP-пакет, доставленный по аппаратному адресу клиента, до того как IP-адрес будет сконфигурирован; DHCP-серверы и агенты транспортировки BOOTP могут быть неспособны доставить DHCP-сообщения клиентам, которые не могут принимать уникастные дейтограммы, до того, как программа TCP/IP сконфигурирована должным образом.
Чтобы работать с клиентами, которые не могут воспринимать уникастные IP-дейтограммы до того, как будет сконфигурирована программа, DHCP использует поле флаги [6.15]. Самый левый бит определен как флаг BROADCAST (B). Остающиеся биты поля флаги зарезервированы на будущее. Они должны быть установлены равными нулю клиентами и игнорироваться серверами и агентами транспортировки. На рис. 6.2 показан формат поля флаги.
B: флаг BROADCAST MBZ: должно быть равно нулю (must be zero; зарезервировано на будущее)