TCP/UDPの仕組み

ポート番号 ぽーとばんごう

ポート番号Well-Known PortソケットTCPUDPサービス識別
ポート番号について教えて

簡単に言うとこんな感じ!

IPアドレスが「建物の住所」なら、ポート番号は「部屋番号」みたいなものだよ。同じPCでもWebサーバーはポート80、メールはポート25ってふうに、どのサービス宛かを識別するんだ!


ポート番号とは

ポート番号は、TCPUDPが使う通信の宛先を細かく識別する番号です。IPアドレスがコンピューターを特定するのに対し、ポート番号はそのコンピューター上のどのアプリケーション(プロセス)宛かを区別します。0〜65535の範囲の整数で表されます。

例えばWebサーバーは同じIPアドレスを持ちながら、HTTP(ポート80)・HTTPS(ポート443)・SSH(ポート22)を同時に待ち受けています。クライアントは宛先IPアドレスと宛先ポート番号の組み合わせで、どのサービスに接続するかを指定します。

通信は「送信元IPアドレス:ポート番号」と「宛先IPアドレス:ポート番号」の4つの組み合わせ(4-tuple)で一意に識別されます。これにより、一台のサーバーが何千もの同時接続を管理できます。


ポート番号の分類

範囲分類説明
0〜1023Well-Known Port(ウェルノウンポート)IANAが標準サービスに割り当て済み。特権ポートとも呼ばれる
1024〜49151Registered Port(登録済みポート)アプリケーションが登録して使用
49152〜65535Dynamic/Private Port(動的ポート)クライアントが一時的に使う送信元ポート

主なWell-Knownポート番号

ポート番号プロトコルサービス
20 / 21TCPFTP(ファイル転送)
22TCPSSH(安全なリモート接続)
23TCPTelnet(非推奨)
25TCPSMTP(メール送信)
53TCP/UDPDNSドメイン名解決)
80TCPHTTP(Web)
110TCPPOP3(メール受信)
143TCPIMAP(メール受信)
443TCP/UDPHTTPS(暗号化Web)/ HTTP/3
3306TCPMySQL
5432TCPPostgreSQL
8080TCPHTTP代替(開発環境でよく使う)

歴史と背景

  • 1972年:ARPANETで最初のポート割り当てが行われた
  • 1980年代:IANA(Internet Assigned Numbers Authority)がポート番号の管理機関となる
  • 1994年:RFC 1700でポート番号の公式リストが整備
  • 現在:IANAの公式リストは定期更新され、/etc/services(Linux)で確認できる

ファイアウォールとポート番号

ポート番号はファイアウォールの設定に直結します。「ポート80と443は許可、それ以外は拒否」のようなルールで、不要なサービスへの外部アクセスを遮断します。

# iptablesの例(ポート80と443のみ許可)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP

セキュリティの観点から、不要なポートは閉じておくことが基本です。netstat -tlnp(Linux)やss -tlnpコマンドで開いているポートを確認できます。


関連する規格・RFC

規格・RFC番号内容
RFC 6335IANA サービス名およびトランスポートプロトコルポート番号レジストリ
RFC 793TCP(ポート番号の使用方法を定義)
RFC 768UDP(ポート番号の使用方法を定義)

関連用語

  • TCP — ポート番号を使うトランスポートプロトコル
  • UDP — ポート番号を使うトランスポートプロトコル
  • ソケット — IPアドレスとポート番号を組み合わせた通信端点
  • 3ウェイハンドシェイク — TCPがポートを使って接続を確立する手順