| この記事の要点 |
|
概要
ポート番号は、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 / 21 | TCP | FTP | ファイル転送 (20=データ, 21=制御) |
| 22 | TCP | SSH | 暗号化リモートログイン・SFTP |
| 23 | TCP | Telnet | 平文リモートログイン (現在は非推奨) |
| 25 | TCP | SMTP | メール送信 (MTA 間転送) |
| 53 | TCP/UDP | DNS | 名前解決 (通常 UDP、大きい応答やゾーン転送は TCP) |
| 80 | TCP | HTTP | Web (平文) |
| 110 | TCP | POP3 | メール受信 (ダウンロード型) |
| 143 | TCP | IMAP | メール受信 (サーバ保持型) |
| 443 | TCP | HTTPS | Web (TLS 暗号化) |
| 3306 | TCP | MySQL | リレーショナルデータベース |
| 5432 | TCP | PostgreSQL | リレーショナルデータベース |
| 6379 | TCP | Redis | インメモリ KVS |
| 8080 | TCP | HTTP 代替 | アプリサーバ・プロキシ (登録済み帯) |
実用例
現在どのポートでサービスが待ち受けているかは、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 の蓄積に注意。
関連リンク
子ページはありません
- ウェルノウンポート一覧
- ポートフォワーディング
- ポートの確認方法
- nmapによるポートスキャン
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15