RTシリーズのTCP/IPに関するFAQ


FTPのpassiveモード(PASVモード)とは何ですか?


最終変更日2015/Dec/07
文書サイズ7.6KB

FTPのpassiveモード(PASVモード)とは何ですか?


FTPでは、制御用とデータ転送用で異なるTCPセッションを使用します。制御用のTCPセッション(制御セッション)は、FTPサーバー側のポート番号が21で、FTPクライアント側から接続されます。制御セッションは通常、FTPクライアントを立ち上げている間、接続が継続されます。

                 [ 制御セッション ]
FTPクライアント(3001)              FTPサーバー(21)
        |                               |
        |         接続の始まり          |
        | 3001/tcp ------------> 21/tcp | 
        |                               |
        |         コマンドの送信        |
        |------------------------------>|
        |                               |
        |         コマンドの応答        |
        |<------------------------------|
        |                               |
	  

※FTPクライアント側のポート番号は、環境に依存しており、仮に3001とします。

これに対して、データ転送用のTCPセッション(データセッション)は、制御用のTCPセッションを使ってFTPクライアントからFTPサーバーに対して発行されるコマンドによってその都度生成され、データを転送し、それが終わると切断されます。したがって、データセッションは一回のFTP通信の間に何度も接続と切断を繰り返します。

データセッションには、アクティブモードとパッシブモードがあり、両者では制御セッションで使用するコマンドと、TCPセッションをFTPサーバーとFTPクライアントのどちらから開始するかが異なります。

アクティブモードでは、PORTコマンドによりFTPクライアント側で待ち受けているTCPのポート番号がFTPサーバーに伝えられ、FTPサーバーがそのポート番号に対してデータセッション用のTCPセッションを開始します。FTPサーバー側のポート番号は20を使うことになっています。

                 [ 制御セッション ]
FTPクライアント(3001)              FTPサーバー(21)
        |                               |
        |   "PORT 192,168,0,1,11,186"   |
        |------------------------------>|
        |             (OK)              |
        |<------------------------------|
        |                               |

                [ データセッション ]
FTPクライアント                     FTPサーバー
        |                               |
        |   データ転送用接続の始まり    |
        |    3002/tcp <-------- 20/tcp  |
        |                               |
        |        GET時のデータ転送      |
        |<------------------------------|
        |                               |
      

※FTPクライアント側のポート番号は、環境に依存しており、仮に3002とします。

一方、パッシブモードでは、FTPクライアントからのPASVコマンドに対してFTPサーバーがデータセッション用の待ち受けポート番号を返信し、FTPクライアントがそのポート番号に対してデータセッション用のTCPセッションを開始します。パッシブモードでは、TCPセッションを張る方向が制御セッションとデータセッションで同じ(FTPクライアントからFTPサーバーへの方向)となるため、ファイアウォールやロードバランサーなどとの相性がいいと言われています。

                 [ 制御セッション ]
FTPクライアント(3001)              FTPサーバー(21)
        |                               |
        |             PASV              |
        |------------------------------>|
        |    OK(133,176,200,51,4,255)   |
        |<------------------------------|
        |                               |

                [ データセッション ]
FTPクライアント                     FTPサーバー
        |                               |
        |   データ転送用接続の始まり    |
        |  3002/tcp --------> 1279/tcp  |
        |                               |
        |        GET時のデータ転送      |
        |<------------------------------|
        |                               |
      

※FPTサーバー側のポート番号は、環境に依存しており、仮に1279とします。

※FTPクライアント側のポート番号は、環境に依存しており、仮に3002とします。

PORTコマンドやPASVコマンドでは、データセッションを待ち受けるIPアドレスとポート番号の情報を、以下のような文字列としてやり取りしています。


               +----- ポート番号の第1オクテットの10進数表記
               |  +-- ポート番号の第2オクテットの10進数表記               
               |  |
               V  V

133,176,200,51,4,255

 ^   ^   ^  ^
 |   |   |  |
 |   |   |  +------- IPアドレスの第4オクテットの10進数表記
 |   |   +---------- IPアドレスの第3オクテットの10進数表記
 |   +-------------- IPアドレスの第2オクテットの10進数表記
 +------------------ IPアドレスの第1オクテットの10進数表記
      

つまり、IPアドレスやポート番号をオクテット単位に分解し、それぞれのオクテットを10進数表記したうえで、コンマで連結しています。

NATやIPマスカレード機能はIPアドレスやポート番号を変換する機能であるため、PORTコマンドやPASVコマンドで受け渡されるIPアドレスやポート番号も書換える必要があります。これらの情報は10進表記の文字列のため、値が変ると文字列の長さも変る場合がありますが、ヤマハネットワーク機器のNAT・IPマスカレード機能ではその点も含めて正しく通信が行えるように変換処理を行います。

[ FAQ for RT-Series ]
[ FAQ for TCP/IP / files / IP-Filter / VPN(IPsec) / Intro / Install / Config ]