ポート番号は、TCPまたはUDPで同一ホスト上の通信先プロセスを識別する16ビットの番号です。IPアドレスがホスト、プロトコルとポートが通信先のサービスを絞ります。
本文ではIANAの区分、TCP/UDPの違い、クライアント側の一時ポート、代表的なサービス番号を一覧化し、FW・ACL・疎通確認での読み方を説明します。
この記事はネットワークエンジニアの仕事内容の各論です。工程の全体像から確認したい場合はそちらへ。
ポート番号とは?
ポート番号は、1台の端末上で通信を受け渡すアプリケーションやプロセスをTCP・UDPヘッダー内で識別する16bitの番号です。IPアドレスが端末を示し、プロトコルと宛先ポートの組み合わせが接続先サービスを示します。
(出典:Service Name and Transport Protocol Port Number Registry(IANA))
TCP・UDPとポート番号はどう関係する?
TCPとUDPはそれぞれ0~65535のポート空間を持ちます。同じ番号でもTCP/53とUDP/53は別の通信として扱われるため、FWや疎通試験ではIPとポートだけでなくプロトコルも固定します。
なぜIPアドレスだけでは足りない?
IPアドレスだけでは端末までしか識別できず、その端末上のどのアプリケーションへ渡すかを決められません。TCPまたはUDPのポート番号を組み合わせることで、Web、SSH、DNSなど複数の通信を同じ端末で区別します。
| 確認軸 | 実務で押さえる内容 |
|---|---|
| ポイント1 | TCPとUDPはそれぞれ0〜65535のポート空間を持つ |
| ポイント2 | IANAはSystem 0〜1023、ユーザー 1024〜49151、動的/プライベート 49152〜65535に区分 |
| ポイント3 | サーバーは待受ポート、クライアントは一時ポートを使う |
| ポイント4 | 通信は送信元IP・送信元ポート・宛先IP・宛先ポート・プロトコルで識別 |
| ポイント5 | 同じ番号でもTCPとUDPは別 |
TCPとUDPでの扱いの違い
同じ番号でも、TCPの53番とUDPの53番はまったく別の通信です。DNSは問い合わせにUDP/53を使い、応答が大きい場合やゾーン転送ではTCP/53を使います。ファイアウォールで「53番を許可」とだけ決めると、どちらか片方しか通らず、名前解決が不安定になります。
待受の確認も分けて行います。Linuxなら ss -lntu で t(TCP)と u(UDP)の両方を表示し、対象の番号がどちらで開いているかを見ます。
(出典:RFC 9293 Transmission Control Protocol (TCP))
送信元ポートと宛先ポート
クライアントは通常、一時的な送信元ポートから、サーバーの待受宛先ポートへ接続します。戻り通信では送信元・宛先が反転するため、FWやキャプチャでは送信元IP、宛先IP、プロトコル、送信元ポート、宛先ポートの5要素を同じ通信として追います。
- STEP 01名前解決で宛先IPを決定
- STEP 02アプリがTCPまたはUDPと宛先ポートを選択
- STEP 03OSが送信元一時ポートを割り当て
- STEP 04FW・ACLが5要素で許可判断
- STEP 05サーバーの待受プロセスが受信
Well-known・Registered・動的の範囲
IANAの区分では、System Portsは0〜1023、User Portsは1024〜49151、Dynamic/Private Portsは49152〜65535です。ただし番号だけで安全性や実際の待受を判断せず、OSのソケット状態、設定、FW、通信先を確認します。
代表的なポート番号
代表例はSSHのTCP/22、DNSのUDP・TCP/53、HTTPのTCP/80、HTTPSのTCP/443です。同じ53番でもUDPとTCPは別の通信で、製品が標準以外のポートを使う場合もあるため、実際の待受と通信要件を確認します。
プロトコル番号とは何が違う?
プロトコル番号はIPヘッダーにある8ビットの番号で、そのIPパケットが何を運んでいるかを示します。TCPなら6、UDPなら17、ICMPなら1です。ポート番号はその一段上、TCPヘッダーやUDPヘッダーにある16ビットの番号で、届いた先のどのプロセスへ渡すかを示します。
| 項目 | プロトコル番号 | ポート番号 |
|---|---|---|
| 位置 | IPヘッダー | TCP/UDPヘッダー |
| 長さ | 8ビット(0〜255) | 16ビット(0〜65535) |
| 示すもの | 中身がTCPかUDPかICMPか | どのプロセスへ渡すか |
| 代表例 | TCP=6/UDP=17/ICMP=1 | HTTPS=443/SSH=22/DNS=53 |
読む順番が違います。ルーターやファイアウォールは、まずIPヘッダーのプロトコル番号を見て、中身がTCPなのかUDPなのかICMPなのかを判定します。TCPかUDPだと分かって初めて、その中のポート番号を読めます。ICMPにポート番号が存在しないのはこのためで、Pingは通るのにHTTPSが通らない、という状況が起きるのもこの2つが別の層の識別子だからです。
ACLを書くときにも効いてきます。permit tcp any host 192.0.2.10 eq 443 の tcp がプロトコル番号6にあたり、eq 443 がポート番号です。permit ip と書くとプロトコルを問わず通すので、ポート番号での絞り込みはできません。
代表的なポート番号と疎通の確認方法
DNSの53、HTTPの80、HTTPSの443、SSHの22などは代表的な割り当てですが、実際の待受はサーバー設定で変わります。ss -lntupなどで待受、nc・curl・digで実通信を確認します。
ファイアウォール・ACLでの使われ方
FW・拡張ACLでは、送信元・宛先IP、IPプロトコル、送信元・宛先ポート、方向を照合します。『443を許可』だけでは条件が不足するため、どの送信元からどの宛先へ、TCP/443をどちら向きに許可するかを通信要件表へ記載します。
ポートが開いているとはどういう意味?
ポートが開いているとは、対象のプロセスがlisten状態で、経路とFWを通過した接続要求へ応答できる状態です。listenしているだけでは外部からの疎通を証明できません。
Windowsから疎通を確認するなら Test-NetConnection 192.0.2.10 -Port 443 です。TcpTestSucceeded が True なら、送信元IP・送信元ポート・宛先IP・宛先ポート・プロトコルの5要素がファイアウォールを通過して、待受プロセスまで届いたことになります。
確認するときの注意点
番号だけでサービスを断定せず、TCPかUDPか、実際に待受しているプロセス、送信元・宛先ポート、FWの方向を確認します。標準ポート以外を使う製品もあるため、通信要件とOSのソケット状態を照合してください。
関連する記事
- TCPの3ウェイハンドシェイクとは?SYN・ACKを図解
- ネットワークのポリシーテストとは?FW・ACLの試験手順
- CiscoのミラーポートとWiresharkで通信障害を切り分ける方法
観測点を一か所に絞らず区間で切り分ける
ポート番号を確認するときは、観測点を一か所に絞りません。番号の区分、代表的なポート番号、プロトコル番号との違いを並べ、どの区間まで正常かを切り分けます。
関連動画はIPヘッダーのプロトコル番号を扱う内容です。本記事ではその違いを明示した上で、TCP・UDPのポート番号へ範囲を広げ、現場で混同しやすい二つの番号を整理します。
案件では、正常時の情報がなければ障害時の差分を判断できません。作業前に netstat -ano と Get-NetTCPConnection を取得し、変更後も同じ条件で比較します。ポート確認を入口に層を分けます。
この内容は、設計構築チャンネルの動画でも解説しています。
まとめ
ポート番号はTCP/UDP上の通信先プロセスを識別します。番号一覧は起点として使い、実務ではプロトコル、実際の待受、経路、FW、アプリケーション応答まで確認します。
