ウェブエンジニア問題集
第4.3章

TCP/UDPとポート — 通信の届け方と入口

5
この章の目次開く

IPアドレスで通信相手の機器までは指定できます。しかし、1台のサーバーではWebサーバー、SSH、データベースなど複数のプログラムが同時に動いています。

そこで必要になるのが ポート番号 です。そして、データをどう届けるかを決める代表的な仕組みが TCPUDP です。

ポート番号とは

ポート番号は、同じIPアドレス上のどのアプリケーションへ届けるかを示す番号です。

https://example.com:443
mysql://db.example.com:3306
ssh user@example.com -p 22
ポートよく使う用途
22SSH
53DNS
80HTTP
443HTTPS
3306MySQL
5432PostgreSQL
6379Redis

IPアドレス + ポート番号 で、接続先のアプリケーションが決まります。

学習者学習者

同じサーバーでWebもDBも動かせるのは、ポート番号で入口を分けているからなんですね。

TCP — 信頼性重視

TCPは、データを確実に、正しい順序で届ける ことを重視するプロトコルです。HTTP/1.1 と HTTP/2 はTCPの上で動きます。

通信を始める前に、3ウェイハンドシェイクで接続を確立します。

TCPには次のような機能があります。

  • 到達確認
  • 再送
  • 順序制御
  • 輻輳制御
  • フロー制御

HTMLやJSONは一部が欠けると壊れるため、Webの多くの通信ではTCPの信頼性が重要になります。

UDP — 軽量で速い

UDPは、TCPのような接続確立や再送制御を持ちません。送るだけ に近い仕組みです。

UDPは、多少の欠落よりも低遅延が重要な場面や、アプリケーション側で信頼性を作る場面で使われます。

TCPUDP
接続ありなし
到達確認ありなし
順序保証ありなし
代表例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 を扱います。

CS基礎クイズに挑戦するこの章で学んだCS基礎の知識を、4択クイズでアウトプットして定着させよう