FTPを理解していく上で欠かせないのが転送モードの概念です。

FTPには「アクティブモード」と「パッシブモード」のふたつの転送モードがあります。そのうちのどちらを使用するかによって、ファイアウォールの設定などFTPサーバー以外の要素にも影響がでます。

FTPにおけるコネクションの種類

アクティブモードとパッシブモードの違いを理解するためには、まず、FTPにおけるコネクションの種類について知っておく必要があります。

FTPは「コントロールコネクション」と「データコネクション」のふたつのコネクションを組み合わせて使用します。

種類 用途
コントロールコネクション FTPサーバーにログインする際の利用者認証、ならびにFTPコマンドを送信し、その応答を受信する。また、データコネクションを確立するためのネゴシエーションに使用。
データコネクション 実際のデータを転送するために使用。

データコネクションは実際のデータ転送に使用するコネクションです。コントロールコネクション上で送られたコマンドごとにデータコネクションを作り、その上でデータを送受信します。

そのデータコネクションを確立するための手段として、アクティブモードとパッシブモードの2種類があります。両者の違いで最も重要なのは以下です。

種類 特徴
アクティブモード FTPサーバー側からFTPクライアントに接続する。
パッシブモード FTPクライアントからFTPサーバー側に接続する。

アクティブモードとパッシブモードのどちらを使用するかはFTPクライアントで設定します。上記の特徴を踏まえ、それぞれの転送モードの方式について見ていきましょう。

アクティブモード

FTPのアクティブモードはコントロールコネクションにTCP/21番ポートを使用し、データコネクションにTCP/20番ポートを使用します。FTP送信におけるシーケンスを図にすると以下のようになります。(下図ではコントロールコネクションを青矢印、データコネクションを赤矢印で表しています。)
FTPアクティブモード

通常、一般的なクライアント・サーバー(クラサバ)構成の場合、クライアントからサーバーに接続要求するものですが、FTPのデータコネクションをアクティブモードで確立しようとした場合、上図にあるように、接続要求がサーバー側からクライアントに出されることが特徴です。

多くのFTPクライアントソフトウェアはアクティブモードをデフォルト設定としています。また、Windows標準のFTPクライアント機能に至ってはアクティブモードしかサポートしていません。

パッシブモード

FTPのパッシブモードはコントロールコネクションにTCP/21番ポートを使用し、データコネクションには毎回ランダムで決まるポート番号を使用します。
FTPパッシブモード

パッシブモードを使用する場合、クライアントからコントロールコネクションを介してPASVコマンドによりパッシブモードを使用することを要求します。サーバーはその要求を許可する場合、「Entering Passive mode」を返します。同時に、データコネクションで使用するポート番号を返します。

パッシブモードの必要性

FTPはファイル転送に特化したプロトコルです。2つのコネクションを使用するのも、その方がファイル転送を行う上で効率が良いからに他なりません。
1つのコネクションでデータもコマンドも送ろうとすると、コマンドがデータに紛れてしまうなどして色々不都合が起こります。その点、2つのコネクションを使い分けることで、効率的なファイル転送が行えるようになります。

例えば、ファイルを送信している最中でも、コネクションを分けていれば、送信キャンセルや一時中断など細かく制御することが可能となります。

ただし、コネクションを2つ確立することはセキュリティの面で不都合が生じます。

特にアクティブモードは都合が悪いです。それは、FTPサーバーがFTPクライアントに対して接続要求するという点です。
例えば会社のネットワークでは、社内から社外への接続は緩やかに許可することが多いですが、社外から社内への接続は非常に厳しくなります。そのような構成下においてアクティブモードはとても扱いずらいです。なぜなら、FTPサーバー(社外)からFTPクライアント(社内)への接続要求は途中のファイアウォールでブロックされてしまうからです。

その問題を解決するのがパッシブモードです。
FTPサーバーからの逆接続をやめて、接続要求はあくまでFTPクライアントからとすることで、社内から社外への接続のみとなるわけです。

最近では、上記のようにセキュリティを考慮してパッシブモードが使われることが多いです。