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
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:
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