Table of Contents

FTPとは

FTP(File Transfer Protocol)とは、その名前の通り、「ファイルを転送するためのプロトコル」です。ファイルを転送するためにHTTP/HTTPSを利用することも多くなっていますが、FTPではユーザ認証したり複数のファイルを一括で転送できるなどより高機能なファイル転送が可能です。

転送するファイルはほぼ間違いなく分割されることになります。ファイルを分割し、分割されたファイルの断片を確実に転送するためにトランスポート層にTCPを利用して信頼性を確保します。FTPではTCPコネクションを2つ確立します。ウェルノウンポート番号はTCP20番とTCP21番です。

図 FTPの概要
図 FTPの概要

FTPの仕組み

FTPの2つのTCPコネクション

FTPは2つのTCPコネクションを利用します。この2つのコネクションのためのFTPサーバのウェルノウンポートは「20」と「21」で、20番ポートはデータ転送コネクション、21番ポートは制御用コネクションです。

制御用コネクションでは、FTPクライアントからのコマンドとコマンドに対するFTPサーバからの応答コードがやり取りされます。コマンドとはクライアントからサーバに対する要求です。さまざまなコマンドによってユーザ名やパスワード、自分のIPアドレスやポート番号を通知したり、ダウンロードもしくはアップロードするファイルを指示したりします。そして、応答コードとはクライアントからのコマンドに対するサーバの処理結果を示す3桁の数値です。

実際のファイルデータはデータ転送コネクション上で転送されます。ファイルデータのサイズはTCPのMSSよりも大きくなることがほとんどなので、ファイルデータはTCPで分割されて転送されることになります。

図 FTPの2つのTCPコネクション
図 FTPの2つのTCPコネクション

アクティブモードとパッシブモード

FTPには、アクティブモードとパッシブモードの2つのモードがあります。この2つのモードの違いは、データ用コネクションのサーバ側のポート番号とコネクションを開始する方向です。

上に述べているのはアクティブモードで、データ用コネクションをTCP20番でFTPサーバから開始します。パッシブモードはデータ転送コネクションもクライアント側から確立します。そのときのFTPサーバのポート番号はランダムに決まります。

FTPモード サーバのポート番号(データ) コネクション開始の方向
アクティブ 20 サーバから
パッシブ ランダム クライアントから

制御用コネクションはアクティブモードでもパッシブモードでも、FTPクライアントからFTPサーバへTCPコネクションの確立を開始していきます。FTPサーバのポート番号は21です。

図 アクティブモードとパッシブモード
図 アクティブモードとパッシブモード

パッシブモードがあるのは、FTPサーバとFTPクライアント間にファイアウォールの存在を考慮しているためです。社内ネットワークのFTPクライアントとインターネットのFTPサーバとの間でファイル転送をする場合、FTPクライアントとFTPサーバの間にはファイアウォールが存在します。ファイアウォールは、原則としてインターネット側から内部のクライアントへのTCPコネクションの確立をブロックします。

アクティブモードでも、制御用コネクションを確立できて、FTPサーバにログインすることはできます。ですが、ファイル転送をしようとしてデータ用コネクションを確立しようとしてもファイアウォールでブロックされてしまいファイルデータの転送ができません。

図 アクティブモードではデータ用コネクションを確立できない
図 アクティブモードではデータ用コネクションを確立できない

このような問題を解決するひとつの方法は、ファイアウォールのポリシーを変更することです。ただし、ファイアウォールのポリシーを変更することは、セキュリティ上の抜け穴になってしまいます。そこで、パッシブモードで、制御用コネクションもデータ用コネクションも内部のFTPクライアントから開始すれば、ファイアウォールのポリシーを変更することなく、インターネット上のFTPサーバを利用できるようになります。

関連記事

TCP/IP