Интерфейс потока данных
Интерфейс потока данных (DSI) — это сеансовый уровень, используемый для передачи трафика Apple Filing Protocol через протокол управления передачей .
Обзор
[ редактировать ]Когда в 1990-х годах Apple представила TCP с MacTCP и Open Transport в System 7 , им нужно было, чтобы их протокол общего доступа к файлам (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 | Полезная нагрузка |
Поля:
- Флаги : является ли пакет запросом (0x00) или ответом (0x01).
- Команда: одна из 7 возможных команд (см. ниже).
- Идентификатор запроса: последовательный идентификатор, установленный в запросе и копируемый в ответе.
- Код ошибки/смещение вложенных данных:
- Для запросов это значение остается равным 0, за исключением случаев использования команды DSIWrite.
- Для ответов это код ошибки.
- Общая длина данных: вся длина данных после заголовка DSI.
- Зарезервировано: для будущего расширения
- Полезная нагрузка: здесь размещаются ограниченные данные DSI или, чаще всего, заголовок AFP.
Команды
[ редактировать ]Существует семь возможных команд: [2]
Имя | Код | Направление | Описание |
---|---|---|---|
DSICloseSession | 1 | Оба | Закрывает установленную сессию |
DSIКоманда | 2 | От клиента | Прикрепленные полезные данные содержат команду AFP. |
DSIGetStatus | 3 | От клиента | Получить информацию о сервере |
ДСИОпенсессион | 4 | От клиента | Создать новую сессию |
DSITickle | 5 | Оба | Убедитесь, что соединение активно |
DSIWrite | 6 | От клиента | Запись данных на сервер |
DSI Внимание | 8 | С сервера | Привлеките внимание клиента |
Запросы и ответы
[ редактировать ]При получении большинства запросов DSI клиент или сервер отправляет ответное сообщение. Этот ответ содержит:
- поле flags установлено в 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. Он используется клиентом для получения информации с сервера, на котором он не зарегистрирован.
Элементы данных организованы в пакет с каталогом индексов, указывающих на структурированные данные. [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 (ASP), и обзор в журнале Inside AppleTalk, второе издание, может оказаться полезным.
Самым кратким руководством является «AFP через TCP» глава Руководства по программированию протокола Apple Filing Protocol .
Важный источник информации для понимания DSI можно найти, анализируя связь между клиентами и серверами AFP с помощью анализатора пакетов.
Сноски
[ редактировать ]- ^ «DSIHeader» в «Справочнике по протоколу подачи документов Apple»
- ^ «Команды DSI» в «Руководстве по программированию протокола подачи документов Apple»
- ^ «FPGetSrvrInfo» в «Справочнике по протоколу подачи документов Apple»
- ^ «DSIGetStatus» в «Справочнике по протоколу подачи документов Apple»
- ^ «Коды результатов» в «Справочнике по протоколу подачи заявок Apple»
Ссылки
[ редактировать ]- Протокол хранения файлов AppleTalk версии 2.1 и 2.2 [1]
- Внутри AppleTalk Сидху, Гурхаран С.; Эндрюс, Ричард Ф.; Оппенгеймер, Алан Б. (май 1990 г.), Inside AppleTalk, второе издание , Addison-Wesley Publishing Company, Inc., ISBN 0-201-55021-0