La interfaz de flujo de datos (DSI) es una capa de sesión que se utiliza para transportar el tráfico del protocolo de archivos de Apple a través del protocolo de control de transmisión .
Cuando Apple introdujo TCP con MacTCP y Open Transport en System 7 en la década de 1990, necesitaban que su protocolo de intercambio de archivos (AFP) se ejecutara tanto en TCP como en AppleTalk . Introdujeron el protocolo de sesión AppleTalk (ASP) y DSI para TCP coincidiendo con AFP 2.x.
DSI se implementa directamente en clientes AFP, como Mac OS y afpfs-ng.
DSI se habla entre un cliente y un servidor AFP. Toda comunicación DSI contiene el siguiente encabezado DSI:
Los campos son:
Hay siete comandos posibles: [2]
Al recibir la mayoría de las solicitudes DSI, el cliente o servidor envía un mensaje de respuesta. Esta respuesta contiene:
Los comandos DSITickle y DSICloseSession no generan una respuesta.
El cliente configura una sesión enviando una DSIopenSession, que incluirá el tamaño del búfer de recepción que tiene el cliente para paquetes (llamado cuanto de solicitud, generalmente 1024 bytes). El servidor reconoce la solicitud y devuelve el tamaño de su buffer de recepción de datos (normalmente 256k en Mac OS X Leopard).
Cualquiera de las partes puede iniciar el cierre de la sesión enviando DSICloseSession. El remitente no necesita esperar una respuesta y debe cerrar la sesión inmediatamente después de enviar el mensaje.
El mantenimiento de la conexión se realiza mediante cosquillas . DSI proporciona un mecanismo para garantizar que el cliente y el servidor sepan que el otro todavía está activo. Cada 30 segundos de inactividad, el servidor envía una solicitud de cosquillas al cliente. Del mismo modo, el cliente también envía sus propias cosquillas. (Esto NO es un paquete de respuesta). Tanto el cliente como el servidor pueden finalizar la sesión DSI si no logran escuchar del otro durante 120 segundos. El cliente también puede desconectarse si una solicitud está en proceso y no se recibe respuesta ni cosquillas dentro de los 60 segundos (en Mac OS X v.10.2 y posteriores).
Este comando DSI encapsula un paquete FPGetSrvrInfo. Lo utiliza un cliente para obtener información de un servidor en el que no ha iniciado sesión.
Los elementos de datos están organizados en el paquete con un catálogo de índices que apuntan a datos estructurados. [3]
La solicitud a una solicitud DSIGetStatus hará que el servidor responda con la siguiente información:
El formato de respuesta DSIGetStatus es idéntico al FPGetSrvrInfo de AFP y se utiliza para ASPGetStatus. [4]
Los códigos de error devueltos son códigos de resultado de AFP. [5]
DSI nunca se documenta por separado y es lo suficientemente simple y estático como para que las referencias más antiguas sean adecuadas para implementaciones modernas. Los conceptos de DSI son idénticos al protocolo de sesión AppleTalk (ASP) y la descripción general de Inside AppleTalk, segunda edición puede resultar útil.
La guía más concisa es el capítulo "AFP sobre TCP" de la Guía de programación del protocolo de archivos de Apple.
Se puede encontrar una fuente importante de información para comprender DSI analizando la comunicación entre clientes y servidores AFP utilizando un rastreador de paquetes.