この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は イ

解説

TCP 通信のポート番号の使われ方を問う問題です。クライアント A はポート番号8080で待ち受けるプロキシサーバ B を経由して、ポート番号80の Web サーバ C にアクセスします。TCP パケットの宛先ポート番号は「相手が待ち受けているポート」であり、応答パケットの宛先ポートは「要求を送った側が使った送信元ポート(エフェメラルポート: 一時的に割り当てられる番号)」になる、というのが大原則です。各通信を整理すると、① A→B の HTTP 要求: 宛先は B の待受けポート8080。② B→A の HTTP 応答: 宛先は A が使った送信元ポート(エフェメラルポート)。③ B→C の HTTP 要求: 宛先は C の待受けポート80。④ C→B の HTTP 応答: 宛先は B が C への接続で使った送信元ポート(エフェメラルポート)。したがって宛先ポートが常に8080になるのは①の「A から B への HTTP 要求だけ」であり、イが正解です。「応答の宛先ポートは要求の送信元ポートに戻る」という対称性を理解しているかが問われています。

なぜ他の選択肢は違うのか

選択肢 ア
A から B への HTTP 要求の宛先ポートが8080である点は正しいのですが、C から B への HTTP 応答の宛先ポートは8080ではありません。B は C へ要求を送る際、クライアントとして一時的な送信元ポート(エフェメラルポート)を使います。C からの応答はその一時ポートに宛てて返されるため、8080に届くわけではないのです。プロキシの「サーバとしての顔」と「クライアントとしての顔」を区別することがポイントです。
選択肢 ウ
B から A への HTTP 応答の宛先ポートは、A が要求を送ったときに使った送信元ポート(エフェメラルポート)であり、8080ではありません。8080は B が要求を受け付けるための待受けポートであって、A 側のポートではないからです。応答パケットでは要求時の送信元と宛先のポートがそっくり入れ替わる、という TCP 通信の基本を押さえましょう。
選択肢 エ
B から C への HTTP 要求の宛先ポートは、C の Web サーバが待ち受けている80です(8080ではありません)。また C から B への HTTP 応答の宛先ポートは B がその接続で使ったエフェメラルポートです。どちらの方向のパケットも宛先が8080になることはなく、8080が現れるのはあくまで A→B の要求の宛先としてだけです。

解くときのポイント

ポート番号は「宛先=相手の待受けポート」「応答の宛先=要求の送信元ポート(エフェメラル)」の2原則で全パケットを書き出す。プロキシは B:8080 で待受け、C へは一時ポートで接続する二面性をもつ。