フリーキーズ | 独学プログラミング

TCPとUDPの違いを初心者にもわかりやすく解説!コネクション方式と用途を比較

リンドくん

リンドくん

たなべ先生、インターネットで通信するときに「TCP」とか「UDP」って聞くんですけど、これって何が違うんですか?

たなべ

たなべ

簡単に言うと、TCPは確実に届けることを重視した通信方式で、UDPは速さを重視した通信方式なんだ。それぞれに得意な場面があるんだよ。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

インターネット通信を支える2つの方式

インターネットでデータをやり取りする際、私たちが普段意識することはありませんが、裏側では「どうやってデータを届けるか」という重要な仕組みが働いています。
その中心となるのがTCP(Transmission Control Protocol)UDP(User Datagram Protocol)という2つの通信プロトコルです。

これらは、どちらもインターネット通信の基盤となるTCP/IPプロトコル群に属していますが、データの送り方や信頼性に大きな違いがあります。

例えば、Webページを見るとき、動画を再生するとき、オンラインゲームをプレイするとき。それぞれの場面で、TCPとUDPは異なる役割を果たしているのです。
この記事では、ネットワークを学び始めた方でも理解できるよう、TCPとUDPの違いを基礎から丁寧に解説していきます。

TCPとは?確実な通信を実現する仕組み

リンドくん

リンドくん

まずTCPから教えてください。どんな特徴があるんですか?

たなべ

たなべ

TCPはコネクション型通信と呼ばれる方式なんだ。
電話をかけるときに「もしもし」って確認してから話し始めるように、通信する前に相手との接続を確立してから、データを送るんだよ。

TCPの基本的な仕組み

TCP(Transmission Control Protocol)は、信頼性の高い通信を実現するためのプロトコルです。その最大の特徴は、データが確実に相手に届くことを保証する点にあります。

TCPの主な特徴は以下の通りです。

  • コネクション型通信 - データを送る前に、送信側と受信側で接続を確立します
  • データの到達保証 - データが確実に相手に届いたかを確認します
  • 順序の保証 - 送信した順番通りにデータが届くことを保証します
  • 再送制御 - データが失われた場合、自動的に再送信します
  • フロー制御 - 受信側の処理能力に合わせて送信速度を調整します

スリーウェイハンドシェイク

TCPで通信を始める際には、スリーウェイハンドシェイクという手順を踏みます。これは、通信を始める前の「挨拶」のようなものです。

  1. SYN(同期) - 送信側が「通信したいです」と要求を送る
  2. SYN-ACK(同期-確認応答) - 受信側が「わかりました、準備OKです」と応答する
  3. ACK(確認応答) - 送信側が「了解しました、では始めます」と返答する

この3段階の手順を経て、初めてデータの送信が開始されます。電話をかけるときに「もしもし」「はい、もしもし」「聞こえますか?」「はい、聞こえます」とやり取りするのに似ていますね。

TCPの信頼性を支える仕組み

TCPがデータの到達を保証できる理由は、いくつかの仕組みが組み合わさっているからです。

確認応答(ACK)

データを受け取った側は、必ず「受け取りました」という確認応答を返します。もし一定時間内に確認応答が返ってこなければ、送信側は「データが届いていない」と判断して、自動的に再送信します。

シーケンス番号

送信するデータには順番を示す番号が付けられます。これにより、受信側はデータが正しい順序で届いているかを確認でき、もし順番が入れ替わっていても正しく並び替えることができます。

チェックサム

データが通信中に壊れていないかを検証するための仕組みです。もしデータが破損していることが検出されれば、再送信が要求されます。

このように、TCPは複数の仕組みを組み合わせることで、データが確実に、正しい順序で、壊れることなく届くことを保証しているのです。

UDPとは?高速通信を実現する仕組み

リンドくん

リンドくん

じゃあUDPはどうなんですか?TCPとは違うんですよね?

たなべ

たなべ

そう!UDPはコネクションレス型通信と呼ばれる方式なんだ。
はがきを送るように、相手との事前確認なしにデータをポンと送るイメージだよ。

UDPの基本的な仕組み

UDP(User Datagram Protocol)は、シンプルで高速な通信を実現するためのプロトコルです。TCPとは対照的に、信頼性よりも速度を重視した設計になっています。

UDPの主な特徴は以下の通りです。

  • コネクションレス型通信 - 事前の接続確立なしにデータを送信できます
  • 到達保証なし - データが届いたかどうかの確認を行いません
  • 順序保証なし - 送信順序通りに届く保証はありません
  • 再送制御なし - データが失われても再送信しません
  • オーバーヘッドが小さい - 制御情報が少ないため、高速です

はがきのような通信方式

