MENU

FTPのアクティブモードとパッシブモードは何が違うのか

更新日:2019/08/12

 

初めてWebサーバーにFTPでデータを送信するとき、「アクティブ」はつながらないから「パッシブモード」を指定するように言われました。

 

そして今思いました。
アクティブ」とか「パッシブモード」とか、何なのさ?

 

ということで調査開始。

 

■お願い
去年ECMAScript2020を頑張って日本語訳しましたが、誰も見てくれません・・・
誰かみて!!
【JavaScript】 学習のためECMAScript2020を日本語訳してみました

アクティブやパッシブといえば潜水艦

 

私がアクティブやパッシブと聞いて、最初に思い浮かんだのが潜水艦。

 

音を聞いて周囲の状況を確認するのに使用するソナー。
そのソナーにはアクティブとパッシブに分かれるそうです。

 

アクティブソナー

 

アクティブは、自分から音を出して、その反射で周囲を探る方式。
能動的とか積極的と言えます。

 

パッシブは、相手の音を拾い集める方式。
こちらは受動的、相手の出方を待つ方式ですね。

 

FTPのアクティブモードとパッシブモードも、同じことがいえます。

 

どちらからデータコネクションを確立するか

FTPのアクティブモードとパッシブモードの違いは、サーバーとクライアントのどちらからデータコネクションを確立するかということです。

 

まず最初に、クライアントからサーバーにFTP接続要求をおこない、コントロールコネクションを確立します。

 

21番ポートに制御用のコントロールコネクションを張る

 

そして、データ一件ごとに、データコネクションを張ってデータの送受信をおこないます。

 

アクティブモードとパッシブモードは、このデータコネクションの張り方が異なります。
その違いを簡単に解説します。

 

なおデータコネクションやコントロールコネクションについては、こちらも参照してみてください。
参考FTPとSFTPのポート番号と簡単な説明

 

アクティブモードはサーバーから接続

 

サーバーからデータコネクションを確立(アクティブモード)

 

 

アクティブモードは、データコネクションを張る際、クライアントが自分のIPアドレスとポート番号をサーバーに伝え、接続を要求します。

 

要求されたサーバーは、クライアントに向けて、接続を試みます。

 

クライアント側

 

データ転送したいので、XXXXポートに接続してくださーい!
ちなみにこちらのIPアドレスはXXX.XX.XX.XXです。


 

サーバー側

 

おーけー!
そのポートと、こちらの20番ポートを繋げるよー


 

ちなみに、サーバーのポートが20番固定なのも、アクティブモードの特徴です。

 

パッシブモードはクライアントから接続

 

クライアントからデータコネクションを確立(パッシブモード)

 

パッシブモードは、データコネクションを張る際、サーバーがIPアドレスと接続ポート番号をクライアントに伝え、接続を要求します。

 

要求されたクライアントは、サーバーに向けて、接続を試みます。

 

クライアント側

 

パッシブモードで
データ転送したでーす!


 

サーバー側

 

おーけー!
XXXXポートに接続してください。
ちなみにこちらのIPアドレスはXXX.XX.XX.XXです。


 

クライアント側

 

はーい、了解しましたー!
接続しまーす


 

パッシブモードはアクティブモードと異なり、サーバー側のポートが、接続時に決定されるのが特徴です。

FTPにはなぜ二つのモードが存在するのか

 

FTPにはなぜ二つのモードが存在するのでしょうか。
実はアクティブモードは、データコネクションを張るときにある問題がおこる可能性があります。

 

ファイアーウォールが通信を遮断する

 

場合によっては、サーバーからの接続要求をファイアーウォールが受け付けないことがあります。

 

インターネットを通じて通信をおこなうときに問題になるのが、外部からの不正なアクセスです。

 

不正なアクセスはポートが入口となります。
そのため、使わないポートはアクセスを遮断しておくのが、基本的なセキュリティです。
そして遮断を担当しているのが、ファイアーウォールです。

 

ファイアーウォールから外に出るのは簡単・入るのは難しい

 

多くのコンピュータは、ファイアーウォールの初期設定がサーバーからの接続要求を遮断するようになっています。
そのため、アクティブモードでFTPを利用できない可能性が高いのです。

 

逆に、内側からファイアーウォールをこえて外に出るのは簡単なので、パッシブモードならFTPを利用できる可能性が高いのです。

 

 

プライベートIPとグローバルIPの問題

 

もう一つの問題として、グローバルIPとプライベート(ローカル)IPの問題もあります。

 

グローバルIPは、ルーターの外から見たIPアドレス。
プライベートIPは、ルーター内の個々の機器のIPアドレスです。

 

プライベートIPとグローバルIP

 

インターネットを介してFTP転送を行う場合、FTPサーバーはグローバルIPしか見えません。
プライベートIPに直接データを送ることができないのです。

 

そのためFTPサーバーには、接続先IPアドレスとしてグローバルIPを伝える必要があります。
しかしクライアントが把握しているのは、プライベートIPです。

 

もう一つの問題が、接続が完了していない状態で、サーバーから送られてきたデータを、ルーターはどのプライベート機器に送ったらいいのか判断できない点です。

 

現在のルーターの多くは、FTPコマンドを解析して、どちらの問題もうまく対応してくれるものが多いようですが、それ以前は一般ユーザーでは解決できない問題でした。

 

しかしパッシブモードで、クライアントからサーバーに接続することで、この問題を解決できるのです。

 

サーバー側でも同じ問題がある

 

ここまでFTPクライアント側からみた問題点を挙げましたが、サーバー側もファイアーウォールやIP変換の問題が同じようにあります。

 

クライアントがパッシブモードで接続するには、サーバーの管理者がセキュリティとの兼ね合いに悩みながら、うまく設定する必要があるのです。

 

その反面、20と21番だけポートを開けておけばいいアクティブモードの方が、サーバー管理者としては楽といえますね。

潜水艦は関係なかった

潜水艦のソナーとFTPは似ていると書きましたが、全く似ていませんでした…

 

適当なこと書きました。
すみません_(._.)_

記事の内容について

 

こんにちはけーちゃんです。
説明するのって難しいですね。


「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。

そんなときは、ご意見もらえたら嬉しいです。

ご意見はこちら。
https://note.affi-sapo-sv.com/info.php

【お願い】

お願い

■このページのURL


■このページのタイトル


■リンクタグ