目次
概要
ファイルを転送するためのプロトコルの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の2つのTCPコネクション
FTPは2つのTCPコネクションを利用します。この2つのコネクションのためのFTPサーバのウェルノウンポートは「20」と「21」です。20番ポートはデータ転送コネクション、21番ポートは制御用コネクションです。
制御用コネクションでは、FTPクライアントからのコマンドとコマンドに対するFTPサーバからの応答コードがやり取りされます。コマンドとはクライアントからサーバに対する要求です。さまざまなコマンドによってユーザ名やパスワード、自分のIPアドレスやポート番号を通知したり、ダウンロードもしくはアップロードするファイルを指示したりします。そして、応答コードとはクライアントからのコマンドに対するサーバの処理結果を示す3桁の数値です。
実際のファイルデータはデータ転送コネクション上で転送されます。ファイルデータのサイズはTCPのMSSよりも大きくなることがほとんどなので、ファイルデータはTCPで分割されて転送されることになります。
アクティブモードとパッシブモード
FTPには、アクティブモードとパッシブモードの2つのモードがあります。この2つのモードの違いは、データ用コネクションのサーバ側のポート番号とコネクションを開始する方向です。
ここまでで述べているのはアクティブモードです。データ用コネクションをTCP20番でFTPサーバから開始します。一方、パッシブモードではデータ転送コネクションもクライアント側から確立します。そのときのFTPサーバのポート番号はランダムに決まります。
FTPモード | サーバのポート番号(データ) | コネクション開始の方向 |
---|---|---|
アクティブ | 20 | サーバから |
パッシブ | ランダム | クライアントから |
制御用コネクションはアクティブモードでもパッシブモードでも、FTPクライアントからFTPサーバへ開始していきます。FTPサーバのポート番号は21です。
パッシブモードがあるのは、FTPサーバとFTPクライアント間にファイアウォールの存在を考慮しているためです。社内ネットワークのFTPクライアントとインターネットのFTPサーバとの間でファイル転送をする場合、FTPクライアントとFTPサーバの間にはファイアウォールが存在します。ファイアウォールは、原則としてインターネット側から内部のクライアントへのTCPコネクションの確立をブロックします。
アクティブモードでも、FTPクライアントから制御用コネクションを確立できて、FTPサーバにログインはできます。ですが、ファイル転送するためにデータ用コネクションを確立しようとしてもファイアウォールでブロックされてしまいファイルデータの転送ができません。
このような問題を解決するひとつの方法は、ファイアウォールのポリシーを変更することです。ただし、ファイアウォールのポリシーを変更することは、セキュリティ上の抜け穴になってしまいます。そこで、パッシブモードを利用します。パッシブモードで、制御用コネクションもデータ用コネクションも内部のFTPクライアントから開始すれば、ファイアウォールのポリシーを変更することなく、インターネット上のFTPサーバを利用できるようになります。
まとめ
ポイント
- FTP(File Transfer Protocol)とは、ファイル転送を効率よく行うためのプロトコルです。
- FTPにはアクティブモードとパッシブモードがあります。データ用TCPコネクションを開始する方向とサーバのポート番号が異なります。
FTPモード | サーバのポート番号(データ) | コネクション開始の方向 |
---|---|---|
アクティブ | 20 | サーバから |
パッシブ | ランダム | クライアントから |
TCP/IP
- TCP/IPの階層
- IP(Internet Protocol) ~データを送り届ける~
- ICMP ~きちんとIPで転送できますか?~
- Ping ~きちんとデータは届きますか?~
- Windows OSのPingコマンド
- トレースルート ~データはどのルータを通っていますか?~
- tracertコマンド(Windows OS)
- ICMPリダイレクト
- トラブルはどこ? ~Pingとトレースルート~
- ARP ~IPアドレスとMACアドレスを対応付け~
- ARPフォーマット
- Gratuitous ARP(GARP)
- ポート番号 ~どのアプリケーションのデータなの?
- TCPの概要
- TCPの動作
- UDPの概要
- アプリケーションのデータが届くまでのまとめ
- DNS ~宛先IPアドレスを求める~
- nslookupコマンド ~DNSの名前解決の確認~
- DHCP ~IPアドレスを自動割り当て~
- Cisco IOS DHCPサーバの設定と確認コマンド
- Ciscoルータ DHCPサーバの設定例
- DHCPリレーエージェント
- DHCPリレーエージェントの設定例[Cisco]
- DHCPサーバ配置のまとめ
- TCP/IPの設定のまとめ
- ipconfigコマンド ~Windows OSのTCP/IP設定を確認~
- Linux(Ubuntu)でのTCP/IP設定の確認コマンド
- Webサイト
- HTMLとCSS ~Webページを作る~
- URL ~Webサイト(Webページ)のアドレス~
- HTTP ~HTMLファイルを転送する~
- Webアプリケーション ~Webブラウザだけあればいい~
- HTTP Cookie
- Webアプリケーションのセッション管理
- Webプロキシサーバ ~Webアクセスを代わりに~
- Webアクセスのまとめ
- 電子メール
- SMTP ~電子メール送信用プロトコル~
- POP3 ~メール受信用プロトコル~
- IMAP4 ~メールサーバ上でメールを管理~
- 電子メールのまとめ
- FTP ~代表的なファイル転送プロトコル~
- TFTP ~簡易的なファイル転送プロトコル~
- Windows10/11のTFTPクライアント
- ネットワークのトラブルの切り分け手順