UDP
UDPとは
UDP(User Datagram Protocol)は、[[TCP/IP]] のトランスポート層で使われるプロトコルの1つで、確認応答なしにデータを送りっぱなしにするのが特徴です。「届いたかどうか」を確かめる手続きを省くぶん、軽くて速い通信ができます。
同じ層の TCP が「電話」(相手とつながってから話す)だとすると、UDP は「ハガキ」(投函したら届くのを祈る)にたとえられます。
TCPとの比較
| UDP | TCP | |
|---|---|---|
| 接続の確立 | しない(コネクションレス) | する(3ウェイハンドシェイク) |
| 到達保証・再送 | なし | あり |
| 順序保証 | なし | あり |
| 速度・オーバーヘッド | 軽くて速い | 制御のぶん重い |
| 向く用途 | リアルタイム通信・小さな問い合わせ | 確実に届けたい通信全般 |
UDPは「多少欠けても、遅れて届くより今届く方が大事」な用途で選ばれます。
UDPが使われている場所
- [[DNS]] の名前解決 — 小さな問い合わせと応答が1往復で済むため、接続確立のコストが割に合わない
- [[DHCP]] — まだIPアドレスを持たない端末がブロードキャストでやり取りする
- 音声通話・ビデオ会議・オンラインゲーム — 途切れた部分を再送してもらっても手遅れなので、欠けは捨てて先へ進む
- QUIC([[HTTP/2とHTTP/3]] のHTTP/3) — UDPの上に再送や暗号化を独自実装し、TCPより速い接続を実現している
最後のQUICが象徴的で、「保証がない」ことは欠点ではなく、必要な保証をアプリ側で自由に設計できる土台にもなっています。
初学者向けポイント
- 到達保証がないため、UDPを使うアプリは「欠けたらどうするか」を自分で決めている(捨てる・自前で再送するなど)
- [[ファイアウォール]] の設定ではTCPとUDPは別物として扱われる — 「ポートは開けたのに繋がらない」時はプロトコルの指定違いを疑う
- プログラムからは [[ソケット通信]] のデータグラムソケットとして扱う
関連技術とのつながり
- [[TCP/IP]] — UDPはTCPと並ぶトランスポート層の主要プロトコル
- [[DNS]] — UDPの代表的な利用例。1往復の軽い問い合わせに最適
- [[DHCP]] — アドレス取得前の端末が使えるのもUDPだから
- [[HTTP/2とHTTP/3]] — HTTP/3はUDP上のQUICで動く
Q: UDPの特徴として正しいのはどれ?
- [ ] 3ウェイハンドシェイクで接続を確立してから通信する
- [x] 確認応答なしにデータを送りっぱなしにするため軽くて速い
- [ ] 到達順序を必ず保証する
解説: 接続確立や到達・順序の保証はTCPの特徴です。UDPはそれらを省いて軽さと速さを得ています。
Q: UDPが向いている用途として本文で挙げられているのはどれ?
- [x] 音声通話やオンラインゲームなどのリアルタイム通信
- [ ] ファイルを1バイトも欠けずに転送したい場合
- [ ] 到達保証をプロトコル任せにしたい場合
解説: 「遅れて届くより今届く方が大事」な用途がUDP向きです。確実な転送はTCPの領分です。
Q: HTTP/3の土台となっているQUICについて、本文の説明と合うものはどれ?
- [ ] TCPの上に構築されている
- [ ] 再送を一切行わないプロトコルである
- [x] UDPの上に再送や暗号化を独自実装している
解説: QUICはUDPを土台に、必要な保証をアプリケーション側で実装し直すことでTCPより速い接続を実現しています。