5.

TCP/UDP ポート番号完全リファレンス

編集
この記事の要点
  • ポート番号は 0〜65535 の 16bit 整数。1 つのホスト内で複数の通信を識別するための識別子
  • Well Known Ports (0-1023): HTTP 80 / HTTPS 443 / SSH 22 / FTP 21 / SMTP 25,465,587 / DNS 53 / RDP 3389
  • Registered (1024-49151): MySQL 3306 / PostgreSQL 5432 / Redis 6379 / MongoDB 27017 / ElasticSearch 9200
  • Dynamic / Ephemeral (49152-65535): クライアント側で一時的に割当
  • 使用中ポート確認: netstat -anop tcp (Win) / ss -tlnp (Linux) / lsof -i :8080 (Mac/Linux)

ポート番号とは

ポート番号は TCP / UDP プロトコルでホスト内のサービスを識別するための16bit (0〜65535) の整数です。IP アドレスがビル全体の住所だとすると、ポート番号は部屋番号に相当します。同じサーバー上で Web (80) とメール (25) と SSH (22) を同時に動かせるのはポートのおかげです。

ポート番号の範囲

範囲名称用途
0 - 1023Well Known PortsIANA 管理、主要プロトコル予約済。バインドに root 権限必要 (Linux)
1024 - 49151Registered PortsIANA に登録された各種サービス
49152 - 65535Dynamic / Private / Ephemeralクライアントの一時割当・カスタム用途

Well Known Ports (0-1023) — 最頻出

ポートTCP/UDPサービス用途
20 / 21TCPFTP (data / control)ファイル転送(平文・古い)
22TCPSSH / SFTP / SCP暗号化リモートログイン
23TCPTelnet平文リモート(非推奨)
25TCPSMTPメール送信(サーバー間)
53UDP / TCPDNS名前解決
67 / 68UDPDHCP (server / client)IP 自動割当
69UDPTFTP軽量ファイル転送・ブート
80TCPHTTPWeb (非暗号化)
110TCPPOP3メール受信(古い・平文)
123UDPNTP時刻同期
143TCPIMAPメール受信(平文)
161 / 162UDPSNMP / SNMP Trap機器監視
389TCP / UDPLDAPディレクトリサービス(平文)
443TCP / UDPHTTPS / HTTP/3 (QUIC)暗号化 Web
445TCPSMBWindows ファイル共有
465TCPSMTPSSSL/TLS メール送信
514UDPSyslogログ集約
587TCPSubmission (SMTP)メール送信(STARTTLS)
636TCPLDAPS暗号化 LDAP
993TCPIMAPS暗号化 IMAP
995TCPPOP3S暗号化 POP3

Registered Ports (1024-49151) — データベース・ミドル系

ポートサービス用途
1433MS SQL Serverマイクロソフト製 RDBMS
1521Oracle DBOracle Database
2049NFSUnix ファイル共有
2375 / 2376Docker APIDocker daemon (HTTP / HTTPS)
3306MySQL / MariaDBOSS RDBMS
3389RDPWindows リモートデスクトップ
5432PostgreSQLOSS RDBMS
5601KibanaElastic UI
5672RabbitMQ (AMQP)メッセージキュー
5900VNC画面共有
6379Redisインメモリキャッシュ
6443Kubernetes APIk8s コントロールプレーン
8000 / 8080HTTP 代替開発サーバー・プロキシ
8443HTTPS 代替非特権 HTTPS
8500Consulサービスディスカバリ
9000SonarQube / php-fpm
9092Kafka分散ストリーミング
9200 / 9300Elasticsearch (REST / Transport)全文検索
11211Memcachedキャッシュ
15672RabbitMQ 管理 UI
27017MongoDBNoSQL DB

使用中ポートの確認

# Linux / macOS

# ss : 最新の推奨ツール
ss -tlnp                    # TCP リスニング + プロセス
ss -ulnp                    # UDP リスニング + プロセス
ss -tan                     # 全 TCP 接続

# 古典的な netstat
netstat -tlnp               # Linux
netstat -an | grep LISTEN   # macOS

# lsof : ポートを使っているプロセス
lsof -i :8080
lsof -i tcp:443
lsof -nP -iTCP -sTCP:LISTEN

# プロセスを止める
sudo kill -9 $(lsof -t -i:8080)
# Windows

# netstat
netstat -ano | findstr LISTENING
netstat -ano | findstr :8080

# PowerShell モダン版
Get-NetTCPConnection -State Listen
Get-NetTCPConnection -LocalPort 8080 | Select-Object -Property LocalAddress,LocalPort,OwningProcess

# プロセス ID からプロセス名
Get-Process -Id 12345

# プロセス停止
Stop-Process -Id 12345 -Force

ポート開放(ファイアウォール)

# Linux (ufw)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status

# Linux (firewalld)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

# Linux (iptables)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables-save

# AWS Security Group はマネジメントコンソールから
# Windows ファイアウォール
New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -LocalPort 443 -Protocol TCP -Action Allow

# 削除
Remove-NetFirewallRule -DisplayName "HTTP"

典型的なエラー

エラー原因対処
Address already in use (EADDRINUSE)同じポートで別プロセスが LISTEN 中lsof -i :PORT で特定→停止
Permission denied1024 未満のポートに root 以外でバインドsudo / setcap / 別ポート使用
Connection refusedサーバー未起動 or ポート閉サーバー起動・FW 開放
Connection timed outFW / ネットワークルートで遮断セキュリティグループ・FW 確認

FAQ

Q: なぜ 80 / 443 は root 権限が必要?
A: 1024 未満は特権ポートで、Unix 慣習として root のみバインド可。回避策: setcap cap_net_bind_service=+ep /usr/bin/node、または reverse proxy (Nginx) を root で動かしアプリは非特権ポートで動かす。

Q: ポート番号は IP プロトコル全体で?
A: TCP / UDP / SCTP それぞれ別空間。TCP/80 と UDP/80 は別物。

Q: ローカル開発で 8080 が衝突する
A: lsof -i :8080 で原因プロセス特定。多くは Tomcat / Jenkins / Docker。別ポートに変えるのが手早い。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ネットワークの範囲と種類
  2. ネットワーク機器
  3. OSI参照モデル
  4. プロトコル
  5. ポート番号
  6. IPアドレス
  7. MACアドレス
  8. プロキシ