ネットワーク通信を理解するとき、IPアドレスと並んで重要になるのがポート番号(port number)です。IPアドレスだけでも通信先のコンピューターは特定できますが、そのコンピューター上でWebサーバー、メールサーバー、SSHなど複数のサービスが動作している場合、IPアドレスだけでは通信をどのサービスへ渡せばよいのか判断できません。
そこでTCPやUDPでは、通信先をさらに細かく識別するためにポート番号を利用します。簡単に表現すると、IPアドレスが通信先のホストを識別し、ポート番号がそのホスト上の通信相手を識別するという関係です。
この記事では、ポート番号の基本的な役割から、同じIPアドレスで複数サービスを提供できる理由、TCP・UDPとの関係、クライアント側のポート番号まで具体例を交えて解説します。
ポート番号とは何か
ポート番号は、TCPやUDPによる通信で使用される16ビットの番号です。そのため値の範囲は0~65535となります。ネットワーク上の通信では、IPアドレスだけでなくTCPまたはUDPのポート番号を組み合わせることで通信相手を識別します。
よく「IPアドレスは建物の住所、ポート番号は部屋番号」と例えられます。例えば「192.0.2.10」というIPアドレスを持つサーバーがあったとしても、そのサーバーではWeb、SSH、メールなど複数のサービスを同時に提供できます。ポート番号があることで、それぞれの通信を適切なサービスへ振り分けられます。
ただし、ポート番号そのものがアプリケーション名を表しているわけではありません。サーバー側のプログラムが特定のポートで通信を待ち受ける(listenする)ことによって、そのポートへの通信を受け取れるようになります。
同一IPアドレスで複数のサービスを識別できる仕組み
例えば、IPアドレスが「192.0.2.10」のサーバーでHTTPSとSSHの両方を提供するとします。一般的にはHTTPSをTCP 443番、SSHをTCP 22番で待ち受ける構成が考えられます。
| サービス例 | プロトコル | 代表的なポート | 通信先の例 |
|---|---|---|---|
| HTTPS | TCP | 443 | 192.0.2.10:443 |
| SSH | TCP | 22 | 192.0.2.10:22 |
| DNS | UDP/TCP | 53 | 192.0.2.10:53 |
この場合、192.0.2.10のTCP 443番へ届いた通信はHTTPSを提供するサーバープログラムが処理し、TCP 22番へ届いた通信はSSHサーバーが処理します。同じIPアドレスでもポート番号が異なるため、OSは通信を区別できます。
「IPアドレス+トランスポートプロトコル+ポート番号」という情報によって、同一ホスト上の複数の通信相手を区別できることが重要なポイントです。
IPアドレスだけでは不十分な理由
IP(Internet Protocol)の主な役割は、パケットを送信元ホストから目的のホストへ届けることです。一方、そのホスト上ではWebブラウザー、メールソフト、Webサーバー、データベースなど多数のプログラムが同時に通信している可能性があります。
仮にポート番号がなければ、あるコンピューターへパケットが届いたとしても、TCPやUDPを利用するどの通信相手にデータを渡すべきなのかを区別する仕組みが不足します。そこでトランスポート層のTCPやUDPがポート番号を使用します。
つまり、IPアドレスとポート番号には異なる役割があります。IPアドレスはネットワーク上の通信先を指定するために使われ、ポート番号はそのホスト内でTCP/UDP通信を識別するために使われると整理すると理解しやすくなります。
サーバー側とクライアント側の両方にポート番号がある
ポート番号というと「Webなら443番」のようにサーバー側だけを想像しがちですが、実際のTCP・UDP通信には送信元ポート番号と宛先ポート番号があります。
例えばPCのWebブラウザーからHTTPSサーバーへアクセスするとき、サーバー側の宛先ポートには443番が使われます。一方、クライアント側ではOSが利用可能なポート番号から一時的な送信元ポートを割り当てるのが一般的です。このような一時的に使用されるポートはエフェメラルポートなどと呼ばれます。
例えば「クライアントの192.0.2.20:53001からサーバーの198.51.100.10:443へTCP接続する」といった通信が成立します。同じPCからさらに別の接続を開始すれば、別の送信元ポートが割り当てられることがあります。
TCP通信は複数の情報を組み合わせて接続を区別する
TCPでは、単純に「ポート443を使用している通信は全部同じ接続」と扱われるわけではありません。複数のクライアントが同じWebサーバーの443番ポートへ同時に接続できるのは、通信を識別するために送信元・宛先の情報を組み合わせているためです。
典型的には、送信元IPアドレス、送信元ポート、宛先IPアドレス、宛先ポートの組み合わせによってTCP接続を識別できます。そのためWebサーバーが1つのTCP 443番ポートで待ち受けていても、多数のクライアントとの接続を個別に管理できます。
例えばクライアントAとクライアントBが同じサーバーの443番へアクセスしても、送信元IPアドレスや送信元ポートが異なれば別々の接続として扱えます。これはWebサーバーが多数の利用者へ同時にサービスを提供できる仕組みを理解するうえでも重要です。
TCPとUDPではポート番号の空間が別
ポート番号を理解するときに見落としやすいのが、TCPとUDPの違いです。TCP 53番とUDP 53番は、数字が同じ「53」であっても別のトランスポートプロトコルに属するポートです。
そのため「ポート番号だけ」で通信先を完全に表現するのではなく、「TCPの443番」「UDPの53番」のようにプロトコルとセットで考える必要があります。ファイアウォールなどを設定するときにもTCPとUDPの指定を間違えると、意図した通信ができないことがあります。
実際のサービスによってはTCPのみ、UDPのみ、あるいは両方を利用します。ポート番号を調べる際には番号だけでなく、そのサービスがどのトランスポートプロトコルを利用するのかも確認することが大切です。
ウェルノウンポートとポート番号の範囲
ポート番号は0~65535ですが、用途に応じた区分があります。IANA(Internet Assigned Numbers Authority)では、0~1023をSystem Ports(一般にウェルノウンポートとも呼ばれる)、1024~49151をUser Ports、49152~65535をDynamic and/or Private Portsとして扱っています。
代表例としてHTTPのTCP 80番、HTTPSのTCP 443番、SSHのTCP 22番、DNSのTCP/UDP 53番などがあります。こうした標準的な割り当てがあることで、クライアントは一般的なサービスへ接続するときの宛先ポートを判断できます。
ただし、特定のサービスが必ずその代表的なポート番号で動作しなければならないという意味ではありません。管理者が別のポートでサービスを待ち受けさせる構成も可能であり、その場合はクライアント側も正しいポートを指定する必要があります。
ポート番号とセキュリティの関係
ポート番号はファイアウォールなどのアクセス制御でも重要です。例えば外部からWebサービスへのHTTPS通信だけを受け付けたい場合、TCP 443番への必要な通信を許可し、それ以外をポリシーに応じて制限するといった設定が行われます。
ただし、ポートを変更するだけでサービスそのものが安全になるわけではありません。ポート番号は通信を識別するための情報であり、暗号化、認証、アクセス制御、ソフトウェア更新などのセキュリティ対策とは役割が異なります。
また「ポートが開いている」という表現は、文脈によってサービスが待ち受けていることやファイアウォールで通信が許可されていることなどを指します。トラブルシューティングでは、アプリケーションの待ち受け状態とファイアウォールの設定を分けて確認することが重要です。
まとめ|IPアドレスとポート番号を組み合わせて通信先を識別する
ネットワーク通信では、IPアドレスだけでなくTCPやUDPのポート番号を利用することで、同じホスト上で動作する複数の通信相手を識別できます。例えば同じIPアドレスでもTCP 443番ではHTTPS、TCP 22番ではSSHというように、異なるサービスを提供できます。
さらに通信には送信元ポートと宛先ポートがあり、TCPでは送信元・宛先のIPアドレスとポート番号などを組み合わせることで複数の接続を区別します。この仕組みによって、1台のサーバーが複数種類のサービスを提供したり、多数のクライアントから同時に接続を受けたりできます。
「IPアドレスはどのホストへ届けるか、ポート番号はそのホスト上のどのTCP/UDP通信へ届けるか」という基本を押さえておくと、Webサーバー、ファイアウォール、NAT、ソケットプログラミングなど、より高度なネットワーク技術も理解しやすくなります。

コメント