5. Кодирование протокола, соединения и передача данных
Этот протокол предназначен для работы поверх ориентированных на соединение, надежных транспортов, где поток данных делится на октеты (блоки по 8 бит), и значимым является каждый октет и каждый бит.
Один из таких сервисов, LDAP поверх TCP, определён в разделе 5.2.
Данный сервис, как правило, применим к приложениям, которые являются поставщиками или потребителями основанных на X.500 служб каталогов в Интернет. Данная спецификация в основном создавалась с расчётом на отображение в TCP.
Спецификации, определяющие другие отображения, могут столкнуться с различными препятствиями.
Реализации LDAP поверх TCP должны (MUST) осуществлять это отображение так, как описано в разделе 5.2.
Данная схема показывает взаимосвязь между разными уровнями, участвующими в обмене между сторонами протокола:
+--------------------------+ | уровень сообщений LDAP | +--------------------------+ > LDAP PDU +--------------------------+ < данные | уровень SASL | +--------------------------+ > данные, защищённые SASL +--------------------------+ < данные | уровень TLS | Приложение +--------------------------+ > данные, защищённые TLS ------------+--------------------------+ < данные Транспорт | транспортное соединение | +--------------------------+
5.1. Кодирование протокола
Для обмена элементами протокола LDAP их нужно (SHALL) кодировать с использованием основных правил кодирования Basic Encoding Rules [BER] [ASN.1] со следующими ограничениями:
Используется только определённая форма длины кодировки.
Значения OCTET STRING кодируются только в примитивной форме.
Если значение типа BOOLEAN установлено в true, октет закодированного значения устанавливается в шестнадцатеричное "FF".
Если значение типа установлено в его значение по умолчанию, оно отсутствует. В определении этого протокола только у некоторых типов BOOLEAN и INTEGER есть значение по умолчанию.
Эти ограничения предназначены для снижения накладных расходов на кодирование и декодирование определенных элементов в BER.
Эти ограничения не применяются к типам ASN.1, инкапсулированным в значения строк OCTET STRING, таким как значения атрибутов, если не указано иное.
5.2. Transmission Control Protocol (TCP)
Закодированные PDU LDAPMessage напрямую отображаются на поток TCP [RFC793] с использованием основанного на BER кодирования, описанного в разделе 5.1. Рекомендуется, чтобы реализации сервера, работающие поверх TCP, ожидали соединения по протоколу на порту LDAP 389, назначенному Internet Assigned Numbers Authority (IANA) [PortReg]. Вместо этого серверы могут ожидать соединения на порту с другим номером. Клиенты должны (MUST) поддерживать возможность связываться с серверами на любом действительном порту TCP.
5.3. Прекращение сессии LDAP
Обычно прекращение сессии LDAP инициируется клиентом, посылающим запрос UnbindRequest (раздел 4.3), либо сервером, посылающим уведомление об отключении (раздел 4.4.1). В этих случаях каждая сторона протокола корректно завершает сессию LDAP путём прекращения обменов на уровне сообщений LDAP, разрыва (если он установлен) уровня SASL, разрыва (если он установлен) уровня TLS и закрытия транспортного соединения.
Стороны протокола могут определить, что продолжение какого-либо взаимодействия может привести к пагубным последствиям, в таком случае они могут сразу завершить сессию путём прекращения обменов и закрытия транспортного соединения.
В любом случае, если сессия LDAP прекращена, незавершённые операции обрабатываются как указано в разделе 3.1.