STUDY · NETWORK GUIDE

1-7 TCP・UDP・ポート番号

ホスト内部のサービスを識別するポート番号と、その上に立つ TCP・UDP の役割を 1 ページで整理する。

1. ポート番号とは

IP アドレスはホストを一意に識別する番号であった。しかし現実のホストでは、Web サーバやメールサーバ、SSH など複数のサービスが同時に動作している。届いたパケットをどのサービスへ渡すかを区別する仕組みが、トランスポート層で用いられる ポート番号 である。

ポート番号は 16 ビットの整数で、0 から 65535 までの値を取る。IP アドレスがホストを指すのに対し、ポート番号は同一ホスト内のどのサービスに紐づくかを示す。両者を組にした 「IP アドレス + ポート番号」ソケット と呼び、これにより通信の終端が一意に定まる。サーバはサービスごとに固定のポートで待ち受け、クライアントは接続ごとに一時的なポートを確保する。


2. ポート番号の 3 区分

ポート番号は IANA により次の 3 区分で管理されている。

範囲名称代表例
0 〜 1023ウェルノウンポートHTTP=80 / HTTPS=443 / SSH=22 / DNS=53
1024 〜 49151登録済みポートPostgreSQL=5432 / Redis=6379
49152 〜 65535動的・私用ポートクライアント側の一時利用

ウェルノウンポートは主要サービス用に予約され、サーバ側で使われる。登録済みポートはベンダー登録された特定アプリケーション用の範囲である。動的・私用ポートは エフェメラルポート とも呼ばれ、クライアントが接続ごとに一時的に確保する。Web ブラウザが 443 番に接続する際、自身は 49152 番以降から空きを選んで送信元ポートとする。


3. TCP(Transmission Control Protocol)

TCP は コネクション指向信頼性 を保証するトランスポート層プロトコルである。通信に先立ち、送信側と受信側で論理的なコネクションを確立する。この手順は 3-way ハンドシェイク と呼ばれ、SYN、SYN/ACK、ACK の 3 つのセグメントを往復させて互いの準備を確認する。

確立後はデータを シーケンス番号 で順序付けし、受信側は ACK で到達を通知する。セグメントが失われた場合は 再送 で補い、データは順序通り欠落なく届くことが保証される。加えて、受信側の処理能力に合わせて送信量を調整する フロー制御、混雑を検出して送信レートを抑える 輻輳制御 も組み込まれている。輻輳制御には Reno や CUBIC などのアルゴリズムがあるが、本節では存在に触れるに留める。これらの仕組みは信頼性と引き換えに、確立時の往復遅延と 20 バイト以上のヘッダオーバーヘッドを伴う。

TCP の 3-way ハンドシェイク


4. UDP(User Datagram Protocol)

UDP は コネクションレス でシンプルなトランスポート層プロトコルである。ハンドシェイクを行わず、送信側はデータグラムと呼ばれる独立したパケットをそのまま送出する。順序保証も再送もフロー制御も行わず、必要があればアプリケーション側で実装する。

ヘッダは送信元ポート、宛先ポート、長さ、チェックサムの 4 フィールドのみで、合計 8 バイト と最小限である。確立の往復も発生しないため遅延が小さく、低遅延が要件となる通信や、損失をある程度許容できる通信に適する。


5. TCP と UDP の使い分け

両者の特性を整理すると次のようになる。

比較項目TCPUDP
コネクション指向(事前確立)レス(事前確立なし)
信頼性あり(再送・順序保証)なし
順序保証ありなし
ヘッダサイズ20 バイト以上8 バイト
遅延大きい小さい
代表例HTTP / HTTPS / SSH / SMTP / FTPDNS / DHCP / NTP / VoIP / 動画配信

TCP は確実な配送が要件となる通信に用いられる。Web ページの取得、メール、ファイル転送、リモートログインのように、欠落や順序入れ替わりが致命的になる用途である。一方 UDP は、問い合わせと応答が 1 往復で完結する軽量な通信や、リアルタイム性が品質を左右する通信に向く。DNS は基本 UDP だが、応答サイズが大きい場合やゾーン転送では TCP が使われる。

TCP と UDP の特性比較


6. 次節

続く 1-8 では、土台の上で利用される代表的なアプリケーションプロトコル群(DNS / ARP / ICMP / DHCP / HTTP・HTTPS)がどの層で何を解決するのかを並列に整理し、第 1 章の総まとめとする。