ネットワークソケットとは?ポートとの違いを解説

混同されがちなソケットとポートの違いを、ステップを追って基礎から整理します。

  1. ソケットとは何か

    ソケットとは、IPアドレス・ポート番号・プロトコル(TCPまたはUDP)の組み合わせでできる、通信の片方の端点のことです。電話に例えると、IPアドレスは建物の住所、ポート番号はその建物内の内線番号、ソケットは実際に通話がつながっている1本の回線にあたります。

  2. ポートとソケットの違い

    ポート番号は「どのサービスに接続するか」を示す単なる数字(0〜65535)ですが、ソケットはそのポート番号に実際のIPアドレスとプロトコルまで組み合わせてできる、具体的な接続そのものを指します。同じ80番ポートでも接続してきたクライアントのIPごとに別々のソケットが作られるため、1台のサーバーに同時に多くの人が接続できるのです。

  3. ソケットペアで接続を区別する

    1つのTCP接続は「自分のIP:自分のポート」と「相手のIP:相手のポート」からなるソケットペアによって一意に識別されます。これにより、サーバーは同じ80番ポートに何千人が同時に接続していても、どのソケットペアがどの利用者のものかを正確に区別できます。

  4. TCPソケットとUDPソケットの違い

    TCPソケットは電話をかけるように先に接続を確立してから(スリーウェイハンドシェイク)、順序と到達を保証しながらデータをやり取りする方式です。一方UDPソケットは事前に接続を確立せず、はがきを送るようにその都度データを送信します。ウェブサイトの閲覧のように正確さが重要な場合はTCP、オンラインゲームやビデオ通話のように速度が重要な場合はUDPベースのソケットがよく使われます。

  5. ウェルノウンポートと一時ポート

    サーバーが使う80番(HTTP)や443番(HTTPS)のようなポートは、誰でも接続先がわかるように定められた「ウェルノウンポート」です。一方、自分の端末(クライアント)がサーバーに接続する際に使うポートは、その都度OSが自動的に割り当てる一時ポート(おおむね49152〜65535の範囲)で、利用者が意識する必要はありません。

  6. ソケットアドレスの表記法

    ソケットアドレスは一般的に「IPアドレス:ポート番号」の形で表記されます。例えば192.168.0.10:8080は、192.168.0.10という機器の8080番ポートを指すソケットアドレスで、サーバーの設定ファイルや開発者向けツールの画面でよく見かける表記です。

  7. リスニングソケットと確立済みソケット

    サーバー側のプログラムが特定のポートで新しい接続を待っている状態をリスニングソケットと呼び、クライアントと実際に接続が確立してデータをやり取りしている状態を確立済み(Established)ソケットと呼びます。netstatのようなネットワーク診断コマンドを使えば、現在どのソケットが待受け中で、どのソケットが接続済みかを直接確認できます。

  8. ファイアウォールが制御しているのも結局はソケット

    ファイアウォールのルールで「特定のポートをブロックする」というのは、実際にはそのポートで新しいソケット接続が作られること自体を防いでいるということです。ソケットの概念を理解すると、ポートフォワーディングやファイアウォールのルール、プロキシの設定といった様々なネットワークの仕組みが、結局は同じ原理の上で動いていることが見えてきます。

名前は似ているが別物のWebSocket

「WebSocket」は名前こそ似ていますが、このページで説明したOSレベルのソケットとは別物で、ブラウザとサーバーが持続的に双方向通信を行うために作られた、独立したアプリケーション層のプロトコルです。WebSocketの接続自体は、内部的には通常のTCPソケットの上に構築されています。

ソケット・ファイアウォール・ポートフォワーディングは同じ考え方の別の側面

ファイアウォールが特定のポートをブロックするというのは、実際にはそのポートで新しいソケットが作られるのを防いでいるということであり、ポートフォワーディングはルーターに届いたソケット接続をネットワーク内の特定の機器に転送する仕組みです。ソケットの概念が腑に落ちると、これらの関連する用語が別々に覚えるべきルールではなく、つながった一つの仕組みだと見えてきます。

よくある質問

ソケット番号は自分で決める必要がありますか?

いいえ。サーバー側のウェルノウンポート(80番や443番など)はプログラムや管理者が指定しますが、クライアントとして使う一時ポートはOSが自動的に割り当てるため、利用者が設定する必要はありません。

サーバーでソケットが足りなくなることはありますか?

はい。非常に短い時間に大量の接続の確立と切断を繰り返すサーバーでは、一時ポートが一時的に不足する「ソケット枯渇」と呼ばれる現象が起こることがあります。この場合、サーバー側の接続の再利用(キープアライブ)設定を調整することで緩和されることがあります。