Интерфейс потока данных (DSI) - это уровень сеанса используется для передачи трафика Apple Filing Protocol через Протокол управления передачей.
Когда 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:
Смещение бит | Биты 0–7 | 8-15 | 15-23 | 24-31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Флаги | Команда | Идентификатор запроса | |||||||||||||||||||||||||||||
32 | Код ошибки / смещение заключенных данных | |||||||||||||||||||||||||||||||
64 | Общая длина данных | |||||||||||||||||||||||||||||||
96 | Зарезервировано | |||||||||||||||||||||||||||||||
128 | Полезная нагрузка |
Поля:
Есть семь возможных команд:
Имя | Код | Directio n | Описание |
---|---|---|---|
DSICloseSession | 1 | Оба | Закрывает установленный сеанс |
DSICommand | 2 | От клиента | Прикрепленная полезная нагрузка содержит команду AFP |
DSIGetStatus | 3 | От клиента | Получить информацию о сервере |
DSIOpenSession | 4 | От клиента | Установить новый сеанс |
DSITickle | 5 | Оба | Убедитесь, что соединение активно |
DSIWrite | 6 | От клиента | Записать данные на сервер |
DSIAttention | 8 | С сервера | Привлечь внимание клиента |
После получения большинства запросов DSI клиент или сервер отправляет ответное сообщение. Этот ответ содержит:
Команды DSITickle и DSICloseSession не вызывают ответа.
Сеанс настраивается клиентом, отправляющим DSIOpenSession, который будет включать размер приемного буфера, который клиент имеет для пакетов (так называемый квант запроса, обычно 1024 байта). Сервер подтверждает запрос и возвращает размер своего буфера приема данных (обычно 256 КБ в Mac OS X Leopard).
Закрытие сеанса может быть инициировано любой стороной, отправив DSICloseSession. Отправителю не нужно ждать ответа, и он должен немедленно закрыть сеанс после отправки сообщения.
Поддержание соединения осуществляется щелчком. DSI обеспечивает механизм, гарантирующий, что клиент и сервер знают, что другой все еще активен. Каждые 30 секунд бездействия сервер отправляет клиенту запрос на щекотание. Точно так же клиент отправляет собственное щекотание. (Это НЕ ответный пакет.) Клиент или сервер могут завершить сеанс DSI, если они не получат ответа от другого в течение 120 секунд. Клиент также может отключиться, если запрос находится в полете, а в течение 60 секунд не было получено ни ответа, ни щелчка (в Mac OS X v.10.2 и новее).
Эта команда DSI инкапсулирует пакет FPGetSrvrInfo. Он используется клиентом для получения информации с сервера, на который он не вошел.
Элементы данных организованы в пакет с каталогом индексов, указывающих на структурированные данные.
Запрос на запрос DSIGetStatus заставит сервер ответить следующей информацией:
Формат ответа DSIGetStatus идентичен FPGetSrvrInfo AFP и используется для ASPGetStatus.
Возвращаемые коды ошибок - это коды результатов AFP.
DSI никогда не документируется отдельно, и он достаточно прост и статичен, чтобы старые ссылки подходят для современных реализаций. Концепции DSI идентичны протоколу сеанса AppleTalk (ASP), и обзор в Inside AppleTalk, Second Edition может быть полезным.
Самым кратким руководством является глава «AFP через TCP» в Руководстве по программированию протокола Apple Filing Protocol.
. Существенный источник информации для понимания DSI можно найти, проанализировав обмен данными. между клиентами и серверами AFP с помощью анализатора пакетов.