最終更新:
TCPとUDPの違いは?信頼性・通信単位・QUICを比較
TCPなら絶対に届くの?
失われたデータを再送し、順序を整えて渡そうとするけれど、回線断などで通信が失敗することはあるよ。またTCPで届いたことと、相手のアプリが処理や保存に成功したことも別。業務上の成功にはアプリの応答が必要なんだ。
送った1回分をそのまま受信する?
UDPでは届かなかったらどうする?
ゲームや動画は全部UDP?
新しい通信を作るならどう選ぶ?
通信の性質を比較
| 観点 | TCP | UDP |
|---|---|---|
| アプリへ渡す単位 | 順序付きのバイト列 | データグラム |
| 欠落への再送 | プロトコルが実施 | UDP自体にはない |
| メッセージの区切り | アプリで決める | データグラムの境界を保つ |
| 基本ヘッダー | 最小20バイト。オプションで増える | 8バイト |
| 暗号化 | TCP単体にはない | UDP単体にはない |
小さいヘッダーは一つの性質であり、通信全体の速度や遅延の保証ではありません。TCPの上にTLSを使うHTTPSと、QUICを使うHTTP/3など、上位の仕組みも含めて比較します。
「1回の送信=1回の受信」ではない例
TCPでABCとDEFを別々に書き込んでも、受信側がABCDEFをまとめて読むことや、一部分ずつ読むことがあります。アプリは読み取った長さを確認し、必要なデータがそろうまで処理します。
UDPでも巨大なデータグラムを送ればよいわけではありません。経路MTUや断片化、損失、輻輳への配慮が必要です。アプリが「処理済み」を保証したい場合は、TCP・UDPどちらでも処理IDや結果の確認を設計してください。
参考資料
確認日:2026年9月27日。製品の仕様・料金・対応環境は導入時にも確認してください。
- RFC 9293: TCP:信頼性・順序付きバイトストリーム・ヘッダー。
- RFC 768: UDP:データグラム、ヘッダー、再送保証の欠如。
- RFC 7766: DNS over TCP:DNSのTCP対応と切り詰めへの対応。
- RFC 6891: EDNS:512バイトを超えるUDP応答。
- RFC 9000: QUIC:ストリームと損失・輻輳の関係。