TCPとUDPの違い
信頼性を重視するTCPと軽さを重視するUDPの違いを、WebやDNSの理解につなげます。
インターネット上の通信では、データを相手に届けるためにさまざまな通信方式が使われています。 その中でも代表的なものが TCP と UDP です。
TCPは、データを正確に届けることを重視する通信方式です。 UDPは、通信方式そのものを軽くし、遅延を抑えやすくすることを重視する通信方式です。
ただし、TCPとUDPは「どちらが上か」で比べるものではありません。 通信の目的によって、適した方式が使い分けられています。
TCPとは何か
TCPは、信頼性を重視する通信方式です。
TCPでは、通信する相手との間で接続を確立し、その接続の上でデータを送受信します。 送ったデータが相手に届いたかを確認し、途中で失われたデータがあれば再送します。
また、ネットワーク上では、データが送信した順番どおりに届くとは限りません。 TCPでは、データに順序を管理するための情報を持たせ、受信側で正しい順番に整えて扱います。
このため、TCPは「欠けたり、順番が崩れたりすると困る通信」に向いています。
たとえば、ログイン処理、ファイル送受信、メール送信、HTTP/1.1やHTTP/2によるWeb通信などでは、データの正確さが重要です。 ログイン情報の一部が欠けたり、ファイルの一部が壊れたりすると、正しく処理できません。
TCPは、信頼性を得るために確認や再送などの制御を行います。 その分、UDPより制御が多くなりますが、データを正しい順番で確実に扱いたい通信では重要な仕組みです。
TCPは「正確に届くように管理する」
TCPの特徴は、単に「データを送る」だけではなく、送ったデータを通信として成立させるための管理を行う点にあります。
具体的には、TCPは次のような性質を持ちます。
| 性質 | 内容 |
|---|---|
| 接続指向 | 通信相手との接続を確立してからデータを送受信する |
| 到達確認 | 送ったデータが届いたかを確認する |
| 再送 | 届かなかったデータを必要に応じて送り直す |
| 順序制御 | 順番が崩れて届いたデータを正しい順番に整える |
| 重複への対応 | 同じデータが重複して届いた場合に整理する |
このような仕組みによって、TCPはアプリケーションに対して、順序の整った信頼性のあるデータの流れを提供します。
ただし、TCPは「アプリケーションが送った1回分のデータ単位」をそのまま保つわけではありません。 TCPはデータを連続したバイト列として扱います。
そのため、アプリケーション側では、どこからどこまでが1つのメッセージなのかを別途決める必要があります。 HTTPなどの上位プロトコルは、そのためのルールを持っています。
UDPとは何か
UDPは、軽さや低遅延を重視する通信方式です。
UDPでは、TCPのように接続を確立してから通信するわけではありません。 また、UDP自体には、届かなかったデータを再送する仕組みや、順番を整える仕組みはありません。
UDPは、データを比較的シンプルな単位で送ります。 この単位はデータグラムと呼ばれます。
UDPは、通信方式そのものに多くの制御を持たせないため、処理が軽くなります。 その結果、リアルタイム性を重視する通信で使いやすい場合があります。
ただし、「UDPだから必ず速い」と単純に考えるのは正確ではありません。 実際の速度や体感品質は、ネットワーク環境、アプリケーション側の設計、暗号化方式、再送の有無、混雑状況などにも左右されます。
UDPの本質は、「通信方式そのものが保証を多く持たない」という点です。
UDPは「保証を減らして扱いやすくする」
UDPは、TCPのような信頼性の仕組みを通信方式そのものには持っていません。
| 性質 | 内容 |
|---|---|
| 非接続型 | TCPのような接続確立を前提にしない |
| 到達保証なし | UDP自体はデータが必ず届くことを保証しない |
| 順序保証なし | UDP自体はデータの到着順を保証しない |
| 再送なし | UDP自体は失われたデータを自動で送り直さない |
| データグラム単位 | 送信した単位をデータグラムとして扱う |
このように聞くと、UDPは不完全な通信に見えるかもしれません。 しかし、UDPが使われる理由は、保証を減らすことでアプリケーション側が自由に通信を設計しやすくなるからです。
たとえば、動画通話では、古い音声データを後から正確に再送するより、現在の音声をすぐに届けるほうが自然です。 オンラインゲームでも、過去の位置情報を完全に再送するより、現在の状態を素早く反映するほうが重要な場合があります。
また、UDPを使うアプリケーションが何も保証できないわけではありません。 必要であれば、アプリケーション側で独自に確認、再送、順序制御、暗号化などの仕組みを加えることができます。
QUICはその代表例です。 QUICはUDPを土台にしていますが、単なるUDP通信ではありません。UDPの上に、接続管理、暗号化、再送、ストリーム制御などの仕組みを重ねた通信方式です。
TCPとUDPの比較
TCPとUDPの違いは、「信頼性があるかないか」だけではありません。 通信の設計思想が異なります。
| 項目 | TCP | UDP |
|---|---|---|
| 基本的な考え方 | 正確に届けるために通信を管理する | 通信方式自体を軽くし、制御を最小限にする |
| 接続 | 接続を確立してから通信する | 接続確立を前提にしない |
| データの扱い | 連続したバイト列として扱う | データグラム単位で扱う |
| 到達確認 | 行う | UDP自体では行わない |
| 順序制御 | 行う | UDP自体では行わない |
| 再送 | 必要に応じて行う | UDP自体では行わない |
| 向いている用途 | 正確性が重要な通信 | 低遅延や柔軟な制御が重要な通信 |
| 代表例 | HTTP/1.1、HTTP/2、ログイン、ファイル送受信、メール送信 | DNS、動画通話、オンラインゲーム、QUIC、HTTP/3 |
TCPが向いている通信
TCPは、データの欠落や順序の乱れが問題になりやすい通信に向いています。
たとえば、ファイルをダウンロードするとき、途中の一部だけが欠けるとファイル全体が壊れる可能性があります。 ログイン処理でも、認証に必要な情報が正しく届かなければ処理できません。
Web通信でも、HTTP/1.1やHTTP/2はTCPの上で動作します。 Webページを構成するHTML、CSS、JavaScript、画像などは、基本的に正しく取得できる必要があります。
このように、通信の正確性が重要な場面ではTCPが向いています。
ただし、現在のWeb通信がすべてTCPだけで動いているわけではありません。 HTTP/3では、QUICが使われます。QUICはUDPを土台にした通信方式です。
そのため、「Web閲覧はTCP」とだけ覚えると、現在の通信を理解するときに不正確になります。 より正確には、「HTTP/1.1やHTTP/2ではTCPが使われ、HTTP/3ではQUICが使われる」と整理するとよいです。
UDPが向いている通信
UDPは、リアルタイム性や設計の柔軟性が重要な通信に向いています。
動画通話では、少し前の音声や映像を後から完全に受け取るより、現在の音声や映像をできるだけ早く受け取ることが重要です。 一部の音声や映像が欠けても、通信全体を止めずに進めたほうが自然に使える場合があります。
オンラインゲームでも、低遅延が重要になります。 過去の状態を完全に再送するより、現在の状態を短い間隔で更新し続けるほうが適している場合があります。
DNSでもUDPがよく使われます。 DNSは、ドメイン名に対応するなどを問い合わせる仕組みです。短い問い合わせと応答を素早く行う場面ではUDPが適しています。
ただし、DNSが常にUDPだけを使うわけではありません。 応答が大きい場合、ゾーン転送を行う場合、またはDNS over TLSのような方式ではTCPが使われます。
つまり、DNSは「UDPの代表例」ではありますが、「UDPだけの通信」ではありません。
QUICとUDPの関係
QUICは、UDPを土台にした通信方式です。 HTTP/3は、このQUICの上で動作します。
ここで重要なのは、QUICが「UDPだから信頼性がない通信」ではないという点です。
UDP自体には、到達確認、再送、順序制御、暗号化などの仕組みはありません。 しかし、QUICはUDPの上に独自の制御を重ねることで、信頼性や暗号化を実現します。
なぜTCPではなくUDPの上に作るのかというと、OSやネットワーク機器に深く組み込まれているTCPそのものを変更するより、UDPの上で新しい通信方式を設計したほうが柔軟に改良しやすいからです。
そのため、UDPは単に「雑な通信」ではありません。 新しい通信方式を実装するための土台としても使われます。
TCPとUDPはどちらが優れているのか
TCPとUDPは、どちらか一方が常に優れているわけではありません。
TCPは、通信の信頼性を重視します。 UDPは、通信方式そのものを軽くし、アプリケーション側で柔軟に制御しやすくします。
正確性が重要な通信ではTCPが適しています。 低遅延やリアルタイム性が重要な通信ではUDPが適している場合があります。
また、UDPを使っていても、アプリケーション側で信頼性を補うことがあります。 逆に、TCPを使っていても、ネットワーク状況が悪ければ遅延や再送は発生します。
したがって、TCPとUDPは「速い・遅い」「安全・危険」のように単純に分けるものではありません。 通信の目的、許容できる遅延、欠落してよいデータかどうか、アプリケーション側でどこまで制御するかによって使い分けられます。
匿名性を考えるうえでの接点
TCPとUDPの違いは、匿名性や通信の見え方を理解するときにも関係します。
たとえば、、、DNS、HTTP/3、動画通話、オンラインゲームなどでは、TCPとUDPのどちらが使われるかによって、通信の扱われ方が変わる場合があります。
TCP通信は、接続の開始、継続、終了が比較的はっきりしています。 UDP通信は、接続という形をTCPほど明確に持たず、短いデータグラムが断続的に流れる場合があります。
この違いは、ファイアウォール、NAT、VPN、プロキシ、匿名化ネットワークなどで重要になります。
たとえば、Torは基本的にTCPストリームを扱う設計です。 そのため、UDPを使うアプリケーション通信をそのままTorで流せるとは限りません。
また、HTTP/3ではQUICが使われるため、Web通信であってもUDPベースになる場合があります。 このような場合、従来のHTTP/1.1やHTTP/2とは、通信の見え方や制御のされ方が変わることがあります。
DNSも匿名性やプライバシーを考えるうえで重要です。 DNS問い合わせがUDPで外部に出ているのか、TCPや暗号化されたDNS方式で扱われているのかによって、通信の観測され方が変わります。
TCPとUDPの違いを理解しておくと、単に「通信している」だけではなく、「どの種類の通信が、どのように運ばれているのか」を整理しやすくなります。
まとめ
TCPは、信頼性を重視する通信方式です。 接続を確立し、データが届いたかを確認し、必要に応じて再送し、順序を整えます。
UDPは、通信方式そのものを軽くするため、到達確認、再送、順序制御などを基本機能として持ちません。 その分、低遅延や柔軟な設計が求められる通信で使われます。
TCPは、HTTP/1.1、HTTP/2、ログイン、ファイル送受信、メール送信などに向いています。 UDPは、DNS、動画通話、オンラインゲーム、QUIC、HTTP/3などで使われます。
ただし、DNSはUDPだけではなくTCPも使います。 QUICはUDPを土台にしていますが、単なるUDP通信ではなく、UDPの上に独自の信頼性や暗号化の仕組みを持っています。
TCPとUDPは、どちらかが優れているという関係ではありません。 通信の目的に応じて、正確性を重視するのか、低遅延や柔軟性を重視するのかによって使い分けられています。
関連ツール
DNSLeakTest
DNSLeakTestは、DNS問い合わせがどのDNSサーバーへ送られているかを確認できる検証サイトです。
紹介する理由: VPN使用中でもDNSだけが普段のISPや意図しないリゾルバへ出ていると、接続先ドメインの手がかりが残るためです。