FTPにおけるアクティブモードとパッシブモードの違いは?

レンタルサーバーのマニュアルでFTPクライアントの設定マニュアルを見ていると「パッシブモード」で接続してくださいという説明をよく見ますが「パッシブモード」とは何でしょうか?

FTPの接続方式には「アクティブ」と「パッシブ」の2種類が存在します。これらの違いはサーバー視線で考えると分かりやすいでしょう。アクティブ(Active:能動的)はサーバーからクライアントに接続要求を行います。そして、パッシブ(Passive:受動的)はクライアントからの接続要求を待ちます。

アクティブFTP(Active FTP)

こちらが通常の接続方法となります。ポートモードとも呼ばれます。

FTP通信では制御用に21番ポート、データ転送用に20番ポートを使用します。

簡単に説明すると、まずクライアントはFTPサーバー(21番ポート)との接続を行います。この制御用コネクションはFTPクライアントが接続を終了するか、FTPサーバーがタイムアウトなどで強制切断するまで維持されます。

データ転送用ポート(20番ポート)は、ファイル(ディレクトリ)リストの取得やデータのアップロード・ダウンロードに利用されます。アクティブFTPでは、 サーバーからクライアントへ データ転送用コネクションの接続要求を行います。

制御用コネクションでFTPサーバーに命令を送り、実行(データ転送)にはデータ転送用コネクションが利用されます。

パッシブFTP(Passive FTP)

パッシブ方式ではデータ転送用コネクションの接続要求を クライアントからサーバーに 行います。理由としては「ファイアウォール」の存在があります。クライアントが ファイアウォール で外部からの接続が遮断されている場合、FTPサーバーからのデータ転送用コネクションの接続要求がクライアントに届きません。

そこで、パッシブFTPが利用されます。FTPサーバーが制御用コネクションを利用してデータ転送用ポート番号(任意)をクライアントへ伝えます。クライアントは指定されたポート番号に接続要求を行うことで、データ転送用のコネクションを張ることができます。

サーバーが制御用コネクションに21番ポートを利用することはアクティブと変わりませんが、データ転送には任意のポートが利用されます。

つまり、データ転送用のコネクションの接続要求をどちらから行うかの違いが、アクティブとパッシブとの違いとなります。