目次
TCPとUDPの違い
TCPとUDPは、どちらもOSI参照モデルのトランスポート層(第4層)で使用される通信プロトコルです。
アプリケーションがネットワーク通信を行う際に、どのようにデータを届けるかを定義します。
TCPとUDPの概要比較
| 項目 | TCP | UDP |
|---|---|---|
| 接続方式 | コネクション型(接続確立あり) | コネクションレス(接続なし) |
| 信頼性 | 高い(到達保証・順序保証あり) | 低い(※)(保証なし) |
| 通信速度 | 制御が多く遅延が増えやすい | 軽量で低遅延 |
| 主な用途 | Web、メール、SSH、ファイル転送など | DNS、音声通話、動画配信、ゲームなど |
| 再送制御 | あり | なし |
| 順序保証 | あり | なし |
(※)UDPは信頼性が低いというより、信頼性をプロトコルが提供しないというのが正確です。
そのため、実際のシステムでは、HTTP/3(QUIC)、WebRTC、ゲームプロトコルのように、UDPの上で独自に信頼性制御を実装するケースが多くあります。
TCPとは
TCP(Transmission Control Protocol)は、信頼性の高い通信を提供するプロトコルです。
特徴
TCPは以下の仕組みにより、データを確実に届けます。
- 接続確立(スリーウェイハンドシェイク)
- 到達確認(ACK)
- 再送制御
- 順序制御(並び替え)
- 重複排除
- フロー制御
- 輻輳制御
TCP通信の流れ
1.接続確立(スリーウェイハンドシェイク)
通信開始時に、次の3ステップで接続を確立します。
- クライアント → SYN送信
- サーバ → SYN+ACK応答
- クライアント → ACK応答
これにより、双方が通信可能な状態になります。
2.データ通信
TCPでは、データは複数の単位(セグメント)に分割して送信されます。
ポイント
- 複数のセグメントを連続して送信できる(ウィンドウ制御)
- 各セグメントに対してACKが返される
- ACKが来ない場合は再送する
- 順序が乱れた場合は並び替える
※1つ送って確認してから次を送るわけではなく、未確認データを管理しながら並列的に送信する仕組みです。
3.接続切断
通信終了時は以下の手順で接続を切断します。
FIN / ACK を使った手順(通常4ステップ)
TCPのメリット・デメリット
| メリット | データが確実に届く 順序が保証される 信頼性が非常に高い |
| デメリット | 接続確立のオーバーヘッドがある ACKや再送などの制御が多い 遅延が増えやすい |
TCPが使われる例
- HTTP/1.1、HTTP/2(Web通信)
- HTTPS
- SMTP(メール送信)
- SSH
- FTP / SFTP
※近年は、Web通信でもUDPベースのHTTP/3(QUIC)が使われるケースが増えています。
UDPとは
UDP(User Datagram Protocol)は、シンプルで軽量な通信を行うプロトコルです。
特徴
UDPは以下のような特徴を持ちます。
- 接続確立なし(コネクションレス)
- 再送制御なし
- 順序保証なし
- 到達保証なし
送信側は、宛先IPアドレスとポート番号を指定して、データグラムをそのまま送信するだけです。
UDP通信の流れ
- 送信側がデータを送る
- 受信側が受け取る(届かない可能性あり)
TCPのような接続確立や切断手順はありません。
UDPのメリット・デメリット
| メリット | 処理が軽く高速 低遅延 リアルタイム通信に向いている |
| デメリット | データが届かない可能性がある 順序が保証されない 再送はアプリ側で実装する必要がある |
UDPが使われる例
- DNS(通常の名前解決)
- VoIP(音声通話)
- 動画配信
- オンラインゲーム
- DHCP
- NTP
- HTTP/3(QUIC)
※DNSは通常UDPを使用しますが、以下の場合はTCPも使用されます。
- ゾーン転送
- 応答サイズが大きい場合
TCPとUDPの使い分け
| 特徴 | 例 | |
|---|---|---|
| TCP | データの正確性が最優先 欠損が許されない 順序が重要 |
Webページ ファイル転送 メール |
| UDP | 多少の欠損が許容される リアルタイム性が重要 遅延を最小化したい |
音声通話 動画ストリーミング ゲーム通信 |
関連の記事
