|
|
|
|
 |
5.4 FTP によるファイル転送の仕組み
|
FTP サーバで FTP サービスを提供するプログラムは、アプリケーションとプレゼンテーション、セッション層の 3 つにわたるプログラムである。通常、FTP のサービスは下図のように 2 つのポートを用いて TCP セッションを確立したうえで行われる。

図5.4.1:FTP によるファイル転送
サーバで提供するサービスの中で 2 つのポートを標準で用いるサービスは、FTP だけである。FTP では、制御用のポートと実際のデータを転送するポートの 2 つを用いる。クライアントから FTP サーバに対して要求があった場合は、制御用のポートを用いてコマンドのやり取りを行い、その後、データ転送用のポートを用いてファイル転送を行う。
標準のサーバでは、制御用ポートに 21 番ポートを割り当て、データ転送用ポートに 20 番を割り当てることになっている。これらのポートは Well-known ポート含まれ、設定をむやみに変えてしまうことは原則として許可されていない。
FTP によるデータ転送モードには、2 種類存在する。
- アクティブモード
- パッシブモード
上記の 2 つのモードは、データ転送用のポートへのコネクションが「サーバからクライアント」に対して張られるのか、「クライアントからサーバ」に対して張られるのかが大きくことなる点である。
- 3.1 アクティブモード
アクティブモードでは、通常の制御用ポート、データ送信用ポートを利用しサーバからクライアントに対してコネクションを張る転送モードである。このモードは以下のような手順でファイル転送が行われる。

図5.4.2:アクティブモードによるファイル転送
- クライアントから FTP サーバの 21 番ポートに対してセッション要求を送信し、セッションを確立し、ログインする。詳細はここでは、省略する。
- クライアントからファイル転送要求を送信し、サーバから許可が与えられる
- クライアントは、自分が使っているポート番号をサーバに送信し、制御用ポートでの通信が終了する
- サーバは、クライアントから得たポート番号にデータ送信ポート 20 番を使ってセッションを確立する
- サーバは要求されたファイルを転送し、セッションを閉じる
これまでは、上図のようなやり取りを行いファイル転送を行っていたが、サーバからコネクションを張りに行くこの方法では、第三者による「なりすまし」が可能であり、必ずしも安全ではない。また、NAT を用いて複数のコンピュータを 1 つに見せかけている場合や、ルータなどでパケットフィルタリングなどを行いセキュリティを確保している場合はこのモードによるファイル転送が不可能となる。
実際の流れ
データの受信
ftp> get sample.txt
local: sample.txt remote: sample.txt
200 PORT command successful.
150 Opening BINARY mode data connection for sample.txt (6308 bytes).
226 Transfer complete.
6308 bytes received in 0.0002 secs (3.1e+04 Kbytes/sec)
|
- 3.2 パッシブモード
パッシブモードは、アクティブモードとはことなり、クライアント側からコネクションを張りに行くのでアクティブモードのような危険性が少なく、現在一般的に用いられる転送方法である。この方法は、インターネットをするときに用いているブラウザでも取り入れられている。

図5.4.3:パッシブモードによるファイル転送
- クライアントから FTP サーバの 21 番ポートに対してセッション要求を送信し、セッションを確立し、ログインする。詳細はここでは、省略する。
- クライアントからファイル転送要求を送信し、サーバから許可が与えられる
- サーバは任意に決めたデータ転送ポート番号をクライアントに送信しセッションを閉じる
- クライアントは、サーバから得たポート番号に対してコネクションを張る
- サーバは要求されたファイルを転送し、セッションを閉じる
実際の流れ
データの受信
ftp> get sample.txt
local: sample.txt remote: sample.txt
227 Entering Passive Mode (192,168,1,13,129,191).
150 Opening BINARY mode data connection for sample.txt (6308 bytes).
226 Transfer complete.
6308 bytes received in 0.00017 secs (3.6e+04 Kbytes/sec)
|
|
|
 |
|
|