Wireless Home Digital Interface
- 1 year ago
- 0
- 0
Data Stream Interface (с англ. — «Интерфейс потока данных») или DSI — сеансовый уровень, разработанный компанией Apple, который отвечал за перемещение трафика AFP ( Apple Filing Protocol ) через TCP .
Когда в 1990-х годах Apple представила свою реализацию TCP в виде MacTCP и Open Transport для Mac OS 7, им потребовалось, чтобы их протокол распространения файлов (AFP) работал одновременно и с TCP, и с AppleTalk . По совпадению, они представили протокол ASP (AppleTalk Session Protocol) и DSI с выпуском версии aFP 2.x.
DSI встроен напрямую в AFP-клиенты, как, например, используемые в Mac OS и afpfs-ng.
DSI обеспечивает разговор между клиентом и сервером AFP. Все коммуникации DSI содержат в себе следующие заголовки:
Место бита | Биты 0–7 | 8-15 | 15-23 | 24-31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Флаги | Команда | ID запроса | |||||||||||||||||||||||||||||
32 | Код ошибки/ сдвиг содержащихся данных | |||||||||||||||||||||||||||||||
64 | Общая длина данных | |||||||||||||||||||||||||||||||
96 | Зарезервировано | |||||||||||||||||||||||||||||||
128 | Полезная нагрузка |
Значения полей:
Всего имеется 7 возможных команд:
Имя | Код | Направление | Описание |
---|---|---|---|
DSICloseSession | 1 | В обе стороны | Завершить установленную сессию |
DSICommand | 2 | От клиента | Присоединённая полезная нагрузка содержит команду AFP |
DSIGetStatus | 3 | От клиента | Получить информацию о сервере |
DSIOpenSession | 4 | От клиента | Начать новую сессию |
DSITickle | 5 | В обе стороны | Убедиться в активности подключения |
DSIWrite | 6 | От клиента | Записать данные на сервер |
DSIAttention | 8 | От сервера | Привлечь внимание клиента |
При получении большинства запросов DSI, клиент или сервер посылают ответное сообщение. Данное сообщение содержит:
Сессия запускается при помощи команды DSIOpenSession, отправляемой клиентом, которая будет включать в себя размер имеющегося у клиента буфера для приёма пакетов (т. н. квантов запросов, обычно 1024 байта). Сервер обрабатывает запрос и возвращает размер своего буфера приема данных (обычно 256 Кбайт на Mac OS X Leopard).
Закрытие сессии может быть инициировано с любой стороны при помощи команды DSICloseSession. Отправитель не должен в ожидании ответа и должен немедленно завершить сессию после отправки данного сообщения.
Поддержание связи осуществляется при помощи "щекотки" (англ. tickling). DSI предоставляет механизм для того, чтобы и клиент, и сервер знали, что другой всё ещё активен. Каждые 30 секунд отсутствия активности, сервер отправит запрос для привлечения внимания клиента. точно так же, клиент может отправить запрос серверу (это НЕ БУДЕТ являться ответным пакетом). Клиент или сервер могут самостоятельно завершить сессию, если не получат ответ от другого за 120 секунд. Клиент также может завершить сессию в момент отправления запроса, и тогда ни ответ, ни запрос активности не будет получен в ближайшие 60 секунд (начиная с версии Mac OS X v.10.2).
Данная команда получает пакет типа FPGetSrvrInfo. Он используется клиентом для получения информации с сервера, к которому он не подключён.
Элементы данных собираются в пакет с каталогом индексов, указывающих на структурированные данные.
Запрос на запрос DSIGetStatus приведет к ответу от сервера со следующей информацией:
Формат ответа DSIGetStatus идентичен формату FPGetSrvrInfo от AFP и используется для ASPGetStatus.
Коды ошибок возвращают коды результатов AFP.
DSI никогда не был отдельно задокументирован, и является гораздо более простым и статичным в сравнении с более старыми образцами, что делает его подходящим для современного применения. Концепты DSI идентичны по своему смыслу ASP, и поэтому обзор "Inside AppleTalk, Second Edition" может оказаться полезным.
Самым кратким руководством можно назвать главу из .
Значительную часть информации для понимания DSI можно найти при анализе передач между клиентами AFP и серверами при помощи анализатора трафика.