Data Stream Interface (DSI) は、TCP上でAFPのトラフィックを運ぶために使われるセッション層である。
1990年代にAppleが漢字Talk7にMacTCPやOpen Transportを導入した際、これらはTCPとAppleTalkの両方の上で動く ファイル共有プロトコル (AFP) を必要とした。AFP 2.xでは、AppleTalk Session Protocol (ASP) と、TCPのためのDSIを同時に導入した。
DSIはMac OSやafpfs-ngのようなAFPクライアントで直接実装されている。
DSIはクライアントとAFPサーバの間の会話で使われる。全てのDSIのやりとりは、以下のようなDSIヘッダを持つ。
それぞれのフィールド:
7つの有効なコマンドがある[2]:
処理された全てのDSIリクエストはリプライメッセージで応答される。リプライは以下を含む:
セッションはクライアントが送るDSIOpenSessionによって準備される。これはDSIAttentionパッケージのためのクライアントの受信バッファのサイズを含むであろう(Attention Quantumと呼ばれ、一般には1024である)。サーバは要求を受け入れ、データ受信バッファのサイズ(一般にはMac OS X Leopardで256k)を返す。
セッションの解除はDSICloseSessionを送ることにより、どちら側からでも行なうことができる。送り手はリプライを待つ必要はなく、メッセージを送った後にすぐセッションを閉じるべきである。
コネクションの維持はtickling(くすぐり)により行なわれる。DSIはクライアントとサーバが相手が今なおアクティブであることを知ることを保証するためのメカニズムを提供する。30秒毎の不活性期間をおいて、サーバはクライアントにtickleリクエストを送る。自分自身にtickleを返す。もしクライアントがそのようなリクエストを受け取らないなら、tickleを送る。クライアントもサーバも相手から120秒間tickleを聞くことがなければ、DSIセッションを終了できる。
これは最も複雑なDSIコマンドである。クライアントがサーバにログインすることなしに、サーバからの情報を得るのに使われる。
データの要素は構造化データを示すインデックスのカタログをもつパケットの中にまとめられる。[3]。
DSIGetStatus要求はサーバに以下の情報を返答させるであろう:
DSIGetStatusのリプライは、AFPやASPのFPGetSrvrParmsと同一である[4]。
エラーコードはAFPリターンコードである[5]。
DSIは決して単独で説明されず、じゅうぶんに単純で静的である。古い参考文献は現在の実装に適している。DSIの概念はAppleTalk Session Protocol (ASP) と同一であり、Inside AppleTalk, Second Editionの概説が参考になる。
最も簡潔な手引は、Apple Filing Protocol Version 2.1 and 2.2の "AFP over TCP" の章である。
DSIを理解するのに重要な情報源は、パケットスニファを使ってAFPサーバとクライアント間の会話を解析することである。