2.3 FTPモデル (THE FTP MODEL)
上記の定義を念頭に置いて、FTPサービスの以下のモデル (図1に示す) を図式化できます。
-------------
|/---------\|
|| User || --------
||Interface|<--->| User |
|\---------/| --------
---------- | User-PI |
|/------\| FTPコマンド | User-DTP |
||Server|<---------------->| |
|| PI || FTP応答 -------------
|\------/|
|/------\|
||Server||
|| DTP ||
|\------/|
----------
Server-FTP User-FTP
図1 FTP使用のモデル
このモデルでは、ユーザープロトコルインタプリタ (User-PI) が制御接続を開始します。制御接続はTelnetプロトコルに従い、ユーザーの開始時に、user-PIとserver-PI間で標準的なコマンドと応答のセットが送信されます。この接続は、実行される機能を記述するコマンドと、これらのコマンドに対する応答の伝送に使用されます。これらのコマンドは、データ転送機能を実行するために第2の接続、つまりデータ接続を確立する必要があることを示す場合があります。ユーザーデータ転送プロセス (User-DTP) は、指定されたデータポートで「待ち受け (listen)」を行うべきであり、これは転送要求コマンドを送信する前に行う必要があります (BEFORE)。サーバーは、そのデータ転送プロセス (Server-DTP) からデータ接続を開始し、待ち受けデータポートに接続します。接続確立の方向は重要です。別の状況では、ユーザーがserver-DTPへのデータ接続を開始する場合があります。このクラスの接続はパッシブ (Passive) として定義されます。
データ接続は転送のために開かれ、転送が完了すると閉じられます。データ接続を介して転送されるデータには、サーバーホストに保存されるデータ、サーバーホストから取得されるデータ、またはサーバー側機能の実行に使用されるデータが含まれます。第3のケースでは、データ接続を介して伝送される情報は、実際にファイルとして保存されるのではなく、サーバーサイトのアプリケーションプログラムで使用するためのものである可能性があります。これらの一般的なデータ接続の使用は、サーバーサイトでの取得、ストレージ、および実行のために存在します。
通信 (COMMUNICATION)
user-PIとserver-PIは、標準FTPコマンドのセットを交換することでユーザープロトコルを実行します。データ転送は、別個のデータ接続を介してデータを転送することによって実行されます。この手順により、制御とデータ転送が独立したパス上で発生することができます。
user-PIはすべてのコマンドを開始し、server-PIはFTP応答で応答します。user-PIは、応答を待たずに複数のFTPコマンドを送信できます。server-PIは、コマンドが受信された順序で送信された各FTPコマンドに応答します。応答は、前のコマンドの結果として、server-PIが長時間の操作を実行している場合、遅延される可能性があります。これが発生した場合、server-PIは、コマンドが受信されたが、処理がまだ完了していないことを示す予備応答 (Preliminary Reply) を送信する場合があります。操作が完了すると、server-PIは完了応答 (Completion Reply) を送信します。
FTP応答は、ファイル転送のプロセスにおける要求とアクションの同期を保証し、ユーザープロセスが常にサーバーの状態を知っていることを保証するために考案されています。すべてのコマンドは少なくとも1つの応答を生成しなければなりませんが (must)、複数の応答がある場合もあります。後者の場合、複数の応答は容易に区別できる必要があります。さらに、一部のコマンドは、USER、PASS、ACCTや、RNFRとRNTOなどの順次グループで発生します。応答は、すべての先行コマンドが成功した場合、中間状態の存在を示します。シーケンスの任意のポイントでの障害は、シーケンス全体を最初から繰り返す必要があります。
データ接続 (DATA CONNECTIONS)
データを転送するメカニズムは、適切なポートへのデータ接続を設定し、転送のパラメータを選択することで構成されます。転送が行われる前に、両側がデータ接続のパラメータについて合意している必要があります。これらのパラメータは、データポート、表現タイプ、構造、および伝送モードで構成されます。
表現タイプは、ファイルデータの表現方法を定義します。これには、データタイプ (ASCII、EBCDIC、またはImage) とフォーマット制御が含まれます。構造は、ファイルの構造化方法を定義します。3つの構造がサポートされています: ファイル構造、レコード構造、およびページ構造です。伝送モードは、データの伝送方法を定義します。3つの伝送モードが定義されています: ストリームモード、ブロックモード、および圧縮モードです。
これらのパラメータの選択は、user-PIとserver-PI間のFTPコマンドと応答の交換によってネゴシエートされます。これらのパラメータのデフォルト値はプロトコルで定義されています。ユーザーがパラメータを指定しない場合、デフォルトが想定されます。