仕 様
embOS / IP FTPクライアントにはTCP / IPスタックが必要です。embOS / IP用に最適化されていますが、RFC準拠のTCP / IPスタックを使用できます。出荷には標準のWinsock APIを使用するWin32シミュレーションと、embOS / IPのソケットAPIを使用する実装が含まれています
RFC実装
[RFC 959] FTP - File Transfer Protocol
直接ダウンロード:ftp://ftp.rfc-editor.org/in-notes/rfc959.txt
FTPの背景
・ ファイル転送プロトコル(FTP)はアプリケーション層プロトコルです。FTPは、「データ」ポートと「CMD」(コマンド)ポートの2つのポートを使用するという点で、珍しいサービスです。伝統的には、コマンドポートのポート21とデータポートのポート20です。FTPは、アクティブモードとパッシブモードの2つのモードで使用できます。モードによっては、データポートが常にポート20にあるとは限りません。
・ FTPクライアントがサーバーに接続すると、2台のマシン間でTCP接続が確立されます。サーバーは、操作を開始するとパッシブオープン(ソケットはリッスン)を行います。その後、クライアントはアクティブなオープンを介してサーバーに接続できます。このTCP接続は、クライアントがサーバーとのセッション(通常は人間のユーザーによって決まります)を維持し、クライアントからサーバーにコマンドを伝えるために使用され、サーバーはクライアントに返信し続ける限り持続します。この接続をFTPコマンド接続と呼びます。
・ クライアントからサーバーへのFTPコマンドは、ASCII文字の短いセットとオプションのコマンド・パラメーターで構成されます。たとえば、現在の作業ディレクトリを表示するFTPコマンドはPWD(Working Working Directory)です。すべてのコマンドは、キャリッジリターンラインフィードシーケンス(CRLF)(ASCII 10,13またはCtrl-J、Ctrl-M)で終了します。サーバーの応答は、3桁のコード(ASCII形式)とそれに続く説明テキストで構成されています。一般的に200のコードは成功し、500は失敗です。返信コードの完全なガイドについては、RFCを参照してください。ほとんどのFTPクライアントは冗長モードをサポートしているため、ユーザーはコマンドが進行するにつれてこれらのコードを見ることができます。
・ FTPコマンドでサーバーが大量のデータ(ファイルなど)を移動する必要がある場合、これを行うには2番目のTCP接続が必要です。これは、前述のコマンド接続とは対照的に、FTPデータ接続と呼ばれます。アクティブモードでは、データ接続はサーバによってリッスンクライアントに戻されます。パッシブモードでは、クライアントはデータ接続も開きます。データ接続は、必要なデータを転送する場合にのみ維持されます。すべてのデータが送信されるとすぐに閉じます。
アクティブモードFTP
アクティブモードのFTPでは、クライアントは、特権のないポートP(P> 1023)からFTPサーバーのコマンドポート(ポート21)に接続します。次に、クライアントはポートP + 1のリスンを開始し、FTPコマンドPORT P + 1をFTPサーバー。サーバは、ローカルデータポート(ポート20)からクライアントの指定されたデータポートに接続し直します。
パッシブモードFTP
受動モードFTPでは、クライアントは、非特権ポートP(P> 1023)からFTPサーバーのコマンドポート(ポート21)に接続します。クライアントがデータ転送用の受動ポートを開き、サーバ側からの接続では、クライアントはパッシブモードで「PASV」コマンドをサーバに送信し、サーバがどのポート上でデータ接続をリスンしているかに関する情報を含む応答を期待する。
この情報を受け取ったクライアントは、ローカルデータポートからサーバーの指定されたデータポートに接続します。