FTPとは
FTPはCUIや、様々なGUIツールで使用する機会がありますが、今回は普段何気なく使っているFTPについて解説します。
FTPについて簡単にまとめると、FTPとは次のようなものです。
- FTP(File Transfer Protocol ファイル・トランスファー・プロトコル)の略。
- 「TCP/IP(Transmission Control Protocol/Internet Protocol)」の4層(アプリケーション層)に属する通信規約。
- コンピュータネットワーク上のクライアントとサーバ間でファイルの送受信を行う際の通信規約(通信プロトコル)の一つ。
TCP/IPとFTPの関係を簡単に図解すると以下のようなイメージです。
FTPの歴史
FTPは1971年にアバイ・ブーシャンによって開発され、最初の仕様はRFC114として公開されました。<br>
当時はインターネットがまだ発展途上で、ファイルを効率的に転送する方法が必要とされており、複数の改訂を経てFTPはTCP/IP上で動作するようになり、これが現在のFTPの元になっています。<br>
FTPの動作原理
コネクション
前提として、FTPはクライアントサーバモデルに基づいており、以下2つのコネクションを使用します。
制御用コネクション
コマンドやレスポンスのやり取りに使用され、クライアント側の特権付きでないランダムなポートから、サーバのポート21へのTCPのコネクションとして確立します。
データ転送用コネクション
実際のファイルデータの転送に使用されます。
モード
アクティブモード(ポートモード)
クライアント側が制御用コネクションで使用するポートをサーバに通知し、通知したポートでサーバからのデータ転送用コネクションの接続を待ち受けます。
サーバはポート20から、クライアント指定ポートへのデータ転送用コネクションを確立します。
パッシブモード
主に、ファイアウォールやNAT環境での接続に適しています。
クライアントは制御用コネクションで”PASV”コマンドをサーバに送信してパッシブモードを利用することを通知し、サーバはクライアントにサーバ側のIPアドレスとポート番号を通知します。
クライアントはサーバから通知されたIPアドレスとポート番号へデータ転送用コネクションを確立する。
データ転送方式
バイナリモードや、ASCIIモードなどがあります。
ただし、現在では開発環境の進歩に伴い、ASCIIモードを使用する機会は減っています。
バイナリモード
送信側・受信側ともデータの変換を行わない。
現在は、FTPの全ての実装に対してバイナリモードの対応が推奨されています。
ASCIIモード
テキストデータの転送に使用されていた。
現在は、改行コードの変換が入ることで意図しないファイル転送や破損が起きることを防ぐために、使われる機会は少なくなっています。
データ転送モード
ストリームモード
データは連続したストリームとして送信され、全ての処理をTCPに任せます。
ブロックモード
FTPはデータをブロックヘッダ、バイト数、データフィールドに分割してからTCPに渡します。
圧縮モード
連長圧縮でデータを圧縮してからTCPに渡します。
FTPの問題点
セキュリティ
FTPは暗号化せずに、平文で転送を行うため、送信中のデータが盗聴される恐れがあります。ユーザ名やパスワードについても漏洩するリスクがあります。
信頼性
転送が失敗した場合、最初からやり直しになる可能性があります。
転送速度
FTPは高速化技術が組み込まれていないため、長距離間での大容量ファイル転送には適しません。
現在のFTP
派生プロトコル
FTPは今でも多くのシステムで使用されていますが、セキュリティ面での脆弱性があるため、現在では
- FTPS
- SFTP
などの暗号化されたプロトコルの使用が推奨されています。
FTPツール紹介
以下に記載したツールはGUIのものですが、Windowsに標準搭載されているftp.exeなど、CLIでの実行も可能です。
- FileZilla
- WinSCP
- FFFTP
さいごに
今回はFTPについて解説させていただきました。
普段、何気なく使っているファイル転送技術についての解説でしたが、いかがでしたでしょうか。
もちろん、知識として蓄えることも重要ですが、実際にFTPサーバを構築しながらのハンズオン学習もおすすめですので、是非チャレンジしてみてください。
無料のプログラミングスクール「テクドリ」の卒業生のインタビュー動画を、インスタグラムほか公式SNSにて公開中!