LESSON 20分

TCPとUDPを使い分けよう

ストーリー

「TCPは信頼性が高いけど、すべての通信にTCPを使うわけじゃない」

「え、他にもプロトコルがあるんですか?」

「UDPっていうのがある。ビデオ通話やオンラインゲームで使われている。速いけど、データが届かないこともある」

「届かなくてもいいんですか?」

「場合による。動画で1フレーム欠けても問題ないが、お金の振込データが欠けたら大問題だ。使い分けが大事なんだ」


UDP(User Datagram Protocol)とは

UDPは、コネクションレス型の軽量なプロトコルです。

TCPとの根本的な違い

TCP: 接続確立 → データ送信 → 確認応答 → 接続切断
     (電話のようなもの)

UDP: データ送信(それだけ)
     (手紙のようなもの)

TCP vs UDP 比較表

特徴TCPUDP
接続コネクション型(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(時刻同期)小さなデータの高速送信
DHCPIPアドレスの自動取得

実務での出会い方

DNSの例

bash
# DNS問い合わせは通常UDP(ポート53)
dig example.com

# 応答サイズが大きい場合はTCPにフォールバック
dig example.com +tcp

DNS問い合わせは小さなデータのやりとりなので、通常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分