ポート番号は通信先の機器でどのサービスに接続するかを区別する番号です。WebサイトならHTTPSの443番、リモートログインならSSHの22番。エンジニアなら当たり前のように覚えている番号ですが、そもそも誰が決めたのか?
ポート番号の割り当てを管理しているのはIANA
IANA(Internet Assigned Numbers Authority)はインターネットで使う番号や名前の登録を担当している機関です。ポート番号についてはService Name and Transport Protocol Port Number Registryという登録簿を公開していて、どのサービスにどの番号が割り当てられているかを誰でも確認できます。登録の手順はRFC 6335で定められています。
流れはプロトコルを作った人が申請し、審査を通ると登録簿に載るというものです。ApacheやOpenSSHのようなソフトが番号を決めるわけではありません。この登録簿は自分でも調べられます。下記のIANAのURLにアクセスすると検索を行うことができます。
https://www.iana.org/assignments/service-names-port-numbers
Service Name(サービス名)、Port Number(ポート番号)に加え、Transport Protocol(TCP・UDPなどの通信方式)を確認します。同じ番号でもTCPとUDPは別々に扱われます。
ここではService Nameがssh、Port Numberが22、Transport Protocolがtcp の行を見てみます。Reference(参照先)はRFC 4251で、今回確認した登録簿ではAssignee(割り当て先)は空欄でした。Description(説明)も合わせて読むと、その行が何のサービスを示しているか分かります。


ポート番号は3つの範囲に分かれている
ポート番号は16ビットで表すため値の範囲は0〜65535です。TCP・UDPの0番は予約されており通常のサービス用には割り当てられません。IANAは番号を次の3つの範囲に分けて扱っています。
| 範囲 | 呼び方 | 割り当て方 |
|---|---|---|
| 0〜1023 | System Ports(別名 Well Known Ports、ウェルノウンポート) | IETF ReviewまたはIESG Approvalで割り当て |
| 1024〜49151 | User Ports(別名 Registered Ports、レジスタードポート) | IETF Review、IESG Approval、Expert Reviewのいずれかで割り当て |
| 49152〜65535 | Dynamic Ports(別名 Private Ports、Ephemeral Ports) | 割り当てなし |
どれも審査の手順の名前でSystem Portsのほうが条件は厳しくなっています。22番、80番、443番はどれもSystem Portsの番号です。
一番下のDynamic Portsは誰にも割り当てられません。アプリやOSが空いている番号を自由に使ってよい範囲でサーバーにつなぐ側の一時的な番号もここから選ばれることが多いです。
WindowsもVista以降はIANAの推奨に合わせて既定の範囲を49152〜65535にしています。それ以前は1025〜5000でした。手元のWindowsでIPv4のTCP接続に使う動的ポートの範囲はPowerShellやコマンドプロンプトで次のコマンドを実行すると確認できます。これは使用中のポート一覧を表示するコマンドではありません。
netsh int ipv4 show dynamicport tcp設定を変えていなければ、開始ポートが49152、ポート数が16384と表示されます。
プロトコル tcp の動的ポートの範囲
---------------------------------
開始ポート : 49152
ポート数 : 1638422番・80番・443番は誰がどう決めた?
登録簿のTCPの行ではこの3つとメール送信のSMTPが次のように載っています。
| ポート | 登録名 | 用途 | 登録簿の記載 |
|---|---|---|---|
| 22 | ssh | リモートログイン | 参照先はRFC 4251 |
| 25 | smtp | メール送信 | 割り当て先はIESG |
| 80 | http | Webページの表示 | 割り当て先はIESG、参照先はRFC 9110 |
| 443 | https | 暗号化したWebページの表示 | 説明は「http protocol over TLS/SSL」 |
IESGは標準化団体IETFの運営を担うグループです。IETFで標準化されたプロトコルはこの名前で割り当て先が登録されます。
22番には作った本人が申請した記録が残っています。SSHを作ったTatu Ylönenさんがのちに経緯を公開しています。SSHはtelnet(23番)とFTP(21番)の置き換えとして作られ、間の22番がちょうど空いていました。Ylönenさんは1995年7月、SSH 1.0の公開直前にIANAへメールを送り22番の割り当てをお願いしています。メールにはベータ版ですでに22番を使っていることや、一覧では未割り当てになっていることも書かれていました。当時のIANAはJon PostelさんとJoyce K. Reynoldsさんが担当していて22番をsshに割り当てる、連絡先はYlönenさんにする、という短い返信が届いたそうです。
つまり「SSHの作者が22番を勝手に使った」わけではありません。ベータ版で先に使ってはいたものの申請して割り当てを受けた番号です。
80番はどうでしょうか。登録簿の http の行は割り当て先がIESG、参照先がRFC 9110です。古い別名のwww-httpの行にはWebの生みの親であるTim Berners-Leeさんの名前が割り当て先として残っています。ApacheやNginxなど多くのWebサーバーソフトはこの80番を待ち受けの標準にしているだけでソフト側が決めた番号ではありません。なぜ80番になったのかという理由は、登録簿を見る限り書かれていません。
443番のhttpsは説明が「http protocol over TLS/SSL」です。TLS(通信を暗号化する仕組み)でHTTPを包んだものに、80番とは別の番号が割り当てられており、443という数字が選ばれた理由は登録簿には書かれていませんでした。
登録番号と違うポートでも動く理由
実は登録簿の番号と違うポートでもサービスは動きます。RFC 6335にはどのポートで待ち受けるかは最終的に通信する両端が決める話でIANAは多くのサービスが標準で使う番号を記録している、という趣旨の説明があります。登録簿の注意書きにも番号が登録されていることはお墨付きではなく、その番号に流れている通信が登録上のサービスとは限らない、と書かれています。
たとえば次のような使い方が普通にあります。
- Webサーバーを8080番で動かす。8080番はIANAの登録簿にもhttp-alt(HTTP Alternate)として載っていて、アドレスは
http://localhost:8080/のように書きます。 - SSHを別の番号で動かす。サーバー側は
/etc/ssh/sshd_configのPortを変え、接続する側はssh -p 【ポート番号】 【ユーザー名】@【ホスト名】のように指定します。 - ブラウザーはhttpなら80番、httpsなら443番を既定として扱います。だから
https://example.com/と書くだけで443番につながり、別の番号を使うときは:8080のように書き足します。
新しいサービスの標準ポートとして番号の割り当てを受けたい場合はIANAへ申請します。が、公開するサービスすべてに専用の固定ポートが必要なわけではありません。接続先のポートを設定やサービス探索で知らせる方式もあります。
手元や社内で使う自作ツールでは他のサービスやOSの予約と重ならないように番号を選びます。IANAが割り当てを行わない49152〜65535番も利用できますが、OSが一時的な通信に使うことがあるため特定の番号がいつでも空いているとは限りません。
Windowsで443番や8080番などのTCPポートへ接続できるか調べたい場合はPowerShellで疎通を確認する方法を参考にしてください。


ITに残る昔の名残や身近なルールの理由をほかにも知りたい方はIT雑学まとめから関連記事を探せます。






