はじめに
Webサイトを閲覧するとき、IPアドレスは通信先の端末までデータを届けるために使われます。しかし、端末ではWebサーバー、メールサーバー、DNSサーバーなど複数のサービスが動くことがあります。IPアドレスだけでは、届いたデータをどのサービスへ渡せばよいかを区別できません。
区別に使われるのがポート番号です。この記事では、ポート番号の役割、送信元と宛先の違い、3つの番号範囲、複数の通信を識別できる仕組みを解説します。
この記事で分かること
- ポート番号が必要な理由
- 送信元ポート番号と宛先ポート番号の役割
- ポート番号の3つの範囲
- 同じ端末で複数の通信を区別できる理由
- ポート番号とアプリケーションの関係で注意する点
ポート番号とは
ポート番号は、TCPやUDPが受信したデータを、端末内の適切なアプリケーションや通信の入口へ渡すために使う16ビットの番号です。0から65535までの値を取り、TCPとUDPのヘッダーには送信元ポート番号と宛先ポート番号が格納されます。
IPアドレスがネットワーク上の通信先を示すのに対し、ポート番号はその通信先でデータを受け取るサービスや通信を区別します。例えば、1台のサーバーがWebとメールの両方を提供していても、宛先ポート番号が異なれば、受信したデータを対応する処理へ振り分けられます。
トランスポート層全体の役割とTCP・UDPの違いは、トランスポート層とは?役割とTCP・UDPの違いを分かりやすく解説で解説しています。IPアドレスとネットワーク層の役割は、IPとは?ネットワーク層の役割やルーティングを初心者向けに分かりやすく解説を参照してください。
送信元ポート番号と宛先ポート番号
TCPやUDPの通信では、送信側と受信側の両方がポート番号を使用します。宛先ポート番号は受信側でデータを渡す先を示し、送信元ポート番号は通常、応答を返すときの宛先として使われます。
宛先ポート番号は受信側の入口を示す
宛先ポート番号は、受信側でデータを渡すサービスや通信の入口を示します。サーバーは、提供するサービスに対応するポート番号でデータを待ち受けます。
例えば、TCPを使う一般的なHTTPS通信では、クライアントはサーバーの443番ポートへ接続します。サーバー側は宛先ポート番号を確認し、HTTPSを処理するプログラムへデータを渡します。
送信元ポート番号は送信側の通信を区別する
送信元ポート番号は、送信した側でその通信を区別する番号です。受信側が応答するときは、通常、この番号を応答の宛先ポート番号として使います。クライアントが通信を開始するときは、OSが利用可能な番号から送信元ポート番号を選ぶのが一般的です。
サーバーは、受信した通信に送信元ポート番号が示されている場合、通常、その番号を応答の宛先ポート番号として使用します。UDPでは送信元ポート番号を0にして、応答先を示さないこともできます。これにより、1台のクライアントが同じサーバーへ複数の通信を行っていても、応答を対応する通信へ戻せます。
送信元ポート番号と宛先ポート番号がヘッダーのどこに格納されるかは、UDPヘッダーとは?4つのフィールドとIPv4・IPv6のチェックサムを解説で確認できます。
ポート番号の3つの範囲
ポート番号は、IANAの管理上、System Ports、User Ports、Dynamic/Private Portsの3つに分けられます。
| 番号範囲 | 名称 | 主な位置づけ |
|---|---|---|
| 0~1023 | System Ports(Well Known Ports) | 広く利用されるサービスなどに割り当てる範囲。0番は予約されている |
| 1024~49151 | User Ports(Registered Ports) | アプリケーションやサービスが登録を申請できる範囲 |
| 49152~65535 | Dynamic/Private Ports | IANAが個別サービスへ割り当てず、動的利用や私的利用に使う範囲 |
この区分は、ポート番号の登録や利用目的を整理するものです。System PortsとUser Portsのすべてに用途が割り当てられているわけではなく、未割り当ての番号もあります。また、ポート番号の登録はTCPとUDPで別に管理されるため、同じ番号でもトランスポートプロトコルが異なれば別の登録として扱われます。
クライアントの送信元ポート番号は一時ポートとも呼ばれます。Dynamic/Private Portsは一時ポートの利用を想定した範囲ですが、実際にOSが選択する範囲は実装や設定によって異なるため、必ず49152~65535から選ばれるとは限りません。
通信は5つの情報の組み合わせで識別する
ポート番号だけでは、通信を一意に識別できません。IPネットワーク上のTCP・UDP通信は、次の5つの情報の組み合わせで区別されます。
- 送信元IPアドレス
- 宛先IPアドレス
- 送信元ポート番号
- 宛先ポート番号
- トランスポートプロトコルの種類
この組み合わせは5タプルと呼ばれます。宛先IPアドレスと宛先ポート番号が同じでも、送信元IPアドレスや送信元ポート番号が異なれば、別の通信として区別できます。
TCPでは、通信の両端にあるIPアドレスとポート番号の組み合わせによって接続を管理します。UDPでも、送信元と宛先の情報、UDPであることを組み合わせて、受信したデータを対応する処理へ渡します。
Webアクセスで見るポート番号の使われ方
同じクライアントが、同じWebサーバーへ2つのTCP接続を行う例を考えます。次のポート番号は説明用の例です。
| 通信 | 送信元 | 宛先 | プロトコル |
|---|---|---|---|
| 接続A | クライアント:53001番 | Webサーバー:443番 | TCP |
| 接続B | クライアント:53002番 | Webサーバー:443番 | TCP |
2つの接続は、宛先サーバーと宛先ポート番号が同じです。しかし、送信元ポート番号が異なるため、クライアントとサーバーは接続Aと接続Bを別の通信として管理できます。
実際にはIPアドレスも識別情報に含まれます。別の端末から同じWebサーバーへ接続した場合は、送信元IPアドレスの違いによっても通信を区別できます。
ポート番号とアプリケーションの対応は絶対ではない
IANAの登録情報は、どのサービスがどのポート番号を一般的に利用するかを共有するためのものです。ただし、登録されたポート番号を使えば、必ずそのアプリケーションが動いていると断定できるわけではありません。
管理者はサービスを標準とは異なるポート番号で動かせます。ポート番号は通信の振り分けに必要な情報ですが、実際のアプリケーションや通信内容をポート番号だけで断定しないことが重要です。
まとめ
ポート番号は、TCPやUDPが受信したデータを、端末内の適切なアプリケーションや通信へ渡すために使う番号です。IPアドレスがネットワーク上の通信先を示し、ポート番号がその通信先にあるサービスや通信の入口を区別します。
要点は次のとおりです。
- ポート番号は0~65535の16ビット番号である
- 宛先ポート番号は受信側の渡し先を示し、送信元ポート番号は通常、応答時の宛先として使われる
- 番号範囲はSystem、User、Dynamic/Privateの3つに分かれる
- 一時ポートの実際の選択範囲はOSの実装や設定によって異なる
- 通信はIPアドレス、ポート番号、TCP・UDPの別を組み合わせて識別する
- 登録ポートと実際のアプリケーションの対応は絶対ではない
ポート番号を単独の番号ではなく、IPアドレスやトランスポートプロトコルと組み合わせて理解すると、同じ端末で複数の通信を処理できる理由が分かります。


コメント