File Transfer Protocol
Simple File Transfer Protocolは、TFTPとFTPの中間的なレベルの複雑さを持つ(セキュアではない)FTPとして提案された。RFC 913で定義されている。このプロトコルもSSH File Transfer Protocolと同様"SFTP"と略称されるが、この略称を持つプロトコルの中ではSimple File Transfer Protocolの方が先に標準化されている。このプロトコルはインターネットで広く受け入れられず、このRFCはIETFによって"Historic"(歴史的文書)の状態とされている。
ポート115を介して実行され、多くの場合SFTPの初期設定を受信する。11のコマンドと、ASCII・バイナリ・連続の3つのデータ転送を持つ。 ワードサイズが8ビットの倍数であるシステムでは、バイナリモードと連続モードの実装は同じである。このプロトコルは、ユーザーIDとパスワードによるログイン、階層フォルダーとファイル管理(名前の変更、削除、アップロード、ダウンロード、上書きダウンロード、追加ダウンロード)に対応する。
FTPの動作モードには、データ転送用コネクションの確立方法の違いによりアクティブモード(active mode)とパッシブモード(passive mode)がある。どちらの場合でも、データ転送用コネクションとは別に制御用コネクションを使用する。制御用コネクションは、クライアント側が、特権付きでないランダムなポート番号Nから、サーバのポート21へのTCPのコネクションとして確立する。
アクティブモード(ポートモードとも言う)では、クライアントが制御用コネクションでFTPコマンド"PORT M"(Mはポート番号)をサーバに送信してポート番号を通知し、通知したポートMでサーバからのデータ転送用コネクションの接続を待ち受ける。サーバはポート20(FTPサーバのデータポート)からクライアントへのデータ転送用コネクションを確立する。
ファイアウォールやNAT(IPマスカレード)などを使った環境では場合によってはアクティブモードでは接続できないこともある。この場合はパッシブモードを使用する。このモードでは、クライアントは制御用コネクションで"PASV"コマンドをサーバに送信してパッシブモードを利用することを通知し、サーバはクライアントにサーバ側のIPアドレスとポート番号を通知する。
FTPサーバから返されるリターンコードはRFC 959で標準化されている。リターンコードは3桁の数値である。
1桁目は、成功、失敗、エラー・不完全な応答のいずれかを示す。
2yz – 成功応答
4yz, 5yz – 失敗応答
1yz, 3yz – エラー・不完全な応答
2桁目は、エラーの種類を表す。
x0z – 構文。構文エラーを表す。
x1z – 情報。情報の要求に応答する。
x2z – コネクション。制御用コネクションやデータ用コネクションに関するエラーを表す。
x3z – 認証とアカウント。ログインプロセスとアカウントに関するエラーを表す。
x4z – 未定義。
x5z – ファイルシステム。サーバのファイルシステムからのステータスコードを中継する。
3桁目は、2桁目で定義されている各カテゴリの詳細情報を提供するために使用される。
バイナリモード(イメージモードとも言う): 送信側のマシンは各ファイルをバイト単位で送信し、受信側はバイトストリーム(英語版)を保存する。送信側・受信側ともデータの変換を行わない。FTPの全ての実装に対してバイナリモードの対応が推奨されている。
EBCDICモード: EBCDIC文字セットを使用しているホスト間のプレーンテキストに使用される。
ローカルモード: 同じ設定の2台のコンピュータが独自のフォーマットでデータをASCIIに変換することなく送信できるようにする。
データ転送は以下の3つのモードのいずれかで行うことができる。
ストリームモード: データは連続したストリームとして送信される。FTPとしては処理は行わず、全ての処理をTCPに任せる。 データがレコードに分割されていない限り、End-of-file標識は必要ない。
ブロックモード: FTPはデータをいくつかのブロック(ブロックヘッダ、バイト数、データフィールドから構成される)に分割してからTCPに渡す。
圧縮モード: 単純なアルゴリズム(通常は連長圧縮)でデータを圧縮してからTCPに渡す。
FTPソフトウェアの中には、「モードZ」と呼ばれるDeflateを使用した圧縮モードを実装しているものがある。このモードはインターネットドラフトに記載されているが、標準化はされていない。