TCP/UDPとポート — 通信の届け方と入口
IPアドレスで通信相手の機器までは指定できます。しかし、1台のサーバーではWebサーバー、SSH、データベースなど複数のプログラムが同時に動いています。
そこで必要になるのが ポート番号 です。そして、データをどう届けるかを決める代表的な仕組みが TCP と UDP です。
ポート番号とは
ポート番号は、同じIPアドレス上のどのアプリケーションへ届けるかを示す番号です。
https://example.com:443
mysql://db.example.com:3306
ssh user@example.com -p 22| ポート | よく使う用途 |
|---|---|
| 22 | SSH |
| 53 | DNS |
| 80 | HTTP |
| 443 | HTTPS |
| 3306 | MySQL |
| 5432 | PostgreSQL |
| 6379 | Redis |
IPアドレス + ポート番号 で、接続先のアプリケーションが決まります。
学習者同じサーバーでWebもDBも動かせるのは、ポート番号で入口を分けているからなんですね。
TCP — 信頼性重視
TCPは、データを確実に、正しい順序で届ける ことを重視するプロトコルです。HTTP/1.1 と HTTP/2 はTCPの上で動きます。
通信を始める前に、3ウェイハンドシェイクで接続を確立します。
TCPには次のような機能があります。
- 到達確認
- 再送
- 順序制御
- 輻輳制御
- フロー制御
HTMLやJSONは一部が欠けると壊れるため、Webの多くの通信ではTCPの信頼性が重要になります。
UDP — 軽量で速い
UDPは、TCPのような接続確立や再送制御を持ちません。送るだけ に近い仕組みです。
UDPは、多少の欠落よりも低遅延が重要な場面や、アプリケーション側で信頼性を作る場面で使われます。
| TCP | UDP | |
|---|---|---|
| 接続 | あり | なし |
| 到達確認 | あり | なし |
| 順序保証 | あり | なし |
| 代表例 | HTTP/1.1, HTTP/2, SSH, DB接続 | DNS, 音声/動画, ゲーム, QUIC |
DNSとUDP
DNSは基本的にUDPの53番ポートを使います。問い合わせと応答が小さく、毎回TCP接続を張るより軽いからです。
ただし、応答が大きい場合やゾーン転送などではTCPの53番ポートも使われます。「DNS = UDPだけ」と覚えると雑すぎるので、基本はUDP、必要に応じてTCPも使う と理解しておくと安全です。
HTTP/3とQUIC
HTTP/3はTCPではなく、UDPベースの QUIC の上で動きます。
これは「UDPだから信頼性が不要」という意味ではありません。QUICがUDPの上に、再送、暗号化、ストリーム制御などを実装しています。TCPとTLSのハンドシェイクをまとめ、接続確立を速くする狙いがあります。
HTTPの詳細は HTTPとWeb API で扱っています。この章では、HTTPがTCPやUDPの上で動くアプリケーション層のプロトコルだと押さえれば十分です。
先生QUICがUDP上にTCPのような信頼性を再実装している、というのが面白いところ。「UDP = 信頼性がない」と丸暗記すると、HTTP/3の仕組みが理解できなくなるよ。

ファイアウォールでポートが閉じている
サーバー側でアプリケーションが起動していても、ファイアウォールやクラウドのセキュリティグループでポートが閉じていると接続できません。
ブラウザ → 203.0.113.10:443
サーバーは起動している
でもセキュリティグループで443が許可されていない
→ 接続できないよくある確認ポイントは次の通りです。
- サーバープロセスは起動しているか
- 想定したポートで待ち受けているか
127.0.0.1ではなく外部から届くアドレスで待ち受けているか- OSのファイアウォールで許可されているか
- クラウドのセキュリティグループで許可されているか
ちゃんと使うためのポイント
- ポート番号は、同じIP上のどのアプリへ届けるかを示す入口
- TCPは信頼性重視、UDPは軽量・低遅延重視
- HTTP/1.1とHTTP/2はTCP、HTTP/3はUDPベースのQUIC
- DNSは基本UDP 53番だが、TCP 53番も使う場面がある
- 接続できないときは、プロセス、ポート、待ち受けアドレス、ファイアウォールを確認する
次の章では、TCPやQUICの上でWebアプリケーションが使う HTTP/HTTPS を扱います。
