Интерфейс потока данных

Интерфейс потока данных (DSI) — это сеансовый уровень, используемый для передачи трафика Apple Filing Protocol по протоколу управления передачей .

Обзор

Когда Apple представила TCP с MacTCP и Open Transport в System 7 в 1990-х годах, им нужно было, чтобы их протокол обмена файлами (AFP) работал как на TCP, так и на AppleTalk . Они представили AppleTalk Session Protocol (ASP) и DSI для TCP одновременно с AFP 2.x.

DSI реализован непосредственно в клиентах AFP, таких как Mac OS и afpfs-ng.

Протокол

DSI передается между клиентом и сервером AFP. Вся коммуникация DSI содержит следующий заголовок DSI:

Структура пакета

Заголовок DSI [1]
Смещение битаБиты 0–78-1515-2324-31
0ФлагиКомандаЗапросить идентификатор
32Код ошибки/смещение вложенных данных
64Общая длина данных
96Сдержанный
128Полезная нагрузка

Поля:

  • Флаги : является ли пакет запросом (0x00) или ответом (0x01)
  • Команда: одна из 7 возможных команд (см. ниже)
  • Идентификатор запроса: последовательный идентификатор, установленный в запросе и скопированный в ответ.
  • Код ошибки/смещение вложенных данных:
    • Для запросов это значение остается равным 0, за исключением случаев использования команды DSIWrite.
    • Для ответов это код ошибки.
  • Общая длина данных: вся длина данных после заголовка DSI.
  • Зарезервировано: для будущего расширения
  • Полезная нагрузка: здесь размещаются ограниченные данные DSI или, чаще, заголовок AFP.

Команды

Существует семь возможных команд: [2]

DSI-команды
ИмяКодНаправлениеОписание
DSIЗакрыть сеанс1ОбаЗакрывает установленный сеанс
DSIКоманда2От клиентаПрикрепленная полезная нагрузка содержит команду AFP
DSIGetStatus3От клиентаПолучить информацию о сервере
DSIOpenSession4От клиентаУстановить новую сессию
DSITickle5ОбаУбедитесь, что соединение активно.
DSIWrite6От клиентаЗапись данных на сервер
DSIВнимание8С сервераПривлеките внимание клиента

Запросы и ответы

При получении большинства запросов DSI клиент или сервер отправляет ответное сообщение. Этот ответ содержит:

  • поле флагов установлено на 0x01 (ответ)
  • поле команды установлено на то же значение, что и поле команды запроса
  • тот же идентификатор запроса, который был отправлен в запросе (используется для того, чтобы клиент мог определить, что запрос подтверждается)
  • totalDataLength устанавливается равным длине полезной нагрузки (если применимо).
  • где применимо, сама полезная нагрузка данных после заголовка DSI. (Подробности см. в описании отдельной команды.)

Команды DSITickle и DSICloseSession не вызывают ответ.

Создание, обслуживание и завершение сеанса

Сеанс устанавливается клиентом, отправляющим DSIOpenSession, который будет включать размер буфера приема, который клиент имеет для пакетов (называемый квантом запроса, обычно 1024 байта). Сервер подтверждает запрос и возвращает размер своего буфера приема данных (обычно 256 КБ в Mac OS X Leopard).

Закрытие сеанса может быть инициировано любой из сторон путем отправки DSICloseSession. Отправителю не нужно ждать ответа, и он должен немедленно закрыть сеанс после отправки сообщения.

Поддержание соединения осуществляется с помощью tickling . DSI предоставляет механизм, гарантирующий, что клиент и сервер знают, что другой все еще активен. Каждые 30 секунд бездействия сервер отправляет клиенту запрос tickle. Аналогично клиент также отправляет свой собственный tickle. (Это НЕ ответный пакет.) Либо клиент, либо сервер могут завершить сеанс DSI, если они не получают ответа от другого в течение 120 секунд. Клиент также может отключиться, если запрос находится в процессе выполнения, а ни ответа, ни tickle не получено в течение 60 секунд (в Mac OS X v.10.2 и более поздних версиях).

Получение информации о сервере с помощью GetStatus

Эта команда DSI инкапсулирует пакет FPGetSrvrInfo. Он используется клиентом для получения информации с сервера, на котором он не зарегистрирован.

Элементы данных организованы в пакет с каталогом индексов, указывающих на структурированные данные. [3]

Запрос на DSIGetStatus заставит сервер ответить следующей информацией:

  • флаги для основных характеристик сервера
  • имя сервера (7-битный ASCII и UTF-8)
  • подпись: используется для уникальной идентификации сервера для других транзакций AFP
  • тип сервера: обычно «Macintosh» или «Netatalk»
  • список строк, описывающих версии AFP, которые используются в разговоре (например, «AFP3.2»)
  • Список UAM: список строк, описывающих методы аутентификации пользователя (например, «DHX2»).
  • значок размером 64x64 пикселя
  • список серверов каталогов

Формат ответа DSIGetStatus идентичен FPGetSrvrInfo AFP и используется для ASPGetStatus. [4]

Коды ошибок

Возвращаемые коды ошибок являются кодами результатов AFP. [5]

Дальнейшие исследования

DSI никогда не документируется отдельно и достаточно прост и статичен, чтобы старые ссылки подходили для современных реализаций. Концепции DSI идентичны AppleTalk Session Protocol (ASP), и обзор в Inside AppleTalk, Second Edition может быть полезен.

Наиболее кратким руководством является глава «AFP через TCP» в руководстве по программированию протокола Apple Filing Protocol.

Значительный источник информации для понимания DSI можно найти, проанализировав связь между клиентами и серверами AFP с помощью анализатора пакетов.

Сноски

  1. ^ "DSIHeader" в "Справочнике по протоколу Apple Filing"
  2. ^ «Команды DSI» в «Руководстве по программированию протокола Apple Filing»
  3. ^ "FPGetSrvrInfo" в "Справочнике по протоколу Apple Filing"
  4. ^ "DSIGetStatus" в "Справочнике по протоколу Apple Filing"
  5. ^ «Результирующие коды» в «Справочнике протокола Apple Filing»

Ссылки

  • Протокол подачи AppleTalk версии 2.1 и 2.2 [1]
  • Inside AppleTalk Сидху, Гурхаран С.; Эндрюс, Ричард Ф.; Оппенгеймер, Алан Б. (май 1990 г.), Inside AppleTalk, второе издание , Addison-Wesley Publishing Company, Inc., ISBN 0-201-55021-0
  • Руководство по программированию протокола Apple Filing [2]
  • Ссылка на протокол подачи документов Apple [3]
Получено с "https://en.wikipedia.org/w/index.php?title=Data_Stream_Interface&oldid=906680018"