Rozhraní datového proudu - Data Stream Interface
The Rozhraní datového proudu (DSI) je vrstva relace sloužící k přenosu Apple Filing Protocol provoz přes protokol kontroly přenosu.
Přehled
Když Apple představil TCP s MacTCP a Otevřete Transport v Systém 7 v 90. letech potřebovali, aby jejich protokol pro sdílení souborů (AFP) fungoval jak na TCP, tak na AppleTalk. Představili AppleTalk Session Protocol (ASP) a DSI pro TCP shodou okolností s AFP 2.x.
DSI je implementováno přímo do klientů AFP, například v Mac OS a afpfs-ng.
Protokol
O DSI se mluví mezi klientem a serverem AFP. Veškerá komunikace DSI obsahuje následující záhlaví DSI:
Struktura paketů
Bitový offset | Bity 0–7 | 8-15 | 15-23 | 24-31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Vlajky | Příkaz | ID požadavku | |||||||||||||||||||||||||||||
32 | Chybový kód / offset přiložených dat | |||||||||||||||||||||||||||||||
64 | Celková délka dat | |||||||||||||||||||||||||||||||
96 | Rezervováno | |||||||||||||||||||||||||||||||
128 | Užitečné zatížení |
Pole jsou:
- Vlajky: zda je paket požadavek (0x00) nebo odpověď (0x01)
- Příkaz: jeden ze 7 možných příkazů (viz níže)
- ID požadavku: sekvenční identifikátor nastavený na žádost a zkopírovaný v odpovědi
- Kód chyby / offset přiložených dat:
- U požadavků je toto ponecháno jako 0, s výjimkou použití příkazu DSIWrite.
- U odpovědí se jedná o chybový kód.
- Celková délka dat: celá délka dat za hlavičkou DSI
- Rezervováno: pro budoucí expanzi
- Užitečné zatížení: to je místo, kde jsou umístěna omezená data DSI nebo častěji záhlaví AFP
Příkazy
Existuje sedm možných příkazů:[2]
název | Kód | Směr | Popis |
---|---|---|---|
DSICloseSession | 1 | Oba | Ukončí navázanou relaci |
DSICommand | 2 | Od klienta | Připojené užitečné zatížení obsahuje příkaz AFP |
DSIGetStatus | 3 | Od klienta | Získejte informace o serveru |
DSIOpenSession | 4 | Od klienta | Vytvořte novou relaci |
DSITickle | 5 | Oba | Zkontrolujte, zda je připojení aktivní |
DSIWrite | 6 | Od klienta | Zápis dat na server |
Pozornost | 8 | Ze serveru | Získejte pozornost klienta |
Žádosti a odpovědi
Po přijetí většiny požadavků DSI odešle klient nebo server zprávu s odpovědí. Tato odpověď obsahuje:
- pole příznaků nastaveno na 0x01 (odpověď)
- příkazové pole nastaveno na stejnou hodnotu jako příkazové pole požadavku
- stejné ID požadavku zaslané v požadavku (používá se k tomu, aby klient našel potvrzený požadavek)
- totalDataLength nastavena na délku užitečného zatížení (je-li k dispozici).
- případně datové zatížení samotné po hlavičce DSI. (Podrobnosti najdete v samostatném příkazu.)
Příkazy DSITickle a DSICloseSession nespouštějí odpověď.
Vytváření relací, údržba a demontáž
Relace je nastavena klientem odesílajícím DSIOpenSession, který bude zahrnovat velikost přijímací vyrovnávací paměti, kterou má klient pro pakety (nazývá se kvantová žádost, obvykle 1024 bajtů). Server potvrdí požadavek a vrátí velikost vyrovnávací paměti pro příjem dat (obvykle 256 kB v systému Mac OS X Leopard).
Uzavření relace může být iniciováno oběma stranami odesláním DSICloseSession. Odesílatel nemusí čekat na odpověď a po odeslání zprávy by měl relaci okamžitě ukončit.
Údržba připojení se provádí pomocí lechtání. DSI poskytuje mechanismus zajišťující, aby klient a server věděli, že druhý je stále aktivní. Každých 30 sekund nečinnosti server odešle klientovi požadavek na tickle. Podobně klient také odešle svůj vlastní tickle. (Toto NENÍ paket odpovědí.) Klient nebo server může relaci DSI ukončit, pokud od druhého neslyší po dobu 120 sekund. Klient se může také odpojit, pokud je požadavek v letu a do 60 sekund není přijata odpověď ani šteklení (v systému Mac OS X v.10.2 a novějším).
Získání informací o serveru pomocí GetStatus
Tento příkaz DSI zapouzdřuje paket FPGetSrvrInfo. Používá ho klient k získání informací ze serveru, na který není přihlášen.
Datové prvky jsou uspořádány v paketu s katalogem indexů směřujících ke strukturovaným datům.[3]
Požadavek na požadavek DSIGetStatus způsobí, že server odpoví následujícími informacemi:
- příznaky základních charakteristik serveru
- název serveru (7bitové ASCII a UTF-8)
- signature: slouží k jedinečné identifikaci serveru pro další transakce AFP
- typ serveru: obvykle „Macintosh“ nebo „Netatalk“
- seznam řetězců popisujících mluvené verze AFP (např. „AFP3.2“)
- Seznam UAM: seznam řetězců popisujících metody autentizace uživatele (např. „DHX2“)
- ikona 64 x 64 pixelů
- seznam adresářových serverů
Formát odpovědi DSIGetStatus je identický s AFP FPGetSrvrInfo a používá se pro ASPGetStatus.[4]
Chybové kódy
Vrácené chybové kódy jsou kódy výsledků AFP.[5]
Další výzkum
DSI není nikdy dokumentováno samostatně a je dostatečně jednoduché a statické, že starší odkazy jsou vhodné pro moderní implementace. Koncepty DSI jsou identické s protokolem AppleTalk Session Protocol (ASP) a přehled v Uvnitř AppleTalk, druhé vydání může být užitečné.
Nejstručnějším průvodcem je „AFP over TCP“ kapitola Průvodce programováním protokolu Apple Filing Protocol.
Významný zdroj informací v porozumění DSI lze nalézt analýzou komunikace mezi klienty AFP a servery pomocí sledovače paketů.
Poznámky pod čarou
- ^ „DSIHeader“ v „Apple Filing Protocol Reference“
- ^ „Příkazy DSI“ v „Průvodci programováním protokolu Apple Filing Protocol“
- ^ „FPGetSrvrInfo“ v „Reference protokolu Apple Filing Protocol“
- ^ „DSIGetStatus“ v „Reference protokolu Apple Filing Protocol“
- ^ „Kódy výsledků“ v „Referenčním protokolu protokolu Apple Filing“
Reference
- AppleTalk Filing Protocol verze 2.1 a 2.2 [1]
- Uvnitř AppleTalk Sidhu, Gurharan S .; Andrews, Richard F .; Oppenheimer, Alan B. (květen 1990), Uvnitř AppleTalk, druhé vydání, Addison-Wesley Publishing Company, Inc., ISBN 0-201-55021-0