タイトル: ポート番号
SEOタイトル: 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 - 1023 | Well Known Ports | IANA 管理、主要プロトコル予約済。バインドに root 権限必要 (Linux) |
| 1024 - 49151 | Registered Ports | IANA に登録された各種サービス |
| 49152 - 65535 | Dynamic / Private / Ephemeral | クライアントの一時割当・カスタム用途 |
Well Known Ports (0-1023) — 最頻出
| ポート | TCP/UDP | サービス | 用途 |
| 20 / 21 | TCP | FTP (data / control) | ファイル転送(平文・古い) |
| 22 | TCP | SSH / SFTP / SCP | 暗号化リモートログイン |
| 23 | TCP | Telnet | 平文リモート(非推奨) |
| 25 | TCP | SMTP | メール送信(サーバー間) |
| 53 | UDP / TCP | DNS | 名前解決 |
| 67 / 68 | UDP | DHCP (server / client) | IP 自動割当 |
| 69 | UDP | TFTP | 軽量ファイル転送・ブート |
| 80 | TCP | HTTP | Web (非暗号化) |
| 110 | TCP | POP3 | メール受信(古い・平文) |
| 123 | UDP | NTP | 時刻同期 |
| 143 | TCP | IMAP | メール受信(平文) |
| 161 / 162 | UDP | SNMP / SNMP Trap | 機器監視 |
| 389 | TCP / UDP | LDAP | ディレクトリサービス(平文) |
| 443 | TCP / UDP | HTTPS / HTTP/3 (QUIC) | 暗号化 Web |
| 445 | TCP | SMB | Windows ファイル共有 |
| 465 | TCP | SMTPS | SSL/TLS メール送信 |
| 514 | UDP | Syslog | ログ集約 |
| 587 | TCP | Submission (SMTP) | メール送信(STARTTLS) |
| 636 | TCP | LDAPS | 暗号化 LDAP |
| 993 | TCP | IMAPS | 暗号化 IMAP |
| 995 | TCP | POP3S | 暗号化 POP3 |
Registered Ports (1024-49151) — データベース・ミドル系
| ポート | サービス | 用途 |
| 1433 | MS SQL Server | マイクロソフト製 RDBMS |
| 1521 | Oracle DB | Oracle Database |
| 2049 | NFS | Unix ファイル共有 |
| 2375 / 2376 | Docker API | Docker daemon (HTTP / HTTPS) |
| 3306 | MySQL / MariaDB | OSS RDBMS |
| 3389 | RDP | Windows リモートデスクトップ |
| 5432 | PostgreSQL | OSS RDBMS |
| 5601 | Kibana | Elastic UI |
| 5672 | RabbitMQ (AMQP) | メッセージキュー |
| 5900 | VNC | 画面共有 |
| 6379 | Redis | インメモリキャッシュ |
| 6443 | Kubernetes API | k8s コントロールプレーン |
| 8000 / 8080 | HTTP 代替 | 開発サーバー・プロキシ |
| 8443 | HTTPS 代替 | 非特権 HTTPS |
| 8500 | Consul | サービスディスカバリ |
| 9000 | SonarQube / php-fpm | — |
| 9092 | Kafka | 分散ストリーミング |
| 9200 / 9300 | Elasticsearch (REST / Transport) | 全文検索 |
| 11211 | Memcached | キャッシュ |
| 15672 | RabbitMQ 管理 UI | — |
| 27017 | MongoDB | NoSQL 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 denied | 1024 未満のポートに root 以外でバインド | sudo / setcap / 別ポート使用 |
Connection refused | サーバー未起動 or ポート閉 | サーバー起動・FW 開放 |
Connection timed out | FW / ネットワークルートで遮断 | セキュリティグループ・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。別ポートに変えるのが手早い。