Dataströmsgränssnitt

Data Stream Interface (DSI) är ett sessionslager som används för att överföra Apple Filing Protocol- trafik över Transmission Control Protocol .

Översikt

När Apple introducerade TCP med MacTCP och Open Transport i System 7 på 1990-talet behövde de sitt fildelningsprotokoll (AFP) för att köras på både TCP och AppleTalk . De introducerade AppleTalk Session Protocol (ASP) och DSI för TCP samtidigt med AFP 2.x.

DSI implementeras direkt i AFP-klienter som i Mac OS och afpfs-ng.

Protokoll

DSI läses upp mellan en klient och en AFP-server. All DSI-kommunikation innehåller följande DSI-header:

Paketstruktur

DSI Header
Bit offset Bitar 0–7 8-15 15-23 24-31
0 Flaggor Kommando Begär ID
32 Felkod/ bifogad dataförskjutning
64 Total datalängd
96 Reserverad
128 Nyttolast

Fälten är:

  • Flaggor : om paketet är en begäran (0x00) eller ett svar (0x01)
  • Kommando: ett av 7 möjliga kommandon (se nedan)
  • Request ID: en sekventiell identifierare som ställs in på begäran och kopieras i svaret
  • Felkod/bifogad dataförskjutning:
    • För förfrågningar lämnas detta som 0, förutom när du använder kommandot DSIWrite.
    • För svar är detta en felkod.
  • Total datalängd: hela datalängden efter DSI-huvudet
  • Reserverad: för framtida expansion
  • Nyttolast: det är här begränsad DSI-data eller vanligare AFP-rubrik placeras

Kommandon

Det finns sju möjliga kommandon:

DSI-kommandon
namn Koda Riktning Beskrivning
DSICloseSession 1 Både Stänger en etablerad session
DSICommand 2 Från klient Bifogad nyttolast innehåller ett AFP-kommando
DSIGetStatus 3 Från klient Få information om servern
DSIOpenSession 4 Från klient Upprätta en ny session
DSITickle 5 Både Se till att anslutningen är aktiv
DSIWrite 6 Från klient Skriv data till servern
DSIAttention 8 Från servern Få kundens uppmärksamhet

Förfrågningar och svar

Efter att ha tagit emot de flesta DSI-förfrågningar skickar klienten eller servern ett svarsmeddelande. Detta svar innehåller:

  • flaggfältet inställt på 0x01 (svar)
  • kommandofältet satt till samma värde som begärans kommandofält
  • samma begäran-ID som skickades i begäran (används för att klienten ska hitta begäran som bekräftas)
  • totalDataLength ställs in på nyttolastlängden (om tillämpligt).
  • i tillämpliga fall, själva datanyttolasten efter DSI-huvudet. (Se det enskilda kommandot för detaljer.)

Kommandona DSITickle och DSICloseSession utlöser inget svar.

Session skapande, underhåll och rivning

En session ställs in genom att klienten skickar en DSIOpenSession, som kommer att inkludera storleken på mottagarbufferten som klienten har för paket (kallas förfrågningskvantum, vanligtvis 1024 byte). Servern bekräftar begäran och returnerar storleken på sin datamottagningsbuffert (vanligtvis 256k på Mac OS X Leopard).

Sessionsstängning kan initieras av båda sidor genom att skicka DSICloseSession. Avsändaren behöver inte vänta på svar och bör omedelbart stänga sessionen efter att ha skickat meddelandet.

Att upprätthålla anslutningen sker genom att kittla . DSI tillhandahåller en mekanism för att säkerställa att klient och server vet att den andra fortfarande är aktiv. Var 30:e sekund av inaktivitet skickar servern en kittlingsförfrågan till klienten. På samma sätt skickar klienten också sin egen kittling. (Detta är INTE ett svarspaket.) Antingen klienten eller servern kan avsluta DSI-sessionen om de inte hör från den andra under 120 sekunder. Klienten kan också koppla från om en förfrågan är på väg och varken ett svar eller kittling tas emot inom 60 sekunder (i Mac OS X v.10.2 och senare).

Få serverinformation med GetStatus

Detta DSI-kommando kapslar in ett FPGetSrvrInfo-paket. Den används av en klient för att hämta information från en server som den inte är inloggad på.

Dataelementen är organiserade i paketet med en katalog av index som pekar på strukturerad data.

Begäran till en DSIGetStatus-begäran får servern att svara med följande information:

  • flaggor för grundläggande serveregenskaper
  • servernamn (7-bitars ASCII och UTF-8)
  • signatur: används för att unikt identifiera servern för andra AFP-transaktioner
  • servertyp: vanligtvis "Macintosh" eller "Netatalk"
  • en lista med strängar som beskriver upplästa AFP-versioner (t.ex. "AFP3.2")
  • UAM-lista: en lista med strängar som beskriver användarautentiseringsmetoder (t.ex. "DHX2")
  • en 64x64 pixelikon
  • katalogserverlista

DSIGetStatus svarsformat är identiskt med AFP:s FPGetSrvrInfo och används för ASPGetStatus.

Felkoder

Felkoderna som returneras är AFP-resultatkoder.

Vidare forskning

DSI dokumenteras aldrig separat och är tillräckligt enkel och statisk för att äldre referenser är lämpliga för moderna implementeringar. Koncepten för DSI är identiska med AppleTalk Session Protocol (ASP), och översikten i Inside AppleTalk, Second Edition kan vara till hjälp.

Den mest kortfattade guiden är kapitlet "AFP över TCP" i programmeringsguiden för Apple Filing Protocol .

En betydande informationskälla för att förstå DSI kan hittas genom att analysera kommunikationen mellan AFP-klienter och servrar med hjälp av en paketsniffer.

Fotnoter

  • AppleTalk Filing Protocol version 2.1 och 2.2 [1]
  • Inuti AppleTalk   Sidhu, Gurharan S.; Andrews, Richard F.; Oppenheimer, Alan B. (maj 1990), Inside AppleTalk, andra upplagan , Addison-Wesley Publishing Company, Inc., ISBN 0-201-55021-0
  • Programmeringsguide för Apple Filing Protocol [2]
  • Apple Filing Protocol Reference [3]