パッシブモード
FTPで、データ転送用のコネクションをクライアントから張る方式。クライアントがPASVコマンドを送り、サーバが知らせたポートにクライアントが接続する。
イマシルちゃんの解説
パッシブモードでは、2本目の電話をかけるのはクライアントの役目なんだ。
クライアントが「ファイルを受け取りたいから、どの番号にかければいい?」って聞くと、
サーバが「この番号で待ってるよ」って教えてくれる。
あとはクライアントがその番号にかけるだけ!
自分からかけるから、家の中にいても通じやすいんだよ。
より深い解説
定義
パッシブモードは、FTPのデータ転送用コネクションを、クライアントからサーバへ張る方式である。サーバが接続を「待つ(passive)」側になることから、この名前がある。
手順
- クライアントが、制御用コネクションでPASVコマンドを送る
- サーバは、データ転送用に待ち受けるポートを開き、そのIPアドレスとポート番号を応答コード227で返す(例:
227 Entering Passive Mode (192,0,2,10,195,80)。最後の2つは 195×256+80 = 50000番のポートを表す) - クライアントが、そのIPアドレスとポートに接続する
- 接続できたら、RETR(ダウンロード)やSTOR(アップロード)などでデータを転送する
パッシブモードが好まれる理由
クライアントのほとんどは、家庭や会社のルータのNAT(NAPT)やファイアウォールの内側にいる。パッシブモードでは、接続はすべてクライアントから外向きに張られるので、内側への接続を許可する設定が要らず、NATを越えやすい。
サーバ側の注意点
その代わり、サーバ側では、データ転送用のポートへの外部からの接続を受け付ける必要がある。ファイアウォールでは、制御用の21番だけでなく、パッシブモードで使うポートの範囲もあらかじめ決めて開けておく必要がある。
また、サーバがNATの内側にある場合、PASVの応答に内側のプライベートアドレスが書かれてしまうと、クライアントが接続できない。サーバに外側のアドレスを応答させる設定や、IPアドレスを含まずポート番号だけを返すEPSVを使う方法がある。
アクティブモードとの比較
| パッシブモード | アクティブモード | |
|---|---|---|
| コマンド | PASV | PORT |
| データ転送用コネクションを張る側 | クライアント | サーバ |
| サーバ側のデータ用ポート | サーバが選んだ番号 | 20番 |
| クライアント側のNATやファイアウォール | 問題になりにくい | 遮断されやすい |