はじめに
FTPでファイルを転送するときは、1本の通信ですべてをやり取りしているわけではありません。ログインや転送指示を送る通信と、実際のファイルやディレクトリ一覧を運ぶ通信を分けて使います。
この2種類の接続を理解すると、FTPで21番や20番など複数のポート番号が登場する理由や、アクティブモードとパッシブモードで接続方向が変わる理由を整理できます。この記事では、FTPが制御接続とデータ接続をどのように使い分けてファイルを転送するのかを解説します。
FTPとは
FTP(File Transfer Protocol)は、ネットワーク上のコンピューター間でファイルを転送したり、サーバー上のファイルやディレクトリを操作したりするためのアプリケーション層プロトコルです。クライアントがサーバーへ接続し、ログイン、ファイル一覧の取得、ダウンロード、アップロードなどを要求します。特徴は、こうした操作の指示と実際のデータ転送を別々のTCP接続で扱うことです。FTPを含むアプリケーション層の位置づけは、アプリケーション層とは?OSI・TCP/IPモデルでの役割を解説で確認できます。
FTPは制御接続とデータ接続を分ける
FTPでは、制御接続とデータ接続という2種類のTCP接続を使います。制御接続は、ログイン情報やFTPコマンド、サーバーからの応答をやり取りする接続です。FTPサーバー側の標準ポート番号は21番で、FTPを利用している間は基本的にこの接続を維持します。
一方のデータ接続は、ファイル本体やディレクトリ一覧などを転送するときに使います。ファイルを取得するRETR、保存するSTOR、一覧を取得するLISTなどの操作を実行すると、必要に応じてデータ接続が確立されます。この役割分担により、FTPは「何をするか」という制御情報と、「実際に運ぶデータ」を別の接続で扱えます。ポート番号の基本的な役割は、ポート番号とは?3つの範囲と通信を識別する仕組みを解説を参照してください。
アクティブモードではサーバー側からデータ接続を開始する
FTPの元の仕様では、クライアントがPORTコマンドでデータ接続を待ち受けるアドレスとポート番号をサーバーへ伝えます。ファイル転送を開始すると、サーバー側からクライアント側へデータ接続を確立します。これが一般にアクティブモードと呼ばれる方式です。
標準的な構成では、サーバーは制御接続に21番ポートを使い、データ接続の送信元には隣接する20番ポートを使います。ただし、FTPでは非標準のデータポートも利用できるため、「FTPのデータ通信は常に20番ポートを使う」と理解するのは正確ではありません。クライアント側がNATやファイアウォールの内側にいる環境では、外部のFTPサーバーからクライアントへ新しい接続を開始する構成が扱いにくい場合があります。
パッシブモードではクライアント側からデータ接続を開始する
パッシブモードでは、クライアントがPASVコマンドを送り、サーバーがデータ接続を待ち受けるアドレスとポート番号を通知します。クライアントはその情報を使い、自分からサーバーへデータ接続を確立します。NATやファイアウォールの内側にあるクライアントから外向きに接続を開始できるため、アクティブモードより扱いやすい構成になる場合があります。
つまり、アクティブモードではサーバーからクライアントへ、パッシブモードではクライアントからサーバーへデータ接続を開始する点が大きな違いです。どちらの方式でも、制御接続とは別にデータ接続を作るというFTPの基本構造は変わりません。IPv6などにも対応できる拡張としてEPRTとEPSVも定義されており、接続先を表す方法が拡張されています。
FTPでファイルを転送する基本的な流れ
FTPでファイルをダウンロードする流れを単純化すると、次のようになります。
- クライアントがFTPサーバーへ制御接続を確立する
- 制御接続でユーザー名やパスワードを送り、必要な操作を指示する
- アクティブモードまたはパッシブモードでデータ接続の接続先を決める
- RETRなどの転送要求を送り、データ接続でファイルを受け取る
- 転送終了後も、続けて操作する場合は制御接続を利用する
このように、FTPでは制御接続が操作全体を管理し、データ接続が必要なデータを運びます。TCPによる接続の役割は、トランスポート層とは?役割とTCP・UDPの違いを分かりやすく解説で確認できます。
標準FTPは通信内容を暗号化しない
標準FTPでは、制御情報もデータも暗号化されません。ユーザー名やパスワードも暗号化されない状態で送信されるため、信頼できないネットワークを経由する利用では注意が必要です。
FTPへTLSを組み合わせ、認証や通信内容を保護する仕組みも定義されています。ただし、この記事の中心はFTPの接続構造なので、TLSの交渉手順やほかのファイル転送方式との比較までは扱いません。
まとめ
FTPは、ネットワーク上でファイルを転送するためのアプリケーション層プロトコルです。大きな特徴は、ログインや転送指示をやり取りする制御接続と、実際のファイルや一覧を運ぶデータ接続を分けて使うことです。
制御接続ではサーバー側の21番ポートを利用し、データ接続は転送時に別途確立します。アクティブモードではサーバー側からクライアント側へ、パッシブモードではクライアント側からサーバー側へデータ接続を開始します。この違いを押さえると、FTPで複数のポートや接続方向が登場する理由を説明できます。