目次
FTPとは
FTP(File Transfer Protocol)とは、その名前の通り、「ファイルを転送するためのプロトコル」です。ファイルを転送するためにHTTP/HTTPSを利用することも多くなっていますが、FTPではユーザ認証したり複数のファイルを一括で転送できるなどより高機能なファイル転送が可能です。
転送するファイルはほぼ間違いなく分割されることになります。ファイルを分割し、分割されたファイルの断片を確実に転送するためにトランスポート層にTCPを利用して信頼性を確保します。FTPではTCPコネクションを2つ確立します。ウェルノウンポート番号はTCP20番とTCP21番です。

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サーバへTCPコネクションの確立を開始していきます。FTPサーバのポート番号は21です。

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

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