パケットを受信したサーバーやパソコンでは、そのパケットを適切に処理できるアプリケーションに渡す必要があります。ホームページのデータをメールアプリが受け取っても対応できないからです。
パソコンやサーバーでは複数のアプリケーションが同時に稼働しています。ポート番号はそうした環境でアプリケーションを識別するために用いられます。
ポート番号は16ビットの整数値で 0番 から 65,535番まであり、番号によって次の3種類に分類されます。
- 0番 ~ 1,023番
ウェルノウン ポート番号(well known port numbers)
IANAが使用目的(対応するアプリケーション)を定めています。
- 1,024番 ~ 49,151番
登録ポート番号(registered port numbers)
使用目的の申請をIANAが受け付けて公表しています。
- 49,152番 ~ 65,535番
動的ポート番号(dynamic/private port numbers)
自由に使用できるポート番号として開放されています。
主にアプリケーション識別用としてOSが管理しています。
代表的なTCP(UDP)のウェルノウン ポート番号は次の通りです。
ポート番号 | 適用 |
20 | ftp-data:ファイル転送データ |
21 | ftp:ファイル転送コントロール |
25 | smtp:メール送信 |
53 (udp) | dns:ドメイン名問い合わせ |
|
ポート番号 | 適用 |
80 | http:webアクセス |
110 | pop3:メール受信 ver.3 |
123 | ntp:時刻合わせ |
443 | https:高セキュリティのhttp |
|
ポート番号の一覧は
IANAのサイトで見ることができます。
【 もし、ポート番号がなかったら 】
あるユーザーがホームページを見ようとしています(下図)。

ユーザーの送り出したパケットがサーバーに届きます。
サーバーOSは受信したパケットのデータを適切なアプリケーションに渡したいところですが、要求サービスの情報が不足しているため、受け渡すべきアプリケーションを判別できない事態に陥ってしまいます。
このパケットは破棄されることになり、通信は不成立になります。
【 ポート番号があれば 】
あるユーザーがホームページを見ようとしています(下図)。
(1)
ブラウザの要求を受けたユーザーOSは、動的ポート番号の中から空いている番号を選択(仮に50000)してブラウザに割り当て、次の情報を記載した要求パケットを送信します。
- 宛先ポート番号:80 (ウェルノウン ポート)
- 待受ポート番号:50000 (動的ポートからランダムに選択)
(2)
サーバーOSは宛先ポート番号 80 を参照し、該当の処理(http)を担当するアプリケーション(httpd等)にデータを渡します。
httpd等が処理・作成した応答データを受けたサーバーOSは、宛先ポート番号が50000(要求パケットの送信元ポート)の応答パケットを完成させて送信します。
応答パケットを受け取ったユーザーOSは宛先ポート番号 50000 を参照し、要求元であるブラウザにデータを届けます。
IPアドレス、MACアドレス、ポート番号の関係は、
IPアドレスを会社の所在地、ポート番号を実務担当者、MACアドレスを荷物(パケット)の中継を行う物流ターミナルに例えると分かり易くなります。
パケットの送受信を適格に行うには、パケットを処理するアプリケーションを双方で識別可能にする仕組みが必須です。
サーバー側は公表されているウェルノウン ポート使用し、ユーザー側は動的ポートの中から選んだポート番号を要求の際に通知する方法が採用されています。
TCP/IP通信での宛先指定には、
IPアドレスとポート番号のセットが基本になります。
パソコンが選択する動的ポート番号の範囲は netsh コマンドで表示することができます。下記はTCPプロトコルの動的ポートの範囲を表示したものです(windows10の例)。
C:\>netsh int ipv4 show dynamicport tcp
プロトコル tcp の動的ポートの範囲
---------------------------------
|
開始ポート | : 49152 |
ポート数 | : 16384 |
ウェルノウン ポートを必要とするのはサーバーです。クライアント(ユーザー)の要求を待ち受けるには公開されている情報(番号)を使う方が便利だからです。
一方クライアントは、待ち受けるポート番号を要求パケットに記述してサーバーに知らせれば済むことなので、動的ポート番号の中からランダムに選んだ番号を使います。
パソコンが使っているポート番号は netstat コマンドで知ることができます。
アドレス末尾に続く数値がポート番号です。
C:\>netstat -no
アクティブな接続
|
プロトコル | ローカル アドレス | 外部アドレス | 状態 | PID |
TCP | 127.0.0.1:5354 | 127.0.0.1:49681 | ESTABLISHED | 3496 |
TCP | 127.0.0.1:49681 | 127.0.0.1:5354 | ESTABLISHED | 908 |
TCP | 192.168.1.2:50004 | 104.78.93.174:80 | CLOSE_WAIT | 3304 |
TCP | 192.168.1.2:50507 | 219.103.130.73:80 | CLOSE_WAIT | 8580 |
ハードウェアでは周辺機器接続用のケーブル差込口をポートいいます。LANポートやUSBポート、シリアルポートなどがあります。一方ソフトウェアでは抽象化されたデータの受け渡し窓口を指してポートと呼んだりします。
TCP/IP通信ではパケットに対応するアプリケーションを識別するために用いられます。