プロキシ通信の宛先ポート番号はどう決まるか
基本情報技術者試験 令和元年度秋期 午前 問34 / ネットワーク › 通信プロトコル
過去問にチャレンジ
クライアントAがポート番号8080のHTTPプロキシサーバBを経由してポート番号80のWebサーバCにアクセスしているとき,宛先ポート番号が常に8080になるTCPパケットはどれか。
- ア
AからBへのHTTP要求及びCからBへのHTTP応答
- イ
AからBへのHTTP要求だけ
- ウ
BからAへのHTTP応答だけ
- エ
BからCへのHTTP要求及びCからBへのHTTP応答
会話形式の解説
講師宛先ポート番号は、パケットを受け取る側を見て判断します。プロキシの前後で通信を分けて追ってみましょう。
受験者プロキシは8080番で待ち受けるので、プロキシに届くパケットはどれも宛先が8080番だと思いました。
講師まず、クライアントからプロキシへの要求はどうでしょうか。受け取るプロキシの待受ポートは何番ですか。
受験者8080番です。この要求の宛先ポートは8080番になります。
講師そのとおりです。では、プロキシからクライアントへの応答も8080番を宛先にしますか。
受験者応答を受け取るのはクライアントです。クライアントが接続に使ったポートが宛先になるので、8080番とは限りません。
講師次に、プロキシとWebサーバの間を見ます。プロキシからWebサーバへの要求は、何番を宛先にしますか。
受験者Webサーバが待ち受ける80番です。プロキシの8080番ではありません。
講師では、Webサーバからプロキシへの応答はどうでしょう。プロキシに戻るというだけで8080番と決められますか。
受験者決められません。プロキシがWebサーバへの接続に使ったポートに戻るので、常に8080番とはいえません。
講師はい。Webサーバからの応答を含む組合せも、プロキシからWebサーバへの要求を含む組合せも、条件に合いません。
受験者宛先が常に8080番になるのは、クライアントからプロキシへの要求だけです。
講師応答では、対応する要求を送った側のポートを確認します。「常に」と問われたら、その番号になる場合があり得るだけでは選べません。
まとめ
TCPパケットの宛先ポート番号は、受信先を見て判断します。クライアントからHTTPプロキシへの要求は、プロキシの待受ポートである8080番が宛先です。プロキシからWebサーバへの要求は80番が宛先で、各応答は要求側が接続に使ったポートへ戻ります。したがって、宛先が常に8080番になるのはクライアントからプロキシへの要求だけです。
解答・解説
正解はイです
この問題のテーマ
HTTPプロキシを経由する通信で、TCPパケットの宛先ポート番号を判断する問題です。
解き方の考え方
パケットの宛先ポートは、送信元ではなく受信先を見て判断します。要求では接続先の待受ポート、応答では要求側が接続に使ったポートが宛先になります。AとBの間、BとCの間を分けて追います。
選択肢ごとの解説
- ×ア AからBへのHTTP要求及びCからBへのHTTP応答AからBへの要求は、8080番で待ち受けるプロキシBに届きます。一方、CからBへの応答はBがCへの接続に使ったポートへ届くため、宛先が常に8080番とはいえません。
- ○イ AからBへのHTTP要求だけAからBへの要求は、Bのプロキシが待ち受ける8080番ポートに送られます。したがって、この要求の宛先ポートは常に8080番です。
- ×ウ BからAへのHTTP応答だけBからAへの応答は、AがBへの接続に使ったポートを宛先とします。Bの待受ポートである8080番を宛先にするわけではありません。
- ×エ BからCへのHTTP要求及びCからBへのHTTP応答BからCへの要求は、80番で待ち受けるWebサーバCに送られます。CからBへの応答はBがCへの接続に使ったポートへ戻るので、どちらも宛先が常に8080番になるとはいえません。
POINT
- ポート番号は、通信先のプログラムを識別する手掛かりです。
- プロキシを挟む場合は、クライアント側とWebサーバ側の通信を分けて考えます。
- 応答の宛先を調べるときは、対応する要求を送った側のポートを確認します。
- 「常に」とある場合は、偶然その番号になり得るだけでは該当しません。
