ポート番号入門 - ウェルノウンポートと動的ポート

入門 | 10分 で読める | 2026.05.02

公式ドキュメント

この記事の要点

• ポート番号は0-65535の範囲で、同一IPアドレスで複数のサービスを識別する
0-1023がウェルノウンポート、1024-49151が登録済み、49152-65535が動的ポート
• 主要ポートは22/SSH80/HTTP443/HTTPSなど

ポート番号とは

ポート番号は、1つのIPアドレス内で複数のネットワークサービスを識別するための16ビットの番号(0-65535)です。IPアドレスが「建物の住所」なら、ポート番号は「部屋番号」に相当します。

なぜ必要か: 1台のサーバーでWebサーバー、メールサーバー、データベースなど複数のサービスを同時に動かすために、ポート番号でサービスを区別します。

ポート番号の範囲

ポート番号は用途に応じて3つの範囲に分類されます。

範囲名称用途
0-1023ウェルノウンポート(Well-Known Ports)標準的なサービスHTTP(80), HTTPS(443), SSH(22)
1024-49151登録済みポート(Registered Ports)特定のアプリケーションMySQL(3306), PostgreSQL(5432)
49152-65535動的/プライベートポート(Dynamic/Private Ports)一時的な通信(クライアント側)ブラウザの接続など

ポイント: ウェルノウンポート(0-1023)を使用するには通常、管理者権限が必要です。開発環境では8000、3000など登録済みポート以上を使います。

ウェルノウンポート(0-1023)

システム管理者権限がないと利用できない、標準的なサービス用のポートです。

主要なウェルノウンポート

ポートプロトコルサービス用途
20, 21TCPFTPファイル転送(データ/制御)
22TCPSSHセキュアシェル、リモートログイン
23TCPTelnetリモートログイン(非暗号化、非推奨)
25TCPSMTPメール送信
53TCP/UDPDNSドメイン名解決
80TCPHTTPWebサーバー
110TCPPOP3メール受信
143TCPIMAPメール受信(サーバー上で管理)
443TCPHTTPS暗号化Webサーバー
465TCPSMTPSSMTP over SSL/TLS
587TCPSMTPメール送信(STARTTLS)
993TCPIMAPSIMAP over SSL/TLS
995TCPPOP3SPOP3 over SSL/TLS

Web関連の重要ポート

# HTTP(非暗号化)
curl http://example.com:80/      # ポート80(デフォルトで省略可)

# HTTPS(暗号化)
curl https://example.com:443/    # ポート443(デフォルトで省略可)

セキュリティのヒント: 2025年以降、主要ブラウザはHTTP(ポート80)を「安全でない」と警告します。本番環境では常にHTTPS(ポート443)を使用しましょう。

SSH(リモート接続)

# SSH接続(デフォルトポート22)
ssh user@example.com

# カスタムポートを指定
ssh -p 2222 user@example.com

注意: Telnet(ポート23)は通信が暗号化されないため、パスワードが平文で送信されます。必ずSSH(ポート22)を使用してください。

DNS(名前解決)

# DNS問い合わせ(UDPポート53)
dig @8.8.8.8 example.com

# TCP版DNS(主にゾーン転送や大きな応答)
dig @8.8.8.8 +tcp example.com

メール関連ポート

用途ポートプロトコル暗号化
メール送信(クライアント→サーバー)587SMTP(STARTTLS)推奨
メール送信(サーバー間転送)25SMTPなし
メール送信(旧方式)465SMTPSあり(非推奨)
メール受信993IMAPSあり(推奨)
メール受信995POP3Sあり
メール受信(非暗号化)110/143POP3/IMAPなし(非推奨)

登録済みポート(1024-49151)

特定のアプリケーションやサービスが使用する、IANAに登録されたポートです。

データベースのポート

ポートデータベース用途
3306MySQL / MariaDBリレーショナルデータベース
5432PostgreSQLリレーショナルデータベース
27017MongoDBNoSQLドキュメントDB
6379RedisインメモリKVS
9042Cassandra分散NoSQL
1433MS SQL ServerWindowsデータベース
1521Oracle DBエンタープライズDB
# MySQLへの接続
mysql -h localhost -P 3306 -u user -p

# PostgreSQLへの接続
psql -h localhost -p 5432 -U user -d database

# Redisへの接続
redis-cli -h localhost -p 6379

開発サーバーでよく使うポート

ポート用途フレームワーク/ツール
3000開発サーバーReact, Next.js, Express
4200開発サーバーAngular
5000開発サーバーFlask(Python)
5173開発サーバーVite
8000開発サーバーDjango, Python HTTP Server
8080開発サーバーTomcat, 代替HTTP
8888開発サーバーJupyter Notebook
9000開発サーバーPHP-FPM
# Node.js開発サーバー
npm run dev                      # ポート3000が一般的

# Pythonシンプルサーバー
python -m http.server 8000       # ポート8000

# Djangoの開発サーバー
python manage.py runserver 8000  # ポート8000

その他の重要なポート

ポートサービス用途
3389RDPWindowsリモートデスクトップ
5060, 5061SIPVoIP通信
8443HTTPS代替開発環境のHTTPS
9200Elasticsearch全文検索エンジン
11211Memcached分散メモリキャッシュ

実践メモ: ポート3000、8000、8080などは開発環境でよく使われます。本番環境では通常80/443を使い、リバースプロキシで振り分けます。

動的ポート(49152-65535)

クライアント側が一時的に使用するポート範囲です。IANA(Internet Assigned Numbers Authority)の管理外です。

動的ポートの役割

