Data Stream Interface

Data Stream Interface (DSI) は、TCP上でApple Filing Protocol (AFP) のトラフィックを運ぶために使用されるセッション層プロトコルです。1990年代にAppleが漢字Talk7にMacTCPOpen Transportを導入した際、TCPとAppleTalkの両方で動作するAFPが必要となり、AFP 2.xではAppleTalk Session Protocol (ASP) と共に、TCP用のDSIが導入されました。DSIは、Mac OSやafpfs-ngといったAFPクライアントに直接実装されています。

DSIプロトコル



DSIは、クライアントとAFPサーバー間の通信で使用されます。全てのDSIのやり取りには、以下の構造を持つDSIヘッダが含まれます。


パケット構造:

フラグ (1バイト): パケットがリクエスト (0x00) かリプライ (0x01) かを示す。
コマンド (1バイト): 7種類の有効なコマンドのいずれかを示す。
リクエストID (2バイト): リクエストとそれに対応するリプライを識別するシーケンシャルなID。
エラーコード/データオフセット (2バイト): リクエスト時はゼロ、リプライ時はエラーコードを格納。DSIWriteコマンドの場合はデータのオフセット。
全データ長 (4バイト): DSIヘッダに続くデータ全体の長さ。
予約済 (2バイト): 将来の拡張のために予約された領域。
ペイロード (可変長): DSIデータまたはAFPヘッダ。


DSIコマンド



7つの有効なコマンドが定義されています。これらのコマンドは、セッションの確立、維持、解除、およびサーバー情報の取得などに使用されます。

リクエストとリプライ



全てのDSIリクエストは、リプライメッセージで応答されます。リプライには、以下の情報が含まれます。

  • - フラグフィールド: 0x01 (リプライ) に設定。
  • - コマンド: リクエストと同じ値。
  • - リクエストID: リクエストと同じID (クライアントが対応するリプライを識別するため)。
  • - データ長とデータ: 任意。

セッション管理



セッションは、クライアントがDSIOpenSessionを送信して開始されます。この際、DSIAttentionパッケージ用のクライアント受信バッファサイズ (Attention Quantum、通常1024) が含まれます。サーバーは要求を受け入れ、自身のデータ受信バッファサイズ (Mac OS X Leopardでは通常256k) を返します。セッションの解除は、どちらの側からでもDSICloseSessionを送信して行えます。送信側はリプライを待たずにセッションを閉じます。

コネクションの維持



コネクションの維持は、tickling(くすぐり)と呼ばれるメカニズムで行われます。DSIは、クライアントとサーバーが互いにアクティブであることを保証するための仕組みを提供しています。30秒間非アクティブな状態が続くと、サーバーはクライアントにtickleリクエストを送信し、自身にtickleを返します。クライアントがtickleリクエストを受信しない場合、クライアントもtickleを送信します。120秒間、お互いからtickleを受信しなかった場合、DSIセッションは終了されます。

GetStatusコマンド



DSIGetStatusコマンドは、サーバーにログインせずにサーバーの情報を取得するために使用される最も複雑なコマンドです。返されるデータは、構造化データを示すインデックスのカタログを持つパケットにまとめられます。DSIGetStatusリクエストは、サーバーから以下の情報を取得します。

  • - サーバーの基本的な性質を示すフラグ。
  • - サーバー名 (7ビットASCIIおよびUTF-8)。
  • - シグネチャ: 他のAFPトランザクションのサーバーと一意に識別するために使用。
  • - サーバータイプ: 通常は "Macintosh" または "Netatalk"。
  • - AFPバージョンを示す文字列のリスト (例: "AFP3.2")。
  • - ユーザー認証方法 (UAM) を示す文字列のリスト (例: "DHX2")。
  • - 64x64ピクセルのアイコン。
  • - ディレクトリサーバーのリスト。

DSIGetStatusリプライは、AFPやASPのFPGetSrvrParmsと同じ情報を提供します。

エラーコード



エラーコードは、AFPリターンコードに基づいています。

参考文献



DSIは、単独で詳細に解説されることは少ないですが、比較的シンプルで静的なプロトコルです。古い参考文献も現在の実装に適用できます。DSIの概念はAppleTalk Session Protocol (ASP) と類似しており、『Inside AppleTalk, Second Edition』で概説されています。また、より簡潔な説明として、"AFP over TCP" の章が『Apple Filing Protocol Version 2.1 and 2.2』にあります。さらに、パケットスニファを使ってAFPサーバーとクライアント間の通信を解析することもDSIを理解する上で役立ちます。


参考資料



AppleTalk Filing Protocol Version 2.1 and 2.2 [1]
Inside AppleTalk Sidhu, Gurharan S.; Andrews, Richard F.; Oppenheimer, Alan B. (May 1990), Inside AppleTalk, Second Edition, Addison-Wesley Publishing Company, Inc., ISBN 0-201-55021-0 
Apple Filing Protocol Programming Guide, April 4, 2006 [2]
Apple Filing Protocol Reference, May 23, 2006 [3]

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。