1.

ウェルノウンポート一覧 (0-1023) と主要ポート | ネットワーク入門

編集
この記事の要点
  • ポート番号は 16bit (0〜65535) の整数で、IANA により「ウェルノウンポート (0〜1023)」「登録済みポート (1024〜49151)」「動的/プライベートポート (49152〜65535)」の 3 つの帯域に分類される
  • ウェルノウンポートは HTTP=80, HTTPS=443, SSH=22, DNS=53 など主要サービスに固定的に割り当てられており、サーバ側がこの番号で待ち受けるのが慣習
  • 0〜1023 のポートで待ち受けるには UNIX 系で root 権限 (特権ポート) が必要なため、一般ユーザのアプリは 8080 など登録済み帯を使うことが多い
  • クライアント側の送信元ポートには動的ポート (エフェメラルポート) が自動的に割り当てられる
  • TCP と UDP は別々のポート空間を持つため、同じ番号でもプロトコルが違えば別物として扱われる

概要

ポート番号は、1 台のホスト上で動く複数の通信アプリケーションを区別するための 16bit の識別子です。IP アドレスが「どのホストか」を示すのに対し、ポート番号は「そのホストのどのサービス/プロセスか」を示します。トランスポート層 (TCP/UDP) のヘッダに送信元ポートと宛先ポートが入り、この組み合わせ (IP+ポート×送受信) でコネクションが一意に識別されます。詳しくは親項目の ポート番号 および IP を参照してください。

ポート番号は 0 から 65535 までの値を取り、IANA (Internet Assigned Numbers Authority) によって用途別に 3 つの帯域に区分されています。中でも 0〜1023 の「ウェルノウンポート (well-known ports / システムポート)」は、世界共通で主要サービスに割り当てられた予約済みの番号帯で、サーバがこの番号で待ち受けることで、クライアントは事前に番号を知らなくても標準サービスへ接続できます。

仕組み

IANA はポート空間を次の 3 帯域に分けて管理しています。それぞれ割り当てポリシーと使われ方が異なります。

  • ウェルノウンポート (0〜1023): HTTP・HTTPS・SSH・SMTP など基幹サービスの予約帯。UNIX 系 OS ではこの帯で listen するのに root 権限が必要なため「特権ポート (privileged ports)」とも呼ばれます。
  • 登録済みポート (1024〜49151): MySQL の 3306、PostgreSQL の 5432 のように、ベンダやプロジェクトが IANA に申請して登録するポート。一般ユーザ権限でも listen できます。
  • 動的/プライベートポート (49152〜65535): エフェメラルポート (一時ポート) とも呼ばれ、クライアントが接続する際の送信元ポートとして OS が自動割り当てします。特定サービスへの固定割り当ては行われません。

重要なのは TCP と UDP がそれぞれ独立した 65536 個のポート空間を持つ点です。たとえば TCP/53 と UDP/53 は両方とも DNS が使いますが、別々のソケットです。同様に、ある番号が TCP では使用中でも UDP では空いている、ということが普通に起こります。

主要ウェルノウンポート一覧

ポートプロトコルサービス用途
20 / 21TCPFTPファイル転送 (20=データ, 21=制御)
22TCPSSH暗号化リモートログイン・SFTP
23TCPTelnet平文リモートログイン (現在は非推奨)
25TCPSMTPメール送信 (MTA 間転送)
53TCP/UDPDNS名前解決 (通常 UDP、大きい応答やゾーン転送は TCP)
80TCPHTTPWeb (平文)
110TCPPOP3メール受信 (ダウンロード型)
143TCPIMAPメール受信 (サーバ保持型)
443TCPHTTPSWeb (TLS 暗号化)
3306TCPMySQLリレーショナルデータベース
5432TCPPostgreSQLリレーショナルデータベース
6379TCPRedisインメモリ KVS
8080TCPHTTP 代替アプリサーバ・プロキシ (登録済み帯)

実用例

現在どのポートでサービスが待ち受けているかは、Linux なら ss や netstat で確認できます。下記は LISTEN しているポートとサービスの対応を見る例です。

# LISTEN 中の TCP ポートをプロセス名付きで一覧 (ss は新しい定番)
sudo ss -tlnp

# /etc/services にポート番号とサービス名の対応表がある
grep -E '^(http|https|ssh|smtp|domain)\s' /etc/services

# 80 番が何のプロセスに使われているか
sudo ss -tlnp 'sport = :80'

# 任意のポートで簡易サーバを立てて挙動を確認 (8080 は登録済み帯なので非 root で可)
python3 -m http.server 8080

1023 以下で listen しようとして Permission denied になった場合は特権ポートの制約です。sudo で起動するか、リバースプロキシ (80/443) からアプリ (8080) へ転送する構成にします。

主な用途

  • サーバ設計: 公開サービスは標準ポートで待ち受けることで、クライアント側の設定を簡略化できる。
  • ファイアウォール設計: 「22/80/443 だけ許可」のようにウェルノウンポート単位で通信制御を行う。
  • トラブルシュート: 期待したポートで listen できているかを確認し、接続不能の原因を切り分ける。
  • セキュリティ監査: 不要なポートが開いていないか棚卸しする。

帯域の比較

帯域範囲別名主な使われ方listen に必要な権限 (UNIX)
ウェルノウン0〜1023システムポート / 特権ポート標準サービスの待受root
登録済み1024〜49151ユーザポート製品・アプリの待受一般ユーザ可
動的49152〜65535エフェメラル / プライベートクライアントの送信元ポート一般ユーザ可

注意点

  • 標準ポート≠固定義務: 80=HTTP はあくまで慣習。SSH を 22 以外で動かすことも技術的には可能だが、ポートスキャンで容易に見つかるため「ポート変更=セキュリティ対策」とは言えない。
  • TCP/UDP の取り違え: 53 のように両方使うサービスがあり、ファイアウォールで片方しか許可せず障害になる事故が多い。
  • 特権ポートの誤解: 1023 以下で動かすために常に root 実行するのはセキュリティ上望ましくない。可能なら capability (CAP_NET_BIND_SERVICE) やリバースプロキシを使う。
  • エフェメラルポート枯渇: 大量の短命コネクションを張る環境では送信元ポートが枯渇 (port exhaustion) することがある。TIME_WAIT の蓄積に注意。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ウェルノウンポート一覧
  2. ポートフォワーディング
  3. ポートの確認方法
  4. nmapによるポートスキャン

最近更新/作成されたページ