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

редактировать

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

Содержание
  • 1 Обзор
  • 2 Протокол
    • 2.1 Структура пакета
    • 2.2 Команды
    • 2.3 Запросы и ответы
    • 2.4 Создание, обслуживание и разрыв сеанса
    • 2.5 Получение информации о сервере с помощью GetStatus
    • 2.6 Коды ошибок
  • 3 Дальнейшие исследования
  • 4 Сноски
  • 5 Ссылки
Обзор

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

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

Протокол

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

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

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

Поля:

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

Команды

Есть семь возможных команд:

Команды DSI
ИмяКодDirectio nОписание
DSICloseSession1ОбаЗакрывает установленный сеанс
DSICommand2От клиентаПрикрепленная полезная нагрузка содержит команду AFP
DSIGetStatus3От клиентаПолучить информацию о сервере
DSIOpenSession4От клиентаУстановить новый сеанс
DSITickle5ОбаУбедитесь, что соединение активно
DSIWrite6От клиентаЗаписать данные на сервер
DSIAttention8С сервераПривлечь внимание клиента

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Коды ошибок

Возвращаемые коды ошибок - это коды результатов AFP.

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

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

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

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

Сноски
Ссылки
  • Протокол хранения AppleTalk версий 2.1 и 2.2 [1]
  • Внутри AppleTalk Sidhu, Gurharan S.; Эндрюс, Ричард Ф.; Оппенгеймер, Алан Б. (май 1990 г.), Inside AppleTalk, второе издание, Addison-Wesley Publishing Company, Inc., ISBN 0-201-55021-0
  • Руководство по программированию протокола Apple Filing Protocol [2]
  • Справочник по протоколу архивации Apple [3pting
Последняя правка сделана 2021-05-17 14:09:03
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте