【入門編】 TCP/UDPにおけるポート番号の重複とソケットの識別 – ネットワーク基礎とWebセキュリティ実践ガイド

こんにちは!インフラやネットワークの世界へようこそ。凄腕ネットワークスペシャリストの私がお届けする今回のテーマは、「TCP/UDPにおけるポート番号の重複とソケットの識別」です。

「えっ、同じポート番号を同時に使っても大丈夫なの?」
「Webサイトを見るとき、自分のパソコンはどの通信がどれだか迷子にならないの?」

ネットワークの勉強を始めると、誰もが一度はこんな疑問にぶつかりますよね。一歩ずつ、身近な例えを交えながらその秘密を紐解いていきましょう!

—

1. 郵便配達でイメージする「通信の宛先」

ネットワークの世界を、私たちの身近な「郵便配達」に例えてみましょう。

インターネットの世界を流れるデータは、すべて小さな封筒(パケット)に入れられて宛先へと届けられます。この封筒には、必ず以下の情報が書かれています。

  • 宛先IPアドレス:どのマンション(サーバー)宛てか
  • 宛先ポート番号:マンションのどの部屋(サービス)宛てか
  • 送信元IPアドレス:どの家(あなたのパソコン)からか
  • 送信元ポート番号:家のどのポスト(アプリの窓口)からか

ここで重要になるのが「ポート番号」です。よく「ポート番号は家の部屋番号や出入り口のようなもの」と例えられます。例えば、Web閲覧(HTTP)なら 80 番、セキュアなWeb閲覧(HTTPS)なら 443 番というように、世界共通の「お約束の部屋番号(ウェルポート番号)」が決まっていますよね。

「じゃあ、同じ部屋番号(ポート番号)を同時に使うなんてできないのでは?」と思いますよね? ここに、ネットワークのめちゃくちゃスマートな仕組みが隠されているんです。

—

2. 5タプル(5つの要素)で通信を完璧に見分ける仕組み

OSやネットワーク機器は、通信セッションをユニーク(一意)に識別するために、たった1つの情報だけを見ているわけではありません。

以下の5つの要素(通称:5タプル)の組み合わせ全体で、通信を識別しています。

1. プロトコル(TCP なのか UDP なのか)
2. 送信元IPアドレス(誰から?)
3. 送信元ポート番号(どの窓口から?)
4. 宛先IPアドレス(誰宛て?)
5. 宛先ポート番号(どの部屋宛て?)

この5つのうち、どれか一つでも違えば、それは「まったく別の独立した通信」として扱われます。

「同じポート番号」の重複が可能な理由

例えば、あなたのパソコンから、ブラウザで同時に2つの異なるWebサイト(例えば、ニュースサイトAと動画サイトB)を開いたとしましょう。

どちらのサイトも、宛先のWebサーバーは 443 番ポート(HTTPS)を待ち受けています。つまり、宛先IPアドレスも宛先ポートも同じになることがあります。

しかし、あなたのパソコンの中では、ブラウザが通信ごとに異なる「送信元ポート番号(例:50001番 と 50002番)」をランダムに割り当てて通信を開始します。

  • 通信①:(TCP, あなたのIP, 50001, ニュースサイトAのIP, 443)
  • 通信②:(TCP, あなたのIP, 50002, 動画サイトBのIP, 443)

ほら!送信元ポート番号が違うため、5タプル全体としては完全に別物になりますよね。これが、同じポート番号が重複して使われてもパケットが混ざらないカラクリです。これをOSのネットワーク層では「ソケットの識別」と呼んでいます。

—

3. 実務で確認!自分のパソコンの「ソケット」を覗き見してみよう

インフラエンジニアや開発者として現場に出ると、「今、どのポートがどんな通信に使われているんだ?」と調査するシーンに頻繁に遭遇します。

ご自身のパソコン(WindowsやMac、Linux)で、現在どんな通信(ソケット)が行われているのか、実際にコマンドを叩いて確認してみましょう!

ネットワークの現在地を覗くコマンド(CLI)

ターミナルやコマンドプロンプトを開き、以下のコードを実行してみてください。

# Windowsの場合(PowerShellまたはコマンドプロンプト)
netstat -ano

# LinuxやmacOSの場合
netstat -anv
# または、より現代的なiproute2スイートを使う場合
ss -tun

このコマンドを実行すると、以下のようなずらっとした一覧が表示されます。

Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)      
tcp        0      0  192.168.1.15.51234     142.250.196.14.443     ESTABLISHED
tcp        0      0  192.168.1.15.51235     151.101.65.140.443     ESTABLISHED
udp        0      0  192.168.1.15.60012     8.8.8.8.53             ESTABLISHED

この出力結果をじっくり見てみてください。
Local Address(あなたのパソコンのIPと送信元ポート)と Foreign Address(相手のサーバーIPと宛先ポート)の組み合わせが、通信ごとに完全に分かれているのが一目でわかりますよね。これがまさに「ソケット」の正体です。

—

4. サーバー側はどうやって複数クライアントをさばいている?

「クライアント側のポートが違うのは分かったけど、サーバー側はいつも 443 番ポートで待ち受けてるよね? 世界中から何千人もの人が同時にアクセスしてきたら、サーバー側の 443 番ポートがパンクしないの?」

これも初学者が必ず抱く、非常に鋭い疑問です。

実は、Webサーバー(NginxやApacheなど)が受け付ける 443 番ポートは、あくまで「最初の案内係(リスニングソケット)」なんです。

1. クライアントからの接続要求(SYNパケット)が、サーバーの 443 番ポートに届く。
2. サーバーの案内係が「いらっしゃい!じゃああなた専用の個室(新しいソケット)を用意するね」と、別の新しいポートや通信スレッドを割り当てる。
3. その後の実際のデータのやり取りは、その「個室(新しいソケットの組み合わせ)」で行われる。

そのため、サーバー側でも結果的に「5タプル」の組み合わせによって、数千・数万のクライアントと同時に通信を確立・維持することができるというわけです。

—

5. まとめ:パケットの旅を支える黒衣の立役者

今回は、TCP/UDPにおけるポート番号の重複と、5タプルによるソケットの識別メカニズムについて解説しました。

  • ネットワークの通信は、プロトコル・送信元IP・送信元ポート・宛先IP・宛先ポートの「5タプル」でユニークに識別される。
  • 送信元ポートが異なる限り、同じ宛先ポート(例:443)に対して同時に通信を行っても、パケットが迷子になることはない。
  • サーバー側も、案内係のポートから個別の通信用ソケットを生み出すことで、大量の同時アクセスをさばいている。

日々の開発やインフラ構築で「ポートが足りない」「通信が競合する」といったトラブルに直面したとき、この「5タプルの世界観」を頭に思い浮かべられれば、原因究明のスピードが劇的に上がります。

一歩ずつ、確実にネットワークの基礎をマスターしていきましょう!それではまた次回の技術解説でお会いしましょう。

コメント

タイトルとURLをコピーしました