Q. FTP の active/passive モードの仕組みを教えてください。 A. active/passive mode の仕組みを、もう少し具体的に書くと、 FTP というプロトコルは、TCP コネクションを2本使います (HTTP や POP3 では TCP コネクションを1本しか使いません)。 例えば ftp(1) コマンドで FTP サーバに接続すると、 FTP クライアント FTP サーバ ---- 接続 (コマンドコネクション)----> USER ------ コマンド用コネクション ------> PASS ------ コマンド用コネクション ------> という流れでユーザ認証を行ないます (USER・PASS というのは FTP プロトコルの中身です)。 ここで (ftp のプロンプト上で) ls とタイプし、ファイル一覧を 取得しようとすると、 FTP クライアント FTP サーバ PORT ------ コマンド用コネクション ------> LIST ------ コマンド用コネクション ------> <---- 接続 (データコネクション)------ <----- データ用コネクション(1) ------ ファイル一覧送信 と、PORT コマンドで FTP クライアントの IP アドレスとポート番号の 情報を送ります。すると FTP サーバが指定のホスト・ポートに接続し、 データ (ファイル一覧) をクライアントに送ります。引続きファイルを get すると、同様に FTP クライアント FTP サーバ PORT ------ コマンド用コネクション ------> RETR ------ コマンド用コネクション ------> <---- 接続 (データコネクション)------ <----- データ用コネクション(2) ------ ファイル内容送信 となります。FTP サーバが *能動的に* データコネクションを 張りますので、これを active (アクティブ) モード といいます。 これは、FTP サーバが FTP クライアントの動いているホストに接続 するので、ファイアウォールのような環境の中からでは取得できない ことがあります (ファイアウォールの形態次第ですが)。 一方、passive モードは active モードの逆で、ファイル一覧を 取得しようとすると FTP クライアント FTP サーバ PASV ------ コマンド用コネクション ------> LIST ------ コマンド用コネクション ------> ----- 接続 (データコネクション)-----> <----- データ用コネクション --------- ファイル一覧送信 というふうに、FTP クライアント側からFTP サーバ側に接続し、 データ用コネクションを確立します。FTP サーバが *受動的に* データコネクションを受けるので、passive モードと呼びます。 余談. FTP プロトコルについて詳しく知りたければ、RFC 959 を ご覧下さい。デバッグモードで ftp コマンドを実行しつつ (-d オプションを付けて起動する)、適時 % netstat -a -f inet としてポートの状態を見ると、理解しやすいかもしれません。
グループ名: rfc