FTPとは
FTP(File Transfer Protocol)は、ネットワークを介してコンピュータ間でファイルを送受信するためのプロトコルです。サーバにファイルをアップロードしたり、サーバからファイルをダウンロードしたりできます。TelnetやSSHと同様、接続先のコンピュータにログインして利用する仕組みです。
ただしFTPは、ユーザ名やパスワードが暗号化されずにそのまま送信されるため、セキュリティ上のリスクがあります。安全に利用する場合は、FTPS(FTP over SSL/TLS)やSFTP(SSH File Transfer Protocol)の利用が推奨されます。
FTPの2つのTCPコネクション
FTPは特徴的で、1本のコネクションだけでなく「2本のTCPコネクション」を利用します。
- コントロールコネクション(制御用):ユーザ名やパスワード、転送方法など命令と応答のやり取りに使用(通常ポート21)
- データコネクション(転送用):実際のファイルの送受信に使用(通常ポート20、または動的ポート)
この2種類のコネクションを並行して使用することで、効率的に命令とデータ転送を行うことができます。
FTPの仕組み(アクティブモードの場合)
- FTPクライアントがFTPサーバに接続し、ユーザ名とパスワードでログインする
- 認証に成功すると、転送モード(アスキー/バイナリ)やポート番号のやり取りを行う
- ファイル転送要求を行うと、サーバからクライアントに対してポート20を使ってデータコネクションを開始する
- データ転送が終了すると、コントロールコネクションで処理終了が通知され接続が終了する
このようにアクティブモードでは「サーバからクライアントに接続要求を開始する」という特徴があります。
アクティブモードとパッシブモードの違い
- アクティブモード:クライアントが待ち受けポートを通知し、サーバがそこに接続要求を行う
- パッシブモード:サーバが待ち受けポートを通知し、クライアントがそこに接続要求を行う
外部ネットワーク(インターネット)からの接続はFirewallで遮断されやすいため、現在は「パッシブモード」が推奨されるケースが多いです。
PORTコマンドとPASVコマンド
FTPの制御で使われる重要なコマンドが次の2つです。
- PORTコマンド:アクティブモードで使用。クライアント側の待ち受けポート番号をサーバに通知する
- PASVコマンド:パッシブモードで使用。サーバ側の待ち受けポート番号をクライアントに通知する
つまり、FTPでデータ転送を行う際にクライアント側からサーバのポート番号を要求する場合は「PASV」コマンドを使います。
まとめとしては、
- FTPは ファイル転送用プロトコル
- ポート21(制御)、ポート20または動的ポート(データ)を利用
- セキュリティに弱点があるため、FTPSやSFTPがよく使われる
- 現在はFirewallに強い「パッシブモード」が主流
と覚えると理解しやすいです。
TFTPとは
TFTP(Trivial File Transfer Protocol)は、コンピュータ間でファイルを転送するためのアプリケーション層プロトコルです。FTPとの違いは大きく2つあります。
- ユーザ名やパスワードによる認証を行わない
- FTPはTCPを利用するのに対し、TFTPはUDPを利用するため、信頼性よりも転送効率を重視している
このため、TFTPはシンプルで軽量な仕組みを持ち、主にルータやスイッチなどネットワーク機器のソフトウェア(IOS)をアップロードやダウンロードする場面で使われます。TFTPでは、データは512バイトごとに分割して送受信されます。
TFTPのパケット
TFTPクライアントがTFTPサーバにアクセスするとき、最初のリクエスト時にはUDPのポート番号69を使用します。
ただし、その後のデータ転送ではサーバはランダムなポート番号を使用して通信を行います。つまり、ポート69が使われるのは最初の要求時だけです。
TFTPの仕組み
例として、CiscoルータをTFTPクライアント、PCをTFTPサーバとして考えます。
- ルータにtelnetやコンソールで接続する
- TFTPサーバに対してIOSソフトの転送を要求するコマンドを実行する
- TFTPクライアントからサーバへ、ポート69宛のリクエストメッセージを送信する
- サーバは要求されたファイルを送信する。このときサーバは送信元ポート69ではなくランダムなポート番号を利用する
- ファイルは512バイトごとに分割され、順番にシーケンス番号を付けて送信される
- クライアントは各データを受信するたびに確認応答(ACK)を返す
- 最後に512バイト未満のデータを受信すると、転送完了と判断して通信が終了する