クライアント(ブラウザ)         サーバー
192.168.1.10:52341  ─────→  example.com:443 (HTTPS)
         ↑                            ↑
    動的に割り当て                ウェルノウンポート

レスポンス
192.168.1.10:52341  ←─────  example.com:443

クライアント側の動的ポート使用例

# 接続状態を確認
netstat -an | grep ESTABLISHED

# 出力例
tcp4  0  0  192.168.1.10.52341   93.184.216.34.443   ESTABLISHED
             └─ クライアント側    └─ サーバー側
               (動的ポート)       (ウェルノウン)

OSの管理: OSが空いているポート番号を自動的に選んで割り当てます。通信終了後は解放され、再利用されます。

ポート番号とプロトコル(TCP/UDP)

同じポート番号でもTCPとUDPは別々に管理されます。

TCP/UDP両方を使うポート

ポートサービスTCPの用途UDPの用途
53DNSゾーン転送、大きな応答通常のクエリ(512バイト以下)
123NTP時刻同期
161SNMPネットワーク機器の監視
500IKEIPsec鍵交換

TCPのみ/UDPのみのポート

TCPのみ:
- 22 (SSH)
- 80 (HTTP)
- 443 (HTTPS)
- 3306 (MySQL)

UDPのみ:
- 67, 68 (DHCP)
- 69 (TFTP)
- 123 (NTP)

ポイント: TCPは信頼性重視(Web、DB、SSH)、UDPは速度重視(DNS、動画ストリーミング、ゲーム)で使い分けます。

ポート番号の確認方法

使用中のポートを確認

# すべての待ち受けポートを表示
netstat -an | grep LISTEN         # macOS/Linux
netstat -an | findstr LISTEN      # Windows

# 特定のポートを確認(例: 3000番)
lsof -i :3000                     # macOS/Linux
netstat -ano | findstr :3000      # Windows

# プロセス情報付きで表示
sudo lsof -i -P -n                # macOS/Linux
netstat -ano                      # Windows

ポートが使われているかテスト

# Telnetでポート疎通確認
telnet example.com 80

# ncコマンドでポート確認
nc -zv example.com 80             # macOS/Linux

# curlでHTTP/HTTPSポート確認
curl -I http://example.com:80/

ファイアウォールとポート

ポートの開放

# ufw(Ubuntu/Debian)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# firewalld(CentOS/RHEL)
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload

# iptables
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

セキュリティグループ(AWS EC2例)

インバウンドルール:
Type        Protocol  Port Range  Source
HTTP        TCP       80          0.0.0.0/0
HTTPS       TCP       443         0.0.0.0/0
SSH         TCP       22          123.45.67.89/32  # 自分のIPのみ
Custom TCP  TCP       3000        10.0.0.0/16      # VPC内のみ

注意: 不要なポートは必ず閉じてください。特にSSH(22)、RDP(3389)、データベース(3306、5432)を全開放すると攻撃の標的になります。

よくあるポート番号の問題

ポート番号の競合

# エラー例
Error: listen EADDRINUSE: address already in use :::3000

原因: すでに別のプロセスがポート3000を使用している

解決方法:

# プロセスを特定して終了(macOS/Linux)
lsof -ti:3000 | xargs kill -9

# Windowsの場合
netstat -ano | findstr :3000
taskkill /PID <プロセスID> /F

# または別のポートを使用
PORT=3001 npm run dev

ポート範囲の制限

# 一般ユーザーが使えるポート範囲(Linux)
1024-65535

# 管理者権限が必要なポート範囲
0-1023

アプリケーション別ポート一覧

Webアプリケーション

サービスデフォルトポートカスタム例
Nginx80, 4438080, 8443
Apache80, 4438080, 8443
Tomcat80808005, 8009
Node.js (Express)3000任意

データベース(再掲)

データベースポート
MySQL / MariaDB3306
PostgreSQL5432
MongoDB27017
Redis6379
Cassandra9042
Elasticsearch9200

キャッシュ・メッセージング

サービスポート
Redis6379
Memcached11211
RabbitMQ5672 (AMQP), 15672 (管理UI)
Kafka9092

モニタリング・ログ

サービスポート
Prometheus9090
Grafana3000
Kibana5601
Logstash5044

ポート転送(ポートフォワーディング)

SSHトンネル

# ローカルポート転送(リモートのMySQLにローカルから接続)
ssh -L 3306:localhost:3306 user@remote-server

# リモートポート転送(ローカルのサービスをリモートに公開)
ssh -R 8080:localhost:3000 user@remote-server

# 動的ポート転送(SOCKSプロキシ)
ssh -D 1080 user@remote-server

Docker のポートマッピング

# コンテナのポート80をホストの8080にマッピング
docker run -p 8080:80 nginx

# 複数ポートのマッピング
docker run -p 80:80 -p 443:443 nginx

まとめ

ポート番号は0-65535の16ビット番号で、同一IPアドレスで複数のサービスを識別します。0-1023がウェルノウンポート(HTTP=80、HTTPS=443、SSH=22など)、1024-49151が登録済みポート(MySQL=3306、PostgreSQL=5432など)、49152-65535が動的ポート(クライアント側の一時利用)です。開発環境では3000、8000などを使い、本番環境では80/443を使うのが一般的です。不要なポートは必ず閉じてセキュリティを確保しましょう。

実践メモ: 開発時に「ポートが既に使われている」エラーが出たら、`lsof -i :ポート番号`でプロセスを特定して終了するか、別のポートを使用しましょう。

参考リソース

この技術を体系的に学びたいですか?

未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。

メールで無料相談する
← 一覧に戻る