UDPを理解するには、「はがき」に例えるとわかりやすいでしょう。

はがきを送るとき、私たちは相手に「今からはがきを送りますよ」と事前に連絡したりしませんよね。ただ住所を書いて、ポストに投函するだけです。そして、相手に届いたかどうかも確認しません。

UDPも同じように、データに宛先の情報を付けて、そのまま送り出すだけです。届いたかどうかの確認も、届く順序の保証もありません。その代わり、非常にシンプルで高速な通信が可能になります。

UDPのシンプルな構造

UDPのデータ(データグラム)は非常にシンプルな構造をしています。

含まれる情報は以下の通りです。

  • 送信元ポート番号 - どのアプリケーションから送られたか
  • 宛先ポート番号 - どのアプリケーションに送るか
  • データ長 - データのサイズ
  • チェックサム - データの整合性チェック用(オプション)
  • データ本体 - 実際に送りたい情報

TCPと比べると、確認応答やシーケンス番号などの制御情報がないため、ヘッダー(制御情報部分)が非常に小さくなっています。これが高速通信を可能にする理由の一つです。

UDPが速い理由

UDPが高速な理由は以下の点にあります。

  • 接続確立の手順がない - すぐにデータ送信を開始できます
  • 確認応答を待たない - 一方的に送り続けられます
  • 制御情報が少ない - データのオーバーヘッドが小さいです
  • 処理がシンプル - 複雑な制御をしないため、処理が軽いです

ただし、これらの特徴は「信頼性を犠牲にして速度を得る」というトレードオフの結果であることを理解しておく必要があります。

TCPとUDPの違いを比較してみよう

リンドくん

リンドくん

なるほど。つまりTCPは確実だけど遅くて、UDPは速いけど不確実ってことですか?

たなべ

たなべ

その理解で基本的には正解だよ!
それぞれの特徴を表にまとめてみると、違いがよりはっきりするね。

主要な違いの比較表

TCPとUDPの違いを整理してみましょう。

接続方式

  • TCP: コネクション型(事前に接続確立が必要)
  • UDP: コネクションレス型(すぐに送信開始)

信頼性

  • TCP: 高い(到達保証、順序保証あり)
  • UDP: 低い(保証なし)

速度

  • TCP: 比較的遅い(制御のオーバーヘッドがある)
  • UDP: 高速(シンプルな処理)

データの順序

  • TCP: 保証される(送信順に届く)
  • UDP: 保証されない(順不同で届く可能性)

再送制御

  • TCP: あり(失われたデータを自動再送)
  • UDP: なし(失われたら失われたまま)

ヘッダーサイズ

  • TCP: 20バイト以上(制御情報が多い)
  • UDP: 8バイト(制御情報が少ない)

通信確立

  • TCP: スリーウェイハンドシェイク(3段階の手順)
  • UDP: 不要(すぐに送信可能)

信頼性と速度のトレードオフ

TCPとUDPの違いを一言で表すなら、信頼性と速度のトレードオフと言えるでしょう。

TCPは確実性を重視するため、以下のような「コスト」を払っています。

  • 接続確立に時間がかかる
  • 確認応答を待つ時間が発生する
  • 再送制御で遅延が増える可能性がある
  • 制御情報で通信量が増える

一方、UDPは速度を重視するため、以下を「犠牲」にしています。

  • データの到達保証がない
  • 順序が入れ替わる可能性がある
  • データが失われても気づかない
  • アプリケーション側で制御が必要

どちらが優れているというわけではなく、用途に応じて適切な方を選ぶことが重要なのです。

どちらを選ぶべきか?

選択の基準は、以下のような観点で考えると良いでしょう。

TCPを選ぶべき場合

  • データの欠落が許されない(ファイル転送、メールなど)
  • データの順序が重要(テキストメッセージ、HTMLなど)
  • 確実性が速度より重要(金融取引、重要な情報など)

UDPを選ぶべき場合

  • リアルタイム性が重要(音声通話、動画配信など)
  • 多少のデータ欠落は許容できる(ストリーミング、ゲームなど)
  • 速度が確実性より重要(DNSクエリ、センサーデータなど)

実際のアプリケーション開発では、これらの特性を理解した上で、目的に最適なプロトコルを選択することが求められます。

TCPとUDPの実際の用途

リンドくん

リンドくん

実際にはどんな場面でそれぞれが使われているんですか?

たなべ

たなべ

身近なところでたくさん使われているよ!
普段何気なく使っているサービスの裏側では、TCPとUDPがそれぞれの特性を活かして活躍しているんだ。

TCPが使われる主な場面

TCPは、データの確実性が求められる場面で広く使用されています。

Webブラウジング(HTTP/HTTPS)

