コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB

ポート番号と well-known port

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

ポート番号と well-known port とは

ポート番号の役割と、HTTP(80)/HTTPS(443) などの well-known port を整理します。

このレッスンで学ぶこと

トランスポート層がアプリを識別するために使うポート番号と、その代表値である well-known port を整理します。HTTP の 80 番、HTTPS の 443 番だけでなく、その全体像を掴みましょう。

ポート番号とは

ポート番号は、1 つの IP アドレスの中でどのアプリ (サービス) と通信するかを決める 16 ビットの番号です。0〜65535 の範囲を取ります。

  • IP アドレス → どのコンピューターか
  • ポート番号 → そのコンピューターのどのアプリか

たとえば 1 台のサーバーで Web サーバー (HTTPS) と SSH サーバーを同時に動かす場合、HTTPS は 443 番、SSH は 22 番のポートを listen します。クライアントは「同じ IP の違うポート」にアクセスすることで、別のアプリと話せます。

ポート番号の 3 区分

ポート番号は次の 3 つの範囲に分けられます。

  • 0-1023 — Well-Known Ports (システムポート)。HTTP, HTTPS, SSH など標準サービス。OS の root 権限が必要。
  • 1024-49151 — Registered Ports。IANA に登録されたが必須ではないサービス用。
  • 49152-65535 — Dynamic / Private Ports (一時ポート)。クライアント側の通信が使う動的範囲。

開発でローカルサーバーを 3000 番や 8080 番で立てるのは、Registered Ports の領域を使っています。

覚えておきたい well-known port

代表的なものを覚えておくと、サーバー設定やファイアウォール設定が楽になります。

ポートプロトコル用途
20, 21TCPFTP (データ / 制御)
22TCPSSH
25TCPSMTP (メール送信)
53UDP/TCPDNS
80TCPHTTP
110TCPPOP3
143TCPIMAP
443TCPHTTPS
587TCPSMTP (Submission)
993TCPIMAPS
995TCPPOP3S
3306TCPMySQL
5432TCPPostgreSQL
6379TCPRedis
27017TCPMongoDB

実務では「DB は 5432」「Redis は 6379」のように、見ただけでサービスが分かるくらいに馴染ませておきましょう。

TCP と UDP は別空間

ポート番号は TCP と UDP で完全に別空間です。TCP の 53 番と UDP の 53 番は別物として扱われます。DNS は両方を使い分けています (基本 UDP、長い応答は TCP)。

セキュリティグループやファイアウォールルールを書くときは、必ず TCP/UDP のどちらかを明示する必要があります。

エフェメラルポート

クライアント側のポート番号は、OS が動的に割り当てる「エフェメラルポート」です。Linux のデフォルトは 32768〜60999 あたり。1 つのアプリが同じサーバーに多数のコネクションを張ると、このエフェメラルポートが足りなくなる場合があります。

この章のポイント

「ポート枯渇」の悪夢

高負荷バッチで「同じ宛先 IP:ポートに何万コネクションも張る」と、エフェメラルポートが枯渇してエラー (Cannot assign requested address) が出ます。コネクションプールで使い回す、接続先を分散する、ポート範囲を広げる、などの対策が必要になります。

ポートをスキャンする

セキュリティ調査や設定確認に nmap などのポートスキャナを使います。

プレーンテキスト

$ nmap -p 1-1000 example.com 22/tcp open ssh 80/tcp open http 443/tcp open https

公開していないポートが開いていないか、ファイアウォールが正しく機能しているかをチェックします。クラウドの監査でも、外部から到達可能なポートを最小化することが基本です。

SNI とポート

HTTPS で複数のドメインを 1 つの IP / ポート (443) で運用する場合、SNI (Server Name Indication) で接続したいドメイン名を TLS ハンドシェイク中に伝えます。これにより「同じ IP:443 を共有しつつ、ドメインごとに違う証明書を提示する」運用が可能になります。CDN や共有サーバーで広く使われている仕組みです。

まとめ

ポート番号はトランスポート層がアプリを識別するための 16 ビットの番号で、0-1023 のシステムポート、1024-49151 の登録済み、49152- の動的領域に分かれます。HTTP/HTTPS/SSH/DNS/MySQL くらいの代表値は完璧に覚えておくと、運用の見通しがぐっと良くなります。次のセクションからは、Web の中心プロトコルである HTTP を掘り下げていきます。

よくある質問

Q. なぜ HTTP は 80 番、HTTPS は 443 番が標準なのですか?

A. IANA (Internet Assigned Numbers Authority) が仕様策定時に割り当て、RFC で標準化されたためです。クライアントはポート番号を省略した場合、スキームに応じてこの番号を自動的に使います。独自ポートで運用することも技術的には可能ですが、ファイアウォールや中間プロキシの設定が煩雑になるため、公開サービスでは慣例通りの番号を使うのが無難です。

Q. ローカル開発でサーバーが起動できず EADDRINUSE エラーが出ます。原因は何ですか?

A. 指定したポート番号をすでに別のプロセスが使っている状態です。lsof -i :<ポート番号> (macOS/Linux) や netstat -ano | findstr <ポート番号> (Windows) で占有プロセスを特定し、不要なら終了させてください。前回の開発サーバーがゾンビ状態で残っていることが多い原因です。使用ポートを変えて起動するだけでも回避できます。

Q. ファイアウォールでどのポートを開放すれば良いですか?

A. 原則は「必要最小限だけ開ける」です。外部公開する Web サービスなら 80 と 443、管理用 SSH が必要なら 22 を特定 IP に限定して開けます。MySQL (3306) や Redis (6379) などの DB ポートは外部に公開せず、同一 VPC 内の通信のみに絞るのが基本です。クラウドのセキュリティグループ設定では、不要なポートが開いていないかを定期的に棚卸しする習慣をつけましょう。

次のレッスン

次は HTTP の基本 で、ポート番号の役割と、HTTP(80)/HTTPS(443) などの well-known port を整理します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. ポート番号 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. ポート番号 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

復習ミニクイズ

HTTPS が標準で使うポート番号はどれですか