La interfaz de flujo de datos (DSI) es una capa de sesión que se utiliza para transportar el tráfico del Protocolo de archivo de Apple sobre el Protocolo de control de transmisión .
Descripción general
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.
Protocolo
DSI se habla entre un cliente y un servidor AFP. Toda la comunicación DSI contiene el siguiente encabezado DSI:
Estructura del paquete
Desplazamiento de bits | Bits 0–7 | 8-15 | 15-23 | 24-31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Banderas | Mando | ID de solicitud | |||||||||||||||||||||||||||||
32 | Código de error / desplazamiento de datos adjuntos | |||||||||||||||||||||||||||||||
64 | Longitud total de los datos | |||||||||||||||||||||||||||||||
96 | Reservado | |||||||||||||||||||||||||||||||
128 | Carga útil |
Los campos son:
- Banderas : si el paquete es una solicitud (0x00) o una respuesta (0x01)
- Comando: uno de los 7 comandos posibles (ver más abajo)
- ID de solicitud: un identificador secuencial establecido en la solicitud y copiado en la respuesta
- Código de error / desplazamiento de datos adjuntos:
- Para las solicitudes, esto se deja como 0, excepto cuando se usa el comando DSIWrite.
- Para las respuestas, este es un código de error.
- Longitud total de los datos: la longitud completa de los datos después del encabezado DSI
- Reservado: para futuras expansiones
- Carga útil: aquí es donde se colocan los datos DSI limitados o, más comúnmente, el encabezado AFP
Comandos
Hay siete comandos posibles: [2]
Nombre | Código | Dirección | Descripción |
---|---|---|---|
DSICloseSession | 1 | Ambas cosas | Cierra una sesión establecida |
DSICommand | 2 | Del cliente | La carga útil adjunta contiene un comando AFP |
DSIGetStatus | 3 | Del cliente | Obtener información sobre el servidor |
DSIOpenSession | 4 | Del cliente | Establecer una nueva sesión |
DSITickle | 5 | Ambas cosas | Asegúrese de que la conexión esté activa |
DSIWrite | 6 | Del cliente | Escribe datos en el servidor |
DSIAtención | 8 | Del servidor | Capte la atención del cliente |
Solicitudes y respuestas
Al recibir la mayoría de las solicitudes de DSI, el cliente o servidor envía un mensaje de respuesta. Esta respuesta contiene:
- el campo de banderas establecido en 0x01 (respuesta)
- el campo de comando establecido en el mismo valor que el campo de comando de la solicitud
- el mismo ID de solicitud enviado en la solicitud (utilizado para que el cliente encuentre la solicitud que se reconoce)
- totalDataLength establecido en la longitud de la carga útil (si corresponde).
- cuando corresponda, la carga útil de datos sigue el encabezado DSI. (Consulte el comando individual para obtener más detalles).
Los comandos DSITickle y DSICloseSession no activan una respuesta.
Creación, mantenimiento y desmontaje de sesiones
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 los paquetes (llamado cuanto de solicitud, por lo general 1024 bytes). El servidor reconoce la solicitud y devuelve el tamaño de su búfer de recepción de datos (normalmente 256k en Mac OS X Leopard).
El cierre de la sesión puede ser iniciado por cualquiera de los lados 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 haciendo 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. (Este NO es un paquete de respuesta). El cliente o el servidor pueden terminar la sesión DSI si no escuchan del otro durante 120 segundos. El cliente también puede desconectarse si hay una solicitud en curso y no se recibe ni una respuesta ni un toque en 60 segundos (en Mac OS X v.10.2 y posteriores).
Obtener información del servidor con GetStatus
Este comando DSI encapsula un paquete FPGetSrvrInfo. Un cliente lo utiliza para obtener información de un servidor en el que no está conectado.
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:
- banderas para las características básicas del servidor
- nombre del servidor (ASCII de 7 bits y UTF-8)
- firma: se utiliza para identificar de forma única el servidor para otras transacciones de AFP
- tipo de servidor: normalmente "Macintosh" o "Netatalk"
- una lista de cadenas que describen las versiones de AFP habladas (por ejemplo, "AFP3.2")
- Lista de UAM: una lista de cadenas que describen los métodos de autenticación de usuario (por ejemplo, "DHX2")
- un icono de 64x64 píxeles
- lista de servidores de directorio
El formato de respuesta DSIGetStatus es idéntico al FPGetSrvrInfo de AFP y se utiliza para ASPGetStatus. [4]
Códigos de error
Los códigos de error devueltos son códigos de resultado AFP. [5]
Más investigación
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 a los del Protocolo de sesión de AppleTalk (ASP), y la descripción general en Inside AppleTalk, Segunda edición puede ser útil.
La guía más sucinta 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 la DSI analizando la comunicación entre los clientes y los servidores AFP mediante un rastreador de paquetes.
Notas al pie
- ^ "DSIHeader" en "Referencia de protocolo de archivo de Apple"
- ^ "Comandos DSI" en "Guía de programación del protocolo de archivo de Apple"
- ^ "FPGetSrvrInfo" en "Referencia del protocolo de archivo de Apple"
- ^ "DSIGetStatus" en "Referencia del protocolo de presentación de Apple"
- ^ "Códigos de resultado" en "Referencia del protocolo de presentación de Apple"