FTP/TFTP

目次

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の仕組み(アクティブモードの場合)

  1. FTPクライアントがFTPサーバに接続し、ユーザ名とパスワードでログインする
  2. 認証に成功すると、転送モード(アスキー/バイナリ)やポート番号のやり取りを行う
  3. ファイル転送要求を行うと、サーバからクライアントに対してポート20を使ってデータコネクションを開始する
  4. データ転送が終了すると、コントロールコネクションで処理終了が通知され接続が終了する

このようにアクティブモードでは「サーバからクライアントに接続要求を開始する」という特徴があります。

アクティブモードとパッシブモードの違い

  • アクティブモード:クライアントが待ち受けポートを通知し、サーバがそこに接続要求を行う
  • パッシブモード:サーバが待ち受けポートを通知し、クライアントがそこに接続要求を行う

外部ネットワーク(インターネット)からの接続はFirewallで遮断されやすいため、現在は「パッシブモード」が推奨されるケースが多いです。

PORTコマンドとPASVコマンド

FTPの制御で使われる重要なコマンドが次の2つです。

  • PORTコマンド:アクティブモードで使用。クライアント側の待ち受けポート番号をサーバに通知する
  • PASVコマンド:パッシブモードで使用。サーバ側の待ち受けポート番号をクライアントに通知する

つまり、FTPでデータ転送を行う際にクライアント側からサーバのポート番号を要求する場合は「PASV」コマンドを使います。

まとめとしては、

  • FTPは ファイル転送用プロトコル
  • ポート21(制御)、ポート20または動的ポート(データ)を利用
  • セキュリティに弱点があるため、FTPSやSFTPがよく使われる
  • 現在はFirewallに強い「パッシブモード」が主流
    と覚えると理解しやすいです。

TFTPとは

TFTP(Trivial File Transfer Protocol)は、コンピュータ間でファイルを転送するためのアプリケーション層プロトコルです。FTPとの違いは大きく2つあります。

  1. ユーザ名やパスワードによる認証を行わない
  2. FTPはTCPを利用するのに対し、TFTPはUDPを利用するため、信頼性よりも転送効率を重視している

このため、TFTPはシンプルで軽量な仕組みを持ち、主にルータやスイッチなどネットワーク機器のソフトウェア(IOS)をアップロードやダウンロードする場面で使われます。TFTPでは、データは512バイトごとに分割して送受信されます。

TFTPのパケット

TFTPクライアントがTFTPサーバにアクセスするとき、最初のリクエスト時にはUDPのポート番号69を使用します。
ただし、その後のデータ転送ではサーバはランダムなポート番号を使用して通信を行います。つまり、ポート69が使われるのは最初の要求時だけです。

TFTPの仕組み

例として、CiscoルータをTFTPクライアント、PCをTFTPサーバとして考えます。

  1. ルータにtelnetやコンソールで接続する
  2. TFTPサーバに対してIOSソフトの転送を要求するコマンドを実行する
  3. TFTPクライアントからサーバへ、ポート69宛のリクエストメッセージを送信する
  4. サーバは要求されたファイルを送信する。このときサーバは送信元ポート69ではなくランダムなポート番号を利用する
  5. ファイルは512バイトごとに分割され、順番にシーケンス番号を付けて送信される
  6. クライアントは各データを受信するたびに確認応答(ACK)を返す
  7. 最後に512バイト未満のデータを受信すると、転送完了と判断して通信が終了する

◆まとめスライド

目次