web-dev-qa-db-ja.com

プロキシは、リクエストの転送先をどのようにして知るのですか?

プロキシが接続を受信すると、プロキシはリクエストの転送先をどのように知るのですか?
たとえば、Javaでは、プロキシのシステムプロパティを設定できます。
プロキシのIPを設定すると、リクエストがプロキシに送信されますが、プロキシは実際のリクエストの転送先をどのようにして知るのでしょうか。

3
Jim

プロキシにはいくつかの種類があり、それぞれが異なるアプローチを使用して、プロキシサーバーに実行したいことを通信します。

HTTPプロキシはHTTPのみを理解し、パケットのプロキシを試みませんが、代わりにconnect、get、postなどのHTTPコマンドを作成します。HTTPプロキシは、下位層でアドレス指定されたまったく新しいパケットを作成し、宛先サーバーに送信します。クライアントが接続を開始すると、httpフローの最初のパケットにCONNECT動詞が含まれます。プロキシはそれを受信し、必要に応じてDNSルックアップを実行し、httpコマンドとクライアントから受信したパケットからのデータフローを使用してリモートサーバーに送信するパケットを作成します。

SOCKSプロキシは、セッション層の上でトンネリングを実行するため、クライアントは、接続する場所をプロキシに通知し、プロトコル情報を転送し、プロキシが必要とする認証を渡すレイヤー5ヘッダーを構成します。クライアントは、レイヤー6/7データグラムをレイヤー5セグメントのデータ領域に配置し、プロキシに送信します。プロキシはそれを受信し、リモートサーバー宛ての新しいパケット(SOCKSヘッダーなし)を作成し、クライアントパケットから新しいパケットにlayer6/7データユニットを配置して、宛先サーバーに送信します。 SOCKSプロキシは、すべての上位層プロトコルで機能するわけではありませんが、tcpやudpを含むほとんどの下位層プロトコルをプロキシします。

6
Frank Thomas