ポート番号
作成日:
networking infrastructure
概要
ポート番号は、コンピュータ上で動作するアプリケーションやサービスを識別するための番号。IPアドレスが「建物の住所」なら、ポート番号は「部屋番号」に相当する。
ポート番号の範囲
ポート番号は 0〜65535 の範囲(16ビット符号なし整数)。
| 範囲 | 名称 | 説明 |
|---|---|---|
| 0〜1023 | Well-Known Ports | 標準サービス用。root権限が必要 |
| 1024〜49151 | Registered Ports | アプリケーション用に登録されたポート |
| 49152〜65535 | Dynamic/Private Ports | 一時的な接続やプライベート用途 |
よく使われるポート番号
Well-Known Ports(0〜1023)
| ポート | プロトコル | サービス |
|---|---|---|
| 20, 21 | TCP | FTP(データ転送, 制御) |
| 22 | TCP | SSH |
| 23 | TCP | Telnet |
| 25 | TCP | SMTP(メール送信) |
| 53 | TCP/UDP | DNS |
| 80 | TCP | HTTP |
| 443 | TCP | HTTPS |
Registered Ports(1024〜49151)
| ポート | プロトコル | サービス |
|---|---|---|
| 3000 | TCP | Node.js開発サーバー(慣例) |
| 3306 | TCP | MySQL |
| 4321 | TCP | Astro開発サーバー |
| 5432 | TCP | PostgreSQL |
| 6379 | TCP | Redis |
| 8080 | TCP | 代替HTTPポート |
| 8443 | TCP | 代替HTTPSポート |
ポート番号をずらすときの注意点
1. Well-Known Portsを避ける
0〜1023はroot権限が必要で、既存の標準サービスと競合する可能性がある。
# 一般ユーザーで1024未満のポートを使おうとするとエラー
node server.js --port 80
# Error: EACCES: permission denied
2. 使用中のポートとの競合を確認
# Linuxでポート使用状況を確認
sudo ss -lntp | grep :8080
# macOSの場合
lsof -i :8080
# 全ポートの確認
sudo ss -lntup
3. ファイアウォールの設定
新しいポートを使う場合、ファイアウォールで許可が必要。
# UFW(Ubuntu)
sudo ufw allow 8080/tcp
# firewalld(CentOS/RHEL)
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
4. Docker環境での注意
# ホストポート:コンテナポート のマッピング
services:
web:
ports:
- "8080:80" # ホストの8080 → コンテナの80
- 同じホストポートを複数コンテナで使用できない
- コンテナ内部のポートは変更不要(アプリの設定そのまま)
TCPとUDPのポート共有
TCP と UDP は別々にポートを使用できる。
TCP/80 と UDP/80 は別物として扱われる
両方を使用するサービスの例
| サービス | TCP | UDP | 用途 |
|---|---|---|---|
| DNS | 53 | 53 | TCP: ゾーン転送、UDP: 通常のクエリ |
| HTTP/3 | 443 | 443 | TCP: HTTP/1.1, HTTP/2、UDP: QUIC |
| NTP | - | 123 | 時刻同期(UDPのみ) |
Docker Composeでの指定
services:
my-app:
ports:
- "8080:80/tcp" # TCPポート
- "8080:80/udp" # UDPポート(同じ番号でも別々に指定可能)
確認コマンド
# TCPポートの確認
sudo ss -lntp
# UDPポートの確認
sudo ss -lnup
# 両方確認
sudo ss -lntup
ポート競合のトラブルシューティング
競合の確認
# 特定ポートを使用しているプロセスを特定
sudo lsof -i :3000
# または
sudo ss -lntp | grep :3000
競合の解消
# プロセスを終了
kill -9 <PID>
# または別のポートを使用
npm run dev -- --port 3001