FTPパッシブモードで、サーバーがランダムなポート番号をクライアントに送信し、そこでデータチャネルを確立できることを読みました。
次に、クライアントは、ランダムなポート番号からサーバーによって送信されたこのポート番号へのデータチャネルを確立します。
私の質問は、サーバーがランダムなポート番号をクライアントに送信する理由です。クライアントがサーバー側のポート番号20へのデータチャネルを直接確立できないのはなぜですか?
FTPパッシブモードで、サーバーがランダムなポート番号をクライアントに送信し、そこでデータチャネルを確立できることを読みました。
次に、クライアントは、ランダムなポート番号からサーバーによって送信されたこのポート番号へのデータチャネルを確立します。
私の質問は、サーバーがランダムなポート番号をクライアントに送信する理由です。クライアントがサーバー側のポート番号20へのデータチャネルを直接確立できないのはなぜですか?
回答:
これが、FTPプロトコルがパッシブモードで動作するように設計された方法です。このモデルが他のプロトコルで再び繰り返されたとは思わないので、おそらくそれは良い考えではありませんでした(FTPアクティブモードについてはさらにそうです)。
データ接続ポートには、プロトコルはありません。サーバーが認識しているのは、その接続で情報を運ぶ唯一のものは、接続先のポート番号だけです。
毎回同じポートに接続すると、サーバーは接続先のファイルを判別できなくなります。ポート番号は、制御接続の転送要求とデータ接続の間のリンクとして機能します。ポート番号は、PASV
コマンドへの応答に含まれています。
2つのクライアントが同時に転送を要求した場合、サーバーが単一のポートで接続を受け入れると、サーバーは転送するファイルを指定できません。もちろん、サーバーは決定にクライアントIPを使用できます(実際には、多くのFTPサーバーは、クライアントIPがセキュリティのために制御接続で使用されているIPと一致することを検証します)。
しかし、これはうまくいきません:
なぜFTPパッシブモードでは1つのポートだけではなくポート範囲が必要なのかに対する私の回答から部分的にコピーされましたか?サーバー障害時。
通常、サーバーはランダムなポートを送信しませんが、定義された(インストールによって)範囲/プールから空きポートを送信します-クライアントの場合、これはランダムに見えます。このポートは、範囲を定義する必要があるファイアウォールで転送する必要があります。
残念ながら、FTPは古いものです。おそらく、古代のサーバーは、ポートを除いて、複数のクライアントのデータセッションを区別できませんでした。一般に、すべてが1つのソケットセッション内で適切にパケット化される最新のプロトコルに移行することをお勧めします。