TCPとUDP
🌐はじめに
この記事では、インターネット通信に欠かせない2つのプロトコル、UDPとTCPの違いを中心に解説します。
両者は同じ「トランスポート層」のプロトコルですが、目的も使われ方も異なります。それぞれの特性を理解することで、ネットワーク設計・アプリ開発・パフォーマンスチューニングなどに活かせる知識となります。
📦TCPとUDPの共通点
-
両方ともトランスポート層のプロトコル(OSIモデルの第4層)
-
IPアドレスとポート番号を用いて通信先を特定
-
**ポート番号(0〜65535)**によってアプリケーションを識別
-
データの単位はセグメント(TCP)またはデータグラム(UDP)
🔁TCPの特徴:信頼性重視の通信
✅ 特徴
項目 | 内容 |
---|---|
コネクション | 接続確立(3-way handshake)必要 |
信頼性 | 高い(確認応答、再送制御あり) |
データ順序 | 保証される(順序制御) |
輻輳制御 | あり |
ヘッダサイズ | 大(20バイト以上) |
代表的用途 | Web(HTTP/HTTPS)、メール(SMTP/IMAP)、ファイル転送(FTP) |
✅ 利点と適した場面
-
確実に届けたいデータ:テキスト、ファイル、Webページ
-
データが途中で壊れたり欠けたりしないことが重要な場合
⚠️ 注意点
-
通信開始時にコネクション確立が必要なため、レイテンシが高い
-
ヘッダが大きく、通信オーバーヘッドが大きい
🚀UDPの特徴:速度重視・シンプルな通信
✅ 特徴
項目 | 内容 |
---|---|
コネクション | 不要(接続レス) |
信頼性 | 低い(確認応答なし、再送なし) |
データ順序 | 保証されない |
輻輳制御 | なし |
ヘッダサイズ | 小(8バイト) |
代表的用途 | DNS、動画・音声ストリーミング、オンラインゲーム、VoIP、DHCP |
✅ 利点と適した場面
-
リアルタイム性が重要なアプリ(多少のパケット損失を許容できる)
-
高速かつ軽量な通信が求められるケース
-
アプリ側で再送や順序制御を独自に実装できる場合
⚠️ 注意点
-
パケットロスや順序の乱れが発生し得る
-
アプリケーション層で信頼性を担保する必要がある
📊 TCP vs UDP:比較表
項目 | TCP | UDP |
---|---|---|
接続制御 | あり(接続型) | なし(接続レス) |
信頼性 | 高い | 低い |
順序保証 | あり | なし |
再送制御 | あり | なし |
輻輳制御 | あり | なし |
軽さ | 重い | 軽い |
ヘッダサイズ | 約20バイト〜 | 8バイト |
通信速度 | 比較的遅い | 速い |
主な用途 | Web, メール, ファイル転送 | DNS, ゲーム, ストリーミング |
🎮使用例:UDPが選ばれる理由
🎧 オンライン音声通話(VoIP)
リアルタイム性が最重要。1秒前の音声データは意味をなさないため、パケット損失があっても遅延しないことが優先される。
🎥 動画ストリーミング(特にライブ配信)
再送による遅延よりも、映像がスムーズに流れることを優先。
🎮 オンラインゲーム
プレイヤーの位置や操作情報は常に更新される。古い情報の再送より、最新の状態を素早く送ることが大事。
🧠さいごに:選択の判断基準
プロトコルの選択は常に目的に応じて決めるべきです。
-
「正確さ」が大事 → TCP
-
「スピードとリアルタイム性」が大事 → UDP
また、現代の技術では、**QUIC(HTTP/3)**のように「UDPの上に信頼性を追加する」新しい試みも進んでおり、今後の動向にも注目です。