目次
ポート番号とは
例
| http://localhost:8080/ |
この8080がポート番号です。
ポート番号とは、TCP/IP通信において、どのアプリケーション(サービス)と通信するかを識別する番号です。
ポート番号が必要な理由
1台のサーバには複数のサービスが同時に動作します。
例
80番 → Webサーバ(HTTP)
443番 → Webサーバ(HTTPS)
22番 → SSH
ポート番号により、同一IPアドレスでも複数サービスを区別できるため、正しい宛先に通信できます。
通信の識別
通信は以下の5つで一意に識別されます(5-tuple)。
- 送信元IPアドレス
- 送信元ポート番号
- 宛先IPアドレス
- 宛先ポート番号
- プロトコル(TCP / UDP)
| 192.168.1.10:52000 → 100.x.x.x:443 (TCP) |
この5つが完全一致しない限り、別の通信として扱われます。
ポート番号が同じ53でも、53/TCPと53/UDPは別物です。
ポート番号の範囲と分類(IANA基準)
ポート番号は 0〜65535 で、以下の3種類に分類されます。
| 範囲 | 名称 | 説明 |
|---|---|---|
| 0番 - 1023番 | System Ports (Well-Known Ports) |
OSや標準サービスが使用 多くの環境で管理者権限が必要 例:80(HTTP)、443(HTTPS)、22(SSH)、25(SMTP) |
| 1024番 - 49151番 | Registered Ports | IANAに登録されたアプリ用ポート 固定用途で使われることが多い 例:3306(MySQL)、1521(Oracle) ※ただし必ずそのポートを使う義務はない(変更可能) |
| 49152番 - 65535番 | Dynamic / Ephemeral | クライアント側が使用する一時ポート OSが自動的に割り当て ランダムではなくOSが定めた範囲から動的に選択される |
通信の流れ
Webアクセスの例:
| クライアント 192.168.1.10:52000 ← エフェメラルポート ↓ サーバ 100.x.x.x:443 |
クライアントは動的ポートを使用します。
通信(セッション)ごとにポートが割り当てられます。
さらに同一ブラウザでも複数ポートを使用し、タブごとに通常は別々のポートが割り当てられます。
サーバは固定ポートで待ち受けをしていて、送信元IP+ポートで通信相手を識別します。
デフォルトのポート
デフォルトのポートは省略できます。
例:
http://example.com → 80が省略されている
https://example.com → 443が省略されている
ファイアウォール
ファイアウォールの通信許可は、ポート単位で制御されます。
- 22のみ許可 → SSHのみ許可
- 443のみ許可 → HTTPSのみ許可
セキュリティ観点から原則不要なポートは閉じます。
特に、22(SSH)、3389(RDP)、445(SMB)は注意です。
netstatで確認
netstatは、リアルタイムでどこにどんな状態で繋がっているかを確認できるコマンドです。
netstat -n
TCP 192.168.1.10:54633 → 100.x.x.x:443
左は自分のIP + ポートで、右は接続先です。
※netstatはLinux環境では現在非推奨となっており、代替としてssコマンドが推奨されています。
IANAのポート番号のリンクです。
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
関連の記事
