ポート番号

作成日:
networking infrastructure

概要

ポート番号は、コンピュータ上で動作するアプリケーションやサービスを識別するための番号。IPアドレスが「建物の住所」なら、ポート番号は「部屋番号」に相当する。

ポート番号の範囲

ポート番号は 0〜65535 の範囲(16ビット符号なし整数)。

範囲名称説明
0〜1023Well-Known Ports標準サービス用。root権限が必要
1024〜49151Registered Portsアプリケーション用に登録されたポート
49152〜65535Dynamic/Private Ports一時的な接続やプライベート用途

よく使われるポート番号

Well-Known Ports(0〜1023)

ポートプロトコルサービス
20, 21TCPFTP(データ転送, 制御)
22TCPSSH
23TCPTelnet
25TCPSMTP(メール送信)
53TCP/UDPDNS
80TCPHTTP
443TCPHTTPS

Registered Ports(1024〜49151)

ポートプロトコルサービス
3000TCPNode.js開発サーバー(慣例)
3306TCPMySQL
4321TCPAstro開発サーバー
5432TCPPostgreSQL
6379TCPRedis
8080TCP代替HTTPポート
8443TCP代替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 は別物として扱われる

両方を使用するサービスの例

サービスTCPUDP用途
DNS5353TCP: ゾーン転送、UDP: 通常のクエリ
HTTP/3443443TCP: 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

参考リンク