#はじめに
FTPに関して備忘録としてまとめました。内容は初学者向けになります。
#FTP
・FTPとは「File Transfer Protocol」のことで、ファイルを転送するための通信規格。クライアントとサーバー間で、ファイルのアップロードやダウンロードに使われるプロトコル。
・ファイル転送を行う際、データの容量が大きいとそのまま送ることはできないため、パケットと呼ばれるものにデータを分解する。このパケットをどのように分解し、どのように送受信するのか、どのように復元するのかということを決めたルールである。
・FTPサーバはインターネット側に位置して、Webサーバーと繋がっている。そのため__FTPサーバーを操作することにより、Webサーバ内のファイルを制御できる。__
*ファイルを転送する通信プロトコルとしてHTTPもある。「HyperText Transfer Protocol」の略であり、HTMLで記述されたファイルをサーバーからクライアントへ転送する。利用するポートは80番が基本。
#FTP通信の仕組み
・PIとDTPが揃って初めてファイル転送が実現することができ、これらはサーバー側とクライアント側の両方にあり常に相互通信している。
・PI(Protocol Interpreter)は指示内容をプロトコルにインタプリンタ(翻訳)している。FTPクライアントによる操作が、直接FTPサーバーに影響するわけでなく、インタプリンタと呼ばれる中継ぎが存在しており、指示内容を自動で分解して伝えてくれる。
・DTP(Data Transfer Process)は使用されるファイルシステムのアクセス部分を指す。ファイル転送時に転送先のOSが転送元のOSと異なっていたとしても、DTPが転送時にモジュール化して使い分けることで、様々なOSにも対応する機能もある。
#コントロールコネクションとデータコネクション
先述したようにFTPはサーバー側・クライアント側共にPIとDTPの2種類の仕組みが動いている。
PI(プロトコル・インタプリタ) | DTP(データ転送プロセス) | |
---|---|---|
コネクション分類 | コントロールコネクション | データコネクション |
ポート番号 | 21 | 20 |
クライアント側のPIは、サーバー側のPIに対してコネクションを発行する。この時に、サーバーでは21番ポートを開放して使用できるようにし、クライアント側からのアクセスを待つ。これを__「コントロールコネクション」__と呼び、クライアントからのコマンドを実行し、結果ステータスなどを返す。
一方で、実際のファイルデータの転送などはDTPが受け持つ。これを__「データコネクション」__と呼ぶ。データコネクションに使用するポートはコントロールコネクションと異なるため。FTPでは2つのポートを使用している。
__データコネクションを別に発行している理由はデータ転送をスムーズに行うため__である。
プログラムは単一処理の連続で成り立っているため。もし、一つのポートで命令系統と転送を同時に行った場合、大量のデータを転送中にはそのデータの転送終了まで別の処理は実行できない。
これを分けることで転送途中でも別の命令を判断でき、同時にいくつものファイルを転送できるようになっている。
#FTPのデメリット
FTPはクライアントとサーバー間でファイル転送のやり取りを行うが、その通信は__暗号化されていない。__つまり、悪意がある第三者にIDやパスワードなどのログイン情報が盗まれれ__通信内容が外部に漏れてしまう危険性__がある。
対応として、SSHというプロトコルを使って暗号化された通信を利用する「STPS」であれば安全性が高く。最近のサーバーはSFTPを利用していることが多い。
##FTPS
FTPのセキュリティのデメリットを改善したファイル転送プロトコルで、SSHを用いており、ユーザー名やパスワーなどの認証情報を暗号化してファイル転送できる。
参考:
https://it-trend.jp/file_transfer/article/104-0004
https://it-trend.jp/file_transfer/article/protocol