概要

ファイルを転送するためのプロトコルのFTP(File Transfer Protocol)の仕組みについて解説します。FTPでは、2つのTCPコネクションでファイル転送を制御しています。

FTPとは

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

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

こうしたFTPの仕様はRFC959で定義されています。

図 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クライアントからFTPサーバへ開始していきます。FTPサーバのポート番号は21です。

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

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

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

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

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

まとめ

ポイント

  • FTP(File Transfer Protocol)とは、ファイル転送を効率よく行うためのプロトコルです。
  • FTPにはアクティブモードとパッシブモードがあります。データ用TCPコネクションを開始する方向とサーバのポート番号が異なります。
FTPモードサーバのポート番号(データ)コネクション開始の方向
アクティブ 20 サーバから
パッシブ ランダム クライアントから
表 FTPアクティブモードとパッシブモード

TCP/IP