File Transfer Protocol の名前の通りで、ファイルを転送する時に使われる規則(現在の標準はRFC959です)です。
簡単な実験用のサーバーがここからダウンロードできます。
( FTPServer.exe と web_tool.xml
←右ボタンクリックのメニューより保存で、例えば C:\work へ保存して実験ください。)
C:\work に、この2つのファイルを置いて、実行する例を示します。 (web_tool.xmlにユーザー名とパスワードが記載されています。)
このFTPServer.exeは、ASCIIモードだけの実験用サーバーです。
このサーバーをのIPアドレス192.168.0.33のマシンのC:\workで動かし、test.txtを転送している例を示します。
別のマシンのD:\tempをカレントディレクトリで、
Windowsの ftpクライアントソフトを実行させて、コマンド操作をしている画面です。
(Password:に対して、abc123を入力していますが画面にでません。)
?の入力で、コマンドリストを表示させ、putコマンドで test.txtを転送し、lsコマンドで確認後に、
quitコマンドで終了させています。(■が入力です)
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\yuu>d: D:\>cd temp D:\temp>ftp 192.168.0.33 Connected to 192.168.0.33. 220 MyFTP Sever Ready. User (192.168.0.33:(none)): guest 331 Password required for guest. Password:abc123 と入力していますが見えません。 230 User guest logged in. ftp> ? Commands may be abbreviated. Commands are: ! delete literal prompt send ? debug ls put status append dir mdelete pwd trace ascii disconnect mdir quit type bell get mget quote user binary glob mkdir recv verbose bye hash mls remotehelp cd help mput rename close lcd open rmdir ftp> put test.txt 200 PORT command successful. 150 Opening ASCII mode data connection for test.txt. 226 Transfer complete. ftp: 11 bytes sent in 0.00Seconds 11000.00Kbytes/sec. ftp> ls 200 PORT command successful. 150 Opening ASCII mode data connection for file list. FTPServer.exe test.txt web_tool.xml 226 Transfer complete. ftp: 36 bytes received in 0.00Seconds 36000.00Kbytes/sec. ftp> quit 221 D:\temp>
以下に、192.169.0.123のIPアドレスになっているクライアントから、FTPサーバーに接続して、
フィルリストを受信するまでの流れを示します。
このように、コントロールコネクションとデータコネクションの2つのコネクションを使います。
一般には、21番のポート使うコントロールコネクションで、サーバー側が待ち受けます。
そして接続したクライアント側からは次のようなコマンドの文字列を送りコントロールします。
(*)のマークが付いているコマンドは、データコネクションを使ってコマンドの情報を送り合います。
上記では、クライアント側でサーバーからの接続を待機しています。この接続がデータコネクションです。
なお、データコネクションには「アクティブモード(active mode」と「パッシブモード(passive mode)」があり、
上記は「アクティブモード」の動作で、
データコネクションはサーバー側から能動的に接続する形態です。
対して「パッシブモード」では、PASVのコマンドでサーバー側が受身となりで接続を待ち受けます。
コマンド | 意味 |
---|---|
USER ユーザー名 | ログインする |
PASS パスワード | パスワード指定 |
QUIT | ログアウトする |
CWD ディレクトリ名 | ワーキングディレクトリ変更 |
PWD | ワーキングディレクトリ表示 |
TYPE 形式オプション | 転送データの形式を指定 |
PORT IPアドレスとポート番号 | クライアントのデータコネクションのIPアドレスとポート番号指示 例「PORT 192,168,1,7,4,76」 |
RETR ファイル名 | ダウンロード(*) |
STOR ファイル名 | アップロード(*) |
NLST | ファイル一覧取得(*) |
LIST | ファイル一覧取得(*) |
DELE ファイル名 | 指定ファイルを削除 |
MKD ディレクトリ名 | 指定ディレクトリを作成 |
RMD ディレクトリ名 | 指定ディレクトリを削除 |
RNFR ファイル名 | 変更する前ファイル名指定 |
RNTO ファイル名 | 変更後のファイル名指定 |
例えば、ftpクライアントで接続して、ログイン後に「test.gif」のファイルをアップロードする場合は
put test.gif のキー入力で行いますが、その内部では次の順番のコマンドが送られてています。
PORT 192,168,0,123,19,137
STOR test.gif
この例のPORT 192,168,0,123,19,137 の192,168,0,123の部分がクライアントのIPアドレスで、19,137の部分がポート番号です。
このポート番号は、19 × 256 + 137を意味します。