TCPとUDPは、どちらもインターネット通信で使われるトランスポート層のプロトコルですが、信頼性・速度・用途が大きく異なります。
結論から言うと、TCPは「信頼性重視のコネクション型」、UDPは「速度重視のコネクションレス型」です。
この記事では、TCPとUDPの違いを比較表つきでわかりやすく解説し、どのような場面でどちらを使うべきかを紹介します。
TCPとは?
TCP(Transmission Control Protocol)は、データを確実に相手に届けるための通信プロトコルです。インターネットの基盤であるTCP/IPモデルのトランスポート層で動作します。
TCPの最大の特徴は、コネクション型通信であることです。通信を開始する前に「3ウェイハンドシェイク」と呼ばれる手順で接続を確立し、データが正しく届いたかを確認しながら送信します。パケットが途中で失われた場合は再送制御によって自動的に再送されるため、データの欠損が起きません。
TCPは、Webブラウジング(HTTP/HTTPS)、メール送受信(SMTP/POP3/IMAP)、ファイル転送(FTP)など、データの正確性が求められる通信に広く使われています。
UDPとは?
UDP(User Datagram Protocol)は、データを高速に送信するための軽量な通信プロトコルです。TCPと同じくトランスポート層で動作しますが、コネクションレス型通信である点が大きく異なります。
UDPは接続の確立や確認応答を行わないため、オーバーヘッドが少なく通信速度が速いのが特徴です。その代わり、パケットが途中で失われても再送は行われず、届いたかどうかの保証もありません。
UDPは、動画・音声のリアルタイムストリーミング、オンラインゲーム、DNS問い合わせ、VoIPなど、多少のデータ損失よりもリアルタイム性が重要な通信で使われています。
TCPとUDPの違い【比較表】
| 比較項目 | TCP | UDP |
|---|---|---|
| 接続方式 | コネクション型(3ウェイハンドシェイク) | コネクションレス型 |
| 信頼性 | 高い(再送制御・順序保証あり) | 低い(再送なし・順序保証なし) |
| 通信速度 | やや遅い(確認応答のオーバーヘッド) | 速い(軽量なヘッダ) |
| ヘッダサイズ | 20バイト以上 | 8バイト |
| フロー制御 | あり(ウィンドウ制御) | なし |
| 輻輳制御 | あり | なし |
| データ順序の保証 | あり(シーケンス番号で管理) | なし |
| 代表的な用途 | Web閲覧、メール、ファイル転送 | 動画配信、ゲーム、DNS、VoIP |
TCPの仕組み:3ウェイハンドシェイクとは?
TCPの接続確立は、3ウェイハンドシェイクと呼ばれる3段階の手順で行われます。
まず、クライアントがサーバーにSYNパケットを送信して接続要求を出します。次に、サーバーがSYN+ACKパケットで応答し、接続を受け入れる意思を示します。最後に、クライアントがACKパケットを返すことで接続が確立されます。
この手順により、双方が通信可能な状態であることを確認してからデータのやり取りが始まるため、信頼性の高い通信が実現します。通信終了時にも4ウェイハンドシェイクで安全に切断されます。
UDPが速い理由
UDPがTCPより高速な理由は、通信の仕組みがシンプルだからです。具体的には以下の3つのオーバーヘッドがありません。
第一に、接続確立の手順が不要です。TCPのように3ウェイハンドシェイクを行わず、いきなりデータを送信できます。第二に、確認応答(ACK)が不要です。送ったデータが届いたか確認しないため、待ち時間が発生しません。第三に、ヘッダが軽量です。UDPのヘッダは8バイトしかなく、TCPの20バイト以上と比べて大幅に小さいため、データ効率が高くなります。
TCPとUDP、どちらを選ぶべき?
TCPとUDPの使い分けは、アプリケーションが求める通信品質によって決まります。
TCPを選ぶべきケースは、データの欠損が許されない場面です。Webサイトの表示(HTTP/HTTPS)、メール送受信、ファイル転送、データベース通信などでは、1バイトでもデータが欠けると問題になるため、TCPの信頼性が不可欠です。
UDPを選ぶべきケースは、リアルタイム性が重視される場面です。動画・音声のライブ配信では、古いパケットの再送を待つよりも新しいデータを送り続ける方がユーザー体験が良くなります。オンラインゲームでも、わずかな遅延がゲームプレイに大きく影響するため、UDPが選ばれます。
なお、近年ではQUICというプロトコルも注目されています。QUICはUDPの上に構築されていますが、TCPに近い信頼性を持ちながら高速な通信を実現するもので、HTTP/3で採用されています。
実務で押さえておきたいポイント
ネットワークエンジニアやインフラエンジニアとして押さえておくべきポイントをまとめます。
まず、ファイアウォール設定ではTCPとUDPを区別する必要がある点です。同じポート番号でもTCPとUDPは別のプロトコルとして扱われるため、許可ルールを設定する際は両方を確認しましょう。
次に、監視・トラブルシューティングでの違いです。TCPは接続状態を持つため、netstatやssコマンドでESTABLISHED/TIME_WAITなどの状態を確認できますが、UDPはコネクションレスのためこれらの状態がありません。
ネットワークの基本を学ぶなら、体系的に学べる書籍がおすすめです。
よくある質問(FAQ)
Q. TCPとUDPは同時に使えますか?
はい、同じアプリケーションがTCPとUDPの両方を使うことは可能です。例えば、DNSは通常UDPを使いますが、応答サイズが大きい場合はTCPにフォールバックします。
Q. UDPは危険ですか?
UDPそのものが危険というわけではありませんが、接続の確認を行わないため、DDoS攻撃(UDPフラッド)に悪用されやすいという側面があります。ファイアウォールで不要なUDPポートを閉じるなどの対策が重要です。
Q. QUICはTCPとUDPのどちらですか?
QUICはUDPの上に構築されたプロトコルですが、TCPのような信頼性(再送制御・順序保証)をアプリケーション層で実装しています。HTTP/3で標準採用されており、「UDPの速度とTCPの信頼性」の両方を兼ね備えた次世代プロトコルです。
まとめ
TCPとUDPはどちらもトランスポート層の重要なプロトコルですが、設計思想が正反対です。TCPは「確実に届ける」ことを優先し、UDPは「速く届ける」ことを優先します。
Web開発やインフラ構築では、アプリケーションの要件に応じて適切なプロトコルを選択することが重要です。まずは両者の特徴をしっかり理解し、システム設計に活かしていきましょう。


コメント