FTP動き詳細

【パッシブモード】

1.TCP/IPハンドシェイク後、

 クライアント任意ポート  → → →  サーバポート21
          コントロールコネクション
             (接続要求)

  そしてクライアントからサーバへ、ユーザ、パスワードを通知。
  (コントロールコネクションは以降、QUITコマンドで閉じられるまで接続されている)

  サーバはユーザを認証し、許可がクライアントに届くと、
  クライアントからPASVコマンド(パッシブモードであるという通知)を送り、
  サーバはデータコネクション受け入れを準備しポートを通知。

  クライアントからは他に、データタイプ(アスキーへ変換してるか、バイナリのまま送るか)の通知もある。
 

2.データコネクション作成(コマンドに対し1回ずつ開いては閉じる)

 クライアント任意ポート  → → →  サーバから通知したポート
            データコネクション
             (接続要求)

  以降もコマンドはコントロールコネクション上を流れ、
  データだけ1回ずつ作成されるデータコネクションを流れる。
  (たとえばLISTコマンドを送る時、コントロールコネクション上をコマンドが行き、
   サーバ側でユーザの認証が行われ、サーバから通知されたポートへクライアントが接続し開通、
   ファイル名等の一覧データは、サーバからクライアントへとそのデータコネクション上を流れてくる。)
 
 
【アクティブモード】

1.
 クライアント任意ポート  → → →  サーバポート21
          コントロールコネクション
             (接続要求)

 基本的にはパッシブモードと流すやりとりは同じだが、以下が違う
  クライアントからPORTコマンド(アクティブモードであるという通知)を送り、
  クライアント側IPアドレスとポート番号を伝える。
  サーバはそれを元にデータコネクションを作成し、クライアントへ接続にいく。
 

2. 
 クライアントから通知したポート  ← ← ←  サーバポート20
              データコネクション
               (接続要求)
 
 
 
 
 両終端(クライアントやサーバ側)で、行われている事

 ・ User Interface にて
    ユーザの操作を受け付ける
    ・CUI (Character User Interface)
     例:dir(ディレクトリ表示), mget(複数ファイルの取得。もっともFTP自体には複数ファイルの取得のプロトコルがなく、クライアント側のPI(下記参照)が、単一ファイルの転送処理を複数回することで実行している)
    ・GUI
    ・ブラウザ

 ・ Protocol Interpreter(PI) にて
    ユーザからのコマンドを実際のFTPプロトコルへ変換

 ・ Data Transfer process にて
    OSごとに違うファイルシステムの差異を吸収して変換
    実データのRead/Writeの制御
     ★つまり文字に対する対応は
      ココ(FTPクライアントやサーバ側)で行われる
      FTPプロトコルはそのまま送っているだけ