TCPとUDPを使い分けよう
ストーリー
「TCPは信頼性が高いけど、すべての通信にTCPを使うわけじゃない」
「え、他にもプロトコルがあるんですか?」
「UDPっていうのがある。ビデオ通話やオンラインゲームで使われている。速いけど、データが届かないこともある」
「届かなくてもいいんですか?」
「場合による。動画で1フレーム欠けても問題ないが、お金の振込データが欠けたら大問題だ。使い分けが大事なんだ」
UDP(User Datagram Protocol)とは
UDPは、コネクションレス型の軽量なプロトコルです。
TCPとの根本的な違い
TCP: 接続確立 → データ送信 → 確認応答 → 接続切断
(電話のようなもの)
UDP: データ送信(それだけ)
(手紙のようなもの)
TCP vs UDP 比較表
| 特徴 | TCP | UDP |
|---|---|---|
| 接続 | コネクション型(3ウェイハンドシェイク) | コネクションレス型 |
| 信頼性 | 高い(再送あり) | 低い(再送なし) |
| 順序保証 | あり | なし |
| 速度 | 遅い(オーバーヘッドが大きい) | 速い(オーバーヘッドが小さい) |
| ヘッダサイズ | 20バイト以上 | 8バイト |
| フロー制御 | あり | なし |
| 用途 | Web、メール、ファイル転送 | DNS、ストリーミング、ゲーム |
UDPの仕組み
パケット構造(シンプル)
+------------------+
| 送信元ポート (2B) |
| 宛先ポート (2B) |
| データ長 (2B) |
| チェックサム (2B) |
+------------------+
| データ |
+------------------+
合計: ヘッダ8バイト + データ
TCPのヘッダが20バイト以上あるのに対し、UDPはわずか8バイトです。このシンプルさが速度の秘密です。
UDPの通信フロー
クライアント サーバー
| |
|--- データ ----------------->| 送りっぱなし
|--- データ ----------------->| 確認応答なし
|--- データ ----X (消失) | 再送もしない
|--- データ ----------------->|
| |
各プロトコルの使い分け
TCPを使うべきケース
| 用途 | 理由 |
|---|---|
| Web(HTTP/HTTPS) | ページが正しく表示される必要がある |
| メール(SMTP/IMAP) | メールの一部が欠けたら困る |
| ファイル転送(FTP/SCP) | ファイルが壊れたら使えない |
| データベース接続 | データの整合性が最重要 |
| SSH | コマンドが正確に伝わる必要がある |
UDPを使うべきケース
| 用途 | 理由 |
|---|---|
| DNS | 小さなクエリを高速に処理したい |
| 動画ストリーミング | 多少のフレーム欠けより遅延のほうが問題 |
| オンラインゲーム | リアルタイム性が最優先 |
| VoIP(音声通話) | 音声の遅延は会話を妨げる |
| NTP(時刻同期) | 小さなデータの高速送信 |
| DHCP | IPアドレスの自動取得 |
実務での出会い方
DNSの例
bash
# DNS問い合わせは通常UDP(ポート53)
dig example.com
# 応答サイズが大きい場合はTCPにフォールバック
dig example.com +tcpDNS問い合わせは小さなデータのやりとりなので、通常UDPが使われます。ただし、応答が512バイトを超える場合はTCPに切り替わります。
データベース接続
bash
# MySQL(TCP ポート3306)
mysql -h 192.168.1.100 -P 3306 -u user -p
# PostgreSQL(TCP ポート5432)
psql -h 192.168.1.100 -p 5432 -U user -d mydbデータベース接続は常にTCPです。データの正確性が必須だからです。
知っておくべきUDPの 課題
1. パケットロス
UDPはパケットが失われても再送しません。アプリケーション側で対処が必要です。
2. 順序の入れ替わり
UDPはパケットの到着順序を保証しません。先に送ったパケットが後に届くことがあります。
3. セキュリティ
UDPは接続の概念がないため、送信元の偽装(IPスプーフィング)が容易です。UDPリフレクション攻撃(DDoS)に悪用されることがあります。
まとめ
| ポイント | 内容 |
|---|---|
| TCP | 信頼性重視(接続確立、再送、順序保証) |
| UDP | 速度重視(コネクションレス、軽量ヘッダ) |
| TCP使用例 | Web、メール、DB接続、ファイル転送 |
| UDP使用例 | DNS、ストリーミング、ゲーム、VoIP |
| 使い分け | 正確性が必要→TCP、リアルタイム性が必要→UDP |
チェックリスト
- TCPとUDPの違いを5つ以上挙げられる
- UDPが使われるサービスを3つ言える
- なぜDB接続にTCPが使われるか説明できる
- UDPの課題(パケットロス等)を理解した
次のステップへ
TCPとUDPの使い分けを理解しました。 次のセクションでは、通信の入口である「ポート」とソケットについて学びます。
推定読了時間: 20分