こんにちは!インフラやネットワークの世界へようこそ。凄腕ネットワークスペシャリストの私がお届けする今回のテーマは、「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タプルの世界観」を頭に思い浮かべられれば、原因究明のスピードが劇的に上がります。
一歩ずつ、確実にネットワークの基礎をマスターしていきましょう!それではまた次回の技術解説でお会いしましょう。
コメント