現場でFTPを利用した通信を行っているものの、その仕組みなど詳しいことを知らなかったので、基本をまとめてみました。
もくじ
■FTP(File Transfer Protocol)とは
ファイルの送信・受信に用いられる、ファイル転送プロトコル。
ファイルの送り元・受取先とをつなぐ接続(コネクション)によってファイルの送受信が行われる。
■アクティブモードとパッシブモード
FTPの接続(コネクション)を確立する方法として、2種類のモードが存在する。
前提として、ファイルの送信・受信を行うためには、2つのノードが必要となる。(ファイルを「送る側」と「受けとる側」の双方。)
2つのノードのうち、自分のPCをFTPクライアント、相手方をFTPサーバとすると、
ファイル伝送を行うためのコネクション確立には、以下の2パターンが考えられる。
①クライアントからサーバに、コネクション確立要求を送る
②サーバからクライアントに、コネクション確立要求を送る
このようなコネクション確立要求のパターンのことを「モード」と呼んでおり、
①クライアント→サーバへのコネクション確立要求のパターンを「パッシブモード」、
②サーバ→クライアントへのコネクション確立要求のパターンを「アクティブモード」と呼ぶ。
①パッシブモード(クライアント→サーバ)
②アクティブモード(サーバ→クライアント)
コネクション確立のために、どちらのモードを使うかは、クライアント側が設定することによって決まる。
■コネクション
ところで、先ほどから何度も出てきている「コネクション(=接続)」についても確認しておく。
FTPでは、コネクションも2種類存在する。
2種類のコネクションを両方使うことで、ファイル転送を行うことが出来る。
2種類のコネクションとは、「データコネクション」と「制御コネクション」である。
データコネクションは、データの送受信そのものを行うために利用される。
制御コネクション(コントロールコネクションともいう)は、データ送受信を行うための周辺整備(FTPサーバへのログイン認証、ファイル転送方法の指定、データコネクション確立のための下準備など)を行う役割を持つ。
SESでいうなら、データコネクションがITエンジニア、制御コネクションが営業や事務方といったイメージを持つと分かりやすい。エンジニアがメインにも思えるが、エンジニアがSE業務に専念できるのは営業や事務方が様々な周辺対応を行っているからであり、どちらが欠けてもSES事業は成り立たないのと同じである。
(フリーのエンジニアは全部自分でやってるから、エンジニアだけでも成り立つやんというツッコミは無しで。)
■接続ポートとデータ転送の流れ
FTPのコネクション(接続)には、2つのポート番号が使われる。
FTPのクライアントがFTPサーバにアクセスする際(=ファイル転送を行いたい時)、
まずは制御コネクションを利用して、ユーザ名とパスワードによる認証を行う。このコネクションの宛先ポート(サーバ側のポート)が、1つ目のポート番号「21」となる。
クライアントからアクセス要求が来た後のファイル転送処理は、アクティブモードとパッシブモードで変わってくる。
アクティブモードの場合、サーバからクライアントへ、データコネクション確立要求が行われる。
この時、FTPサーバは自身の20番ポートからクライアント側のランダムなポートへ、コネクションを確立させる。
データコネクションが確立されたら、クライアントからサーバへファイルを送信、または受信する。
アクティブモードで使われる20番ポートと、最初に認証で使われる21番ポートの2つは、FTP利用時のウェルノウンポートとして知られている。
ところが、ややこしいことに、パッシブモードではウェルノウンポートの2つともを使うわけではない。
パッシブモードの場合、20番での制御コネクションを確立後に、FTPサーバからクライアントに対して、データコネクションで利用してほしいサーバ側のポート番号を通知する処理が入る。
クライアントは、通知されたサーバ側のポート番号に対して、データコネクション確立要求を行う。
パッシブモードの場合、必ずしも20番ではないことがミソ。
データコネクションが確立されたら、クライアントからサーバへファイルを送信、または受信する。
■2つのモードがある理由
簡単に言うと、ネットワーク・セキュリティとその時の状況によって、好ましい対応が変わってくるから。
FTPクライアント、FTPサーバのそれぞれの手前には、FW(ファイアウォール)があることが普通である。
FWは外部からの不正アクセスを防ぐために設けられているため、通常、外部→内部へのアクセスは厳しく制限されている。が、逆に内部→外部へのアクセスは、比較的緩やかな制限となっている。
ファイル転送では、このFWの制限を超えてデータ伝送を行う必要がある。
アクティブモードでは、サーバからクライアントに送るため、
サーバ側のFWの制限が厳しいときや、サーバ側のポート番号を20と21に限定したい時などに有効である。
その代わり、クライアント側のポートは通信のために開放する必要があるため、クライアント側はセキュリティ的に良くない状態になる。
パッシブモードは、クライアント側のポートを開放する必要はなく、クライアント側のセキュリティは好ましい状態となる。しかし、サーバ側のFWの制限を緩めることになるため、サーバのどのポートを開放するかは慎重に検討する必要が出てくる。
状況によって、どちらのモードを選ぶべきかは変わってくることに注意したい。
以上、FTPの基本についてまとめてみた。
現場で使っているのはSFTPのため、SFTPについても次回以降調べてみたい。