パソコン実習室
ftp 動作概要 - モードによる違い
≪ previous next ≫

V.パッシブ モード


 パッシブ モードでは、データ転送用コネクションの接続動作をクライアント側から開始する。
そのためクライアントはデータ送受信が発生するコマンドを実行する前に、PASV コマンドをサーバーに送って データ転送用コネクションに使用するサーバー側のポート番号を問い合わせる。
※ サーバーのポート 20 はアクティブ モードでのみ使用される。
 サーバーは該当クライアントとの間でデータ転送に使用する 1024 番以降のポートを選択してクライアントに通知する。

 パッシブ モード時に、サーバーとクライアントの間で交わされる通信の概略を順を追って説明する。

V.1.前提条件

 サーバーとクライアントが使用するポートは必要の都度 OS によって適宜割り当てられる。
サーバーとクライアントの動作環境を次のように仮定する。

サーバークライアント
IP アドレス10.2.3.23410.2.3.200
制御用ポート番号21 (デフォルト)3001
データ転送用ポート番号5001 および 50023002 および 3003

クライアントは次の操作を行うと仮定する。
  1. ftp サーバーに接続。
  2. サーバー上のファイル一覧を取得。
  3. テキスト ファイルをアップロード

V.2.通信の概略

【 凡例 】
制御用コネクションのポートと通信の方向。
データ転送用コネクションのポートと通信の方向。
※ 図中の表示が通信の全てではない。


=== ftp 開始 ===
-- 接続とセッションの確立 --
( 1)クライアントの割当済みポート (3001) から、サーバーの 21 番ポートへ接続要求。
( 実際には 3 way handshake が行われる )
 ユーザー名とパスワードで認証を受け、login OK となった時点で ftp セッションが確立する。

=== リスト要求 ===
-- 動作モード指定 --
( 2)ASCII モード指定コマンドとその応答。
( 3)パッシブ モード指定。
( 4)サーバーはパッシブ モードを了承し、 IP アドレスとデータ転送用の待ち受けポート番号 5001 を通知する。

-- データ転送用コネクションの開始 --
( 5)サーバーの待ち受けポート番号を取得したクライアントは、 データ転送用コネクションを開始。
 自身が用意した 3002 番ポートからサーバーの 5001 番ポートへ接続要求を送出し、転送用コネクションを確立する ( 3 way handshake )。

-- リスト (ファイル一覧) 要求と転送 --
( 6)クライアントがファイル一覧を要求。
( 7)準備完了と転送開始をクライアントへ通知。
( 8)サーバーは要求されたリストを、転送用コネクションを通して送信。
( 9)送信を完了したサーバーは、送信完了および転送用コネクションの切断を通知。
(10)クライアントは受信確認および転送用コネクション切断了承を通知。
(11)データ転送コネクションを切断。
切断の通知は双方で行う。

=== アップロード ===
-- 動作モード指定 --
(12)ASCII モード指定コマンドとその応答。
(13)パッシブ モード指定。
(14)サーバーはパッシブ モードを了承し、 IP アドレスとデータ転送用の待ち受けポート番号 5002 を通知する。

-- データ転送用コネクションの開始 --
(15)サーバーの待ち受けポート番号を取得したクライアントは、 データ転送用コネクションを開始。
 自身が用意した 3003 番ポートからサーバーの 5002 番ポートへ接続要求を送出し、転送用コネクションを確立する ( 3 way handshake )。

-- アップロード要求とファイル転送 --
(16)クライアントは対象ファイル名をパラメータにして STOR コマンド(アップロード要求)を送出。
(17)サーバーは準備完了と転送開始をクライアントへ通知。
(18)クライアントは確立済みの転送用コネクションを通してファイルデータを送信する。
(19)サーバーは受信確認を通知。
(20)クライアントは送信終了で転送用コネクション切断を通知。
(21)サーバーは要求(アップロード)処理の終了と転送用コネクション切断を通知。
(22)クライアントは転送用コネクション切断の了承を通知。
(23)サーバーは転送用コネクション切断を通知し、クライアントは OK を返す。

※ 制御用のコネクションはクライアントによる ftp 終了処理、あるいはサーバーのタイムアウトに
   よる切断まで維持される。



≪ previous [[ ftp 動作概要 - モードによる違い ]] next ≫