TCPとUDPは、インターネット上でデータを届けるための2種類の通信方式です。TCPはデータが確実に届いたかを確認しながら通信し、UDPは確認なしで高速に送り続けます。この2つが使い分けられているのは、通信の目的によって「確実さ」と「速さ」のどちらを優先すべきかが異なるからです。この記事では、TCPとUDPがなぜ存在するのか・どのように動くのかをわかりやすく解説します。
はじめに
これまでの記事で、データがどのように宛先へ届くかの仕組みを学んできました。IPアドレスで宛先を特定し、ルーターがパケットを転送し、DNSがドメイン名をIPアドレスに変換し、ポート番号でどのサービスへ届けるかを識別する——これらが組み合わさってデータは目的地へ届きます。
しかし、ここで一つ疑問が残ります。「パケットが途中で失われたとき、誰が気づいて対処するのか」です。
たとえば、ファイルをダウンロードしている最中にパケットが1つ失われたとします。失われたデータが補われなければ、ファイルの一部が欠けたまま保存されてしまい、開けなくなるかもしれません。一方、動画を視聴しているときに1フレーム分のデータが失われるたびに「届いていません、再送してください」とやり取りしていては、映像がカクカクして見られたものになりません。
「失われたパケットをどう扱うか」——この問いへの答え方の違いが、TCPとUDPの本質的な違いです。どちらも、パケットをどのように届けるかを定めた「通信の取り決め(プロトコル)」です。
| 用語/英単語 | 意味 | イメージ・補足 |
|---|---|---|
| プロトコル / Protocol | ネットワーク通信における取り決めやルール | 「話しかけるときは敬語を使う」のような会話のルール。TCPとUDPはどちらもプロトコルの一種 |
なぜ2種類の通信方式が必要なのか
ルーターの記事で学んだように、インターネットで送られるデータはパケットに分割されて運ばれます。パケットはルーターを経由しながら転送されますが、ネットワークの混雑や機器の障害などで、途中で失われることが実際に起こります。
このとき「届かなかったパケットをどう扱うか」という問題が生じます。
- 届いたか確認して、届かなければ再送してほしい → TCP
- 確認は不要。とにかく速く送り続けてほしい → UDP
用途によってどちらが適切かが変わるため、2種類が存在します。
TCP ― データを確実に届ける通信
TCP(Transmission Control Protocol) は、データが確実に届いたかを確認しながら通信する方式です。
| 用語/英単語 | 意味 | イメージ・補足 |
|---|---|---|
| TCP / Transmission Control Protocol | データを確実に届けることを重視した通信の取り決め | transmission=伝送 / control=制御 / protocol=取り決め |
確認応答(ACK)と再送の仕組み
TCPでは、パケットを受け取った側が「届きました」という返信を送ります。この返信を ACK(アック) といいます。
送信側は ACK を受け取って初めて「届いた」と判断します。一定時間内に ACK が返ってこなければ、パケットが途中で失われたとみなして 再送 します。
図:スリーウェイハンドシェイクによる接続確立の3ステップ
| 用語/英単語 | 意味 | イメージ・補足 |
|---|---|---|
| ACK / Acknowledgment | パケットを受け取ったことを送信側へ知らせる返信 | 宅配便の「受け取りサイン」のようなもの |
| 再送 | ACK が返ってこなかったパケットを送り直す仕組み | 返事がなければ同じ手紙をもう一度送るイメージ |
通信開始前の「接続確立」― スリーウェイハンドシェイク
TCPはデータを送り始める前に、送信側と受信側が「これから通信します」という確認を3ステップで行います。この手順を スリーウェイハンドシェイク といいます。
図:TCPの送受信の流れ(ACKによる確認と再送)
- 送信側:「通信できますか?」
- 受信側:「できます。あなたも大丈夫ですか?」
- 送信側:「大丈夫です。では始めます」
この3ステップで接続が確立してから、はじめてデータの転送が始まります。
| 用語/英単語 | 意味 | イメージ・補足 |
|---|---|---|
| スリーウェイハンドシェイク / Three-way Handshake | TCPが通信開始前に行う3ステップの接続確立手順 | 電話口で「もしもし」「聞こえますか?」「聞こえます」と確認してから話し始めるようなもの |
TCPが向いている用途
データの完全性が重要な通信に使われます。
- Webサイトの閲覧(HTTP / HTTPS)
- メールの送受信(SMTP・POP3・IMAP)
- ファイルの転送
- リモートログイン(SSH)
これらに共通しているのは、 データが1ビットでも欠けると困る という点です。Webページを構成するHTML・CSS・画像データが一部欠けると表示が崩れ、ファイルが途中で欠けると開けなくなります。メールの文章が一部失われると意味が変わってしまうこともあります。確実に届けるTCPが選ばれる理由はここにあります。
UDP ― 速さを優先する通信
UDP(User Datagram Protocol) は、確認なしでパケットを送り続ける通信方式です。
| 用語/英単語 | 意味 | イメージ・補足 |
|---|---|---|
| UDP / User Datagram Protocol | 速さを優先した通信の取り決め。確認なしでデータを送る | datagram=個々の独立したデータのかたまり |
確認しないから速い
UDPは ACK を送りません。送信側はパケットを送り出したら、届いたかどうか確認せずに次のパケットを送り続けます。ACK を待つ時間がないぶん、TCPより大幅に遅延を抑えて通信できます。
図:UDPの送信の流れ(確認なしで次々と送り続ける)
少し欠けても問題ない通信に向いている
動画ストリーミングや音声通話では、パケットが1つ2つ届かなくても大きな問題にはなりません。映像が一瞬乱れる程度で会話の流れは成立します。しかし、ACK を待ちながら通信するとリアルタイム性が失われ、会話が途切れ途切れになってしまいます。
DNS の記事で学んだ名前解決も UDP を使っています。問い合わせと応答が非常に小さく1回の送受信で完結するため、確認の手間をかけるより速く応答することが優先されるからです。
UDPが向いている用途
- 動画ストリーミング(YouTube など)
- 音声・ビデオ通話(Zoom などの VoIP)
- オンラインゲーム
- DNS(名前解決)
TCPとUDPの比較
| TCP | UDP | |
|---|---|---|
| 確認応答(ACK) | あり | なし |
| 再送 | あり(届かなければ再送) | なし |
| 接続確立 | 必要(スリーウェイハンドシェイク) | 不要 |
| 速度 | 比較的遅い | 速い |
| 信頼性 | 高い | 低い |
| 主な用途 | Web・メール・ファイル転送 | 動画・音声通話・DNS |
ポート番号との関係
ポート番号の記事で学んだポート番号は、TCPとUDPの両方で使われます。「TCP 80番」はTCPを使った80番ポートへの通信、「UDP 53番」はUDPを使った53番ポートへの通信を意味します。
ポート番号はTCPとUDPそれぞれに0〜65535が独立して用意されています。「TCP の80番」と「UDP の80番」は、番号は同じでも別々の窓口として扱われます。
身近な例を挙げると、DNS の記事で学んだ名前解決には通常 UDP の53番ポート が使われます。問い合わせと応答が小さく1回の送受信で完結するため、速さを優先してUDPが選ばれています。しかし応答データが大きくなる場合は、同じ53番でも TCP の53番ポート に切り替わります。同じポート番号をTCPとUDPで使い分けられるのは、2つが独立した窓口だからです。
まとめ
- TCP は確認応答(ACK)と再送の仕組みを持ち、データを確実に届ける
- UDP は確認なしで送り続け、速さを優先する
- TCPは通信開始前に スリーウェイハンドシェイク で接続を確立してからデータを送る
- データの完全性が重要な通信(Web・メール・ファイル転送など)には TCP
- リアルタイム性が重要な通信(動画・音声通話・DNS など)には UDP
- どちらもポート番号と組み合わせて使われる
用語表
| 用語 | 意味 |
|---|---|
| プロトコル | ネットワーク通信における取り決めやルールのこと。TCPとUDPはどちらもプロトコルの一種 |
| TCP(Transmission Control Protocol) | データを確実に届けることを重視した通信の取り決め。確認応答と再送の仕組みを持つ |
| UDP(User Datagram Protocol) | 速さを優先した通信の取り決め。確認なしでパケットを送り続ける |
| ACK(Acknowledgment) | パケットを受け取ったことを送信側へ知らせる返信。TCPで使われる |
| 再送 | ACKが返ってこなかったパケットを送り直す仕組み。TCPの信頼性を支える |
| スリーウェイハンドシェイク | TCPが通信開始前に行う3ステップの接続確立手順 |