TCP / UDP
TCP / UDP
概要(サマリー)
TCPとUDPは、どちらもインターネット上でコンピュータ同士がデータをやり取りするために使われる、代表的な通信のプロトコル(約束事)である。
たとえるなら、TCPは「受け取りを確認し、順番を整えながら届ける宅配便」であり、UDPは「封筒ごとに送り、配達確認や並べ替えは別の仕組みに任せる郵便」に近い。HTTP/1.1やHTTP/2によるWeb閲覧やファイル転送などではTCPが広く使われる。一方、ライブ通話やオンラインゲームの一部のように、多少の欠損より遅延を抑えることが重要な場面ではUDPが使われることがある。
詳細解説
TCPとUDPは何のためにあるのか
インターネット上でデータを送るとき、そのデータはパケットという小さな単位に分割されて送られる。しかし、IPはパケットを目的地へ運ぶベストエフォート型の仕組みであり、配送自体や「正しい順番で」「抜け漏れなく」届くことを保証しない。
この「届け方のルール」を決めているのが、TCPとUDPという2つのトランスポート層プロトコルである。同じ目的地へデータを送るにしても、どちらのプロトコルを使うかによって、信頼性や速度の特性が大きく変わる。
TCP(信頼性を重視する通信)
TCP(Transmission Control Protocol)は、順序どおりの信頼性のあるバイトストリームをアプリケーションに提供するプロトコルである。ただし、ネットワーク障害などで接続自体が失敗する可能性までなくなるわけではない。
通信を始める前に、送信側と受信側が「これから通信しますよ」「準備できています」という挨拶(3ウェイハンドシェイク)を交わしてから、実際のデータのやり取りを始める。途中でパケットが失われた場合は自動的に再送し、届いた順番がバラバラでも正しい順序に並べ替えてから相手に渡す。
この仕組みのおかげで、TCPは以下のような「1つでも欠けたら困る」通信でよく使われる。
- Webサイトの閲覧(HTTP/1.1、HTTP/2)
- メールの送受信
- ファイルのダウンロード
- チャットのメッセージ送信
UDP(速度を重視する通信)
UDP(User Datagram Protocol)は、TCPのような事前の接続確立や、再送・順序制御をプロトコル自体では行わず、独立したデータグラムを送るプロトコルである。
パケットが途中で失われてもUDP自体は再送せず、届いた順番が入れ替わっていても並べ替えない。その分、ヘッダーや事前手続きの負担は小さい。必要な場合は再送や順序制御をアプリケーション側で設計するが、UDPを使うだけで必ず速くなるわけではない。
この特性から、UDPは以下のような「多少の欠損より速さが大事」な通信でよく使われる。
- オンラインゲームのリアルタイム通信
- 動画・音声のライブ配信
- DNSの問い合わせ(多くの場合UDPが使われる)
- ビデオ通話(WebRTCの一部通信)
TCPとUDPの違いをまとめる
| 項目 | TCP | UDP |
|---|---|---|
| 再送・順序制御 | TCPが行う | UDP自体は行わない |
| 通信の負担 | 接続管理が必要 | 比較的小さい |
| 事前の接続確立 | あり(3ウェイハンドシェイク) | なし |
| 主な用途 | Web閲覧、メール、ファイル転送 | 動画配信、ゲーム、DNS |
ポート番号との関係
TCPとUDPは、どちらもポート番号と組み合わせて使われる。IPアドレスが「どのコンピュータか」を示すのに対し、ポート番号は「そのコンピュータの中のどのアプリか」を示す。
たとえば、HTTP/1.1やHTTP/2のHTTPSは通常TCPの443番ポートを使い、HTTP/3はQUICを通じてUDPの443番ポートを使う。DNSの通常の問い合わせでは主にUDPの53番ポートが使われるが、TCPの53番ポートも使われる。このように、同じポート番号でもTCPとUDPで別々に管理されている。
AIコーディングとの関係
AIにネットワークプログラムやリアルタイム通信の実装を依頼する際、TCPとUDPのどちらを使うべきかを理解していると、より適切な設計を相談しやすくなる。
たとえば、チャットアプリを作る場合は「メッセージの順序と再送が必要なので、信頼性のある通信を使って」と伝え、リアルタイム性が重要なゲームの位置情報通信では「多少のパケットロスは許容するので、UDPベースの通信方式を提案して」のように、要件に応じて指定するとよい。
AIが「なぜこの通信でエラーが起きるのか」を判断する際も、TCPかUDPかという前提を伝えることで、原因の切り分けが早くなる。
よくある勘違い
UDPは信頼性が低いから使うべきではない?
そうとは限らない。UDPはプロトコル自体で再送や順序制御を行わない設計である。ライブ通話やゲームの一部のように、多少のデータ欠損よりも遅延の少なさが重要な場面では、UDPが適していることがある。優劣ではなく、用途による使い分けである。
TCPとUDPは、どちらもHTTPの一種?
違う。TCPとUDPは、HTTPより下の層(トランスポート層)で動くプロトコルであり、HTTPはその上に成り立つアプリケーション層のプロトコルである。HTTP/HTTPSは主にTCPの上で動作するが、近年のHTTP/3はUDPをベースにした「QUIC」という仕組みの上で動作する。
ポート番号を知っていればTCPかUDPかは気にしなくてよい?
そうではない。同じポート番号でも、TCPで待ち受けているかUDPで待ち受けているかはサーバー側の設定次第で異なる。通信がうまくいかないときは、ポート番号だけでなくプロトコルの種類も確認する必要がある。
まとめ
- TCPとUDPは、インターネット上でデータをやり取りするための代表的な2つのプロトコルである。
- TCPは信頼性重視で、再送や順序保証によりデータの欠損を防ぐ。
- UDPは再送や順序制御を自身では行わず、TCPより軽量である。
- Web閲覧やファイル転送はTCP、動画配信やゲームの一部通信はUDPが向いている。
- どちらもポート番号と組み合わせて使われるが、TCPとUDPは別々に管理される。
情報ソース
- RFC 9293 — Transmission Control Protocol (TCP)(英語)
- RFC 768 — User Datagram Protocol(英語)
- RFC 9114 — HTTP/3(英語)
より詳しくAIに聞いてみよう
- TCPの「3ウェイハンドシェイク」の仕組みを、初心者向けに図解イメージで説明してください。
- なぜオンラインゲームやライブ配信ではUDPが使われることが多いのか、具体例つきで教えてください。
- HTTP/3で使われる「QUIC」がUDPをベースにしている理由を教えてください。
- TCPとUDPを使い分ける際、アプリケーション開発でどのように実装方法が変わるか教えてください。
- AIにリアルタイム通信アプリを作ってもらうとき、TCPかUDPかを伝える効果的な指示の出し方を教えてください。