Webページを表示するとき、HTMLファイルや画像、CSSファイルなどを正確に取得する必要があります。もし一部のデータが欠けたら、ページが正しく表示されませんよね。そのため、WebブラウジングにはTCPが使われています。

ブラウザのアドレスバーにhttps://と表示されているとき、その裏ではTCPによる確実な通信が行われているのです。

メール送受信(SMTP、POP3、IMAP)

メールは重要な情報を含むことが多いため、確実に届く必要があります。送信したメールの一部が欠けていたら、意味が通じなくなってしまいますよね。そのため、メールの送受信にはTCPが使用されます。

ファイル転送(FTP、SFTP)

ファイルをダウンロードやアップロードする際、データが欠けていたらファイルが壊れてしまいます。特に実行ファイルやドキュメントなど、完全性が重要なファイルの転送には、TCPの確実性が不可欠です。

SSH(リモートログイン)

サーバーにリモートでログインして操作する際、入力したコマンドが正確に伝わらないと大変なことになります。そのため、SSHでもTCPが使用されます。

UDPが使われる主な場面

UDPは、リアルタイム性や速度が重視される場面で活躍します。

動画・音声のストリーミング配信

YouTubeやNetflixなどの動画配信、音楽ストリーミングサービスでは、UDPがよく使われます(実際にはRTPというUDPベースのプロトコル)。

動画や音声では、多少のデータ欠落があっても人間の目や耳では気づきにくいものです。それよりも、リアルタイムで途切れなく再生されることの方が重要ですよね。もしTCPを使っていたら、データの再送を待つ間に映像が止まってしまいます。

オンラインゲーム

リアルタイム性が重要なオンラインゲーム、特にFPSやアクションゲームでは、UDPが多く使われます。

例えば、自分のキャラクターの位置情報を送るとき、0.1秒前の位置が確実に届くより、最新の位置がすぐに届く方が重要です。多少データが失われても、次のデータですぐに更新されるため、問題になりにくいのです。

VoIP(インターネット電話)

SkypeやZoomなどのビデオ通話、音声通話では、UDPが使用されることが多いです。

会話では、リアルタイム性が非常に重要です。相手の声が0.5秒遅れて届くより、多少音質が劣化しても即座に届く方が、自然な会話ができますよね。

DNS(ドメイン名解決)

WebサイトのURLからIPアドレスを調べるDNSクエリには、UDPが使われます。

DNSクエリは非常に小さなデータで、応答も高速です。わざわざ接続を確立するTCPを使うより、UDPでサクッと問い合わせる方が効率的なのです。もし応答がなければ、再度問い合わせれば良いだけです。

ハイブリッド方式も存在する

実は、TCPとUDPの両方を組み合わせて使うアプリケーションも存在します。

例えば、オンラインゲームでは以下のような使い分けをすることがあります。

  • 重要な情報(ログイン認証、アイテム購入など) → TCP
  • リアルタイムな位置情報、動作情報 → UDP

このように、それぞれの長所を活かして組み合わせることで、より効率的な通信を実現しているのです。

まとめ

リンドくん

リンドくん

TCPとUDPの違い、よくわかりました!どちらも大事なんですね。

たなべ

たなべ

その通り!どちらが優れているというわけじゃなくて、用途に応じて適切に選ぶことが重要なんだ。
ネットワークエンジニアを目指すなら、この違いをしっかり理解しておくことが大切だよ。

この記事では、インターネット通信の基盤となるTCPとUDPの違いについて解説してきました。

重要なポイントをおさらいしましょう。

  • TCPは信頼性重視のコネクション型通信で、データの到達保証や順序保証がある
  • UDPは速度重視のコネクションレス型通信で、シンプルで高速だが保証はない
  • TCPはWebブラウジング、メール、ファイル転送など、確実性が必要な場面で使われる
  • UDPは動画配信、オンラインゲーム、音声通話など、リアルタイム性が重要な場面で使われる
  • どちらが優れているわけではなく、目的に応じて適切に選ぶことが重要

ネットワークの学習を進めていく中で、TCPとUDPの違いを理解することは、プロトコルの選択やトラブルシューティングにおいて非常に役立ちます。

例えば、アプリケーション開発でネットワーク機能を実装する際、どちらのプロトコルを使うべきか判断できるようになります。
また、ネットワークのパフォーマンスに問題がある場合、プロトコルの特性を理解していれば、原因の特定や解決策の立案がスムーズになるでしょう。

今回学んだ内容は、さらに深いネットワーク技術を学ぶための重要な基礎となります。ぜひ実際のアプリケーションを使いながら、「これはTCPかな?UDPかな?」と考えてみてください。

この記事をシェア

関連するコンテンツ