TCPとUDPの定義と役割
TCPとUDPは、アプリケーションがデータをネットワーク経由で送るときに使う“トランスポート層”の代表的な通信方式です。どちらもIPの上で動作しますが、中心となる違いは「データをどう配達するか」に対する方針です。
TCP(Transmission Control Protocol)は、送信側と受信側の間で通信を成立させ、データの順序を保ち、欠けたデータがあれば再送で補う方向に設計されています。そのため、一般に「信頼性」を重視する通信に向きます。
UDP(User Datagram Protocol)は、接続を確立するための手順や、欠落を自動的に補う仕組みをTCPほど前提にしていません。代わりに、ヘッダーを含む最小限のやり取りでデータを送ります。そのため、遅延を抑えたい、またはアプリ側で欠落や順序を扱える場合に使われやすいです。
仕組みを“流れ”で理解する簡単モデル
まず、送信側がデータを用意してから相手に届くまでを、TCPとUDPで対比して見ます。
TCPの簡単モデル:
- 接続を開始する(開始のやり取りが発生)
- データを“セグメント”として送る
- 受信側は受け取ったデータを確認する(確認情報が戻る)
- 足りない場合は再送され、順序が必要なら整えられる
ここで重要なのは、TCPが「相手が受け取ったか」「どの順序で受け取るべきか」を重視する点です。その結果、通信の状態管理や確認情報の往復が増えやすく、遅延がゼロにはなりません。
UDPの簡単モデル:
- データ(“データグラム”)を送る
- 受信側は受け取ったデータを扱う
UDPは、この“確認して整える”部分をTCPほどには行わない前提で設計されています。そのため、同じネットワーク状況でも、到達までの手続きは軽くなりやすいです。
重要な違い:保証、順序、輻輳の考え方
実務で詰まりやすいポイントは、「どこまでがTCP/UDPの責務か」です。
-
配達の保証 TCPは欠落を埋める方向(再送など)に働きやすい一方、UDPは基本的に“届けること”を自動で保証する作りではありません。つまり、UDPでは欠落や重複、順序の乱れが起きうる前提でアプリ設計する必要があります。
-
順序 TCPは順序に関して整える性質があり、アプリは“送った順に届く”ことを前提に組み立てやすいです。UDPは、順序が保証されない前提で扱う場面が多くなります。
-
いつ何がボトルネックになるか TCPは状態管理と確認のための通信が入ります。結果として、通信開始や、混雑時の振る舞いにより体感の遅延やスループットが変わることがあります。
UDPは確認や整形をTCPほど前提にしない分、軽量に見えやすい反面、ネットワークの混雑による欠落や遅延の影響を受けやすく、アプリ側が吸収する必要が出ます。
制限と例外:TCP/UDPだけで完結しない
TCPとUDPは“万能の選択肢”ではありません。
