最終更新
リンドくん
たなべ先生、インターネットで通信するときに「TCP」とか「UDP」って聞くんですけど、これって何が違うんですか?
たなべ
簡単に言うと、TCPは確実に届けることを重視した通信方式で、UDPは速さを重視した通信方式なんだ。それぞれに得意な場面があるんだよ。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
インターネットでデータをやり取りする際、私たちが普段意識することはありませんが、裏側では「どうやってデータを届けるか」という重要な仕組みが働いています。
その中心となるのがTCP(Transmission Control Protocol)とUDP(User Datagram Protocol)という2つの通信プロトコルです。
これらは、どちらもインターネット通信の基盤となるTCP/IPプロトコル群に属していますが、データの送り方や信頼性に大きな違いがあります。
例えば、Webページを見るとき、動画を再生するとき、オンラインゲームをプレイするとき。それぞれの場面で、TCPとUDPは異なる役割を果たしているのです。
この記事では、ネットワークを学び始めた方でも理解できるよう、TCPとUDPの違いを基礎から丁寧に解説していきます。
リンドくん
まずTCPから教えてください。どんな特徴があるんですか?
たなべ
TCPはコネクション型通信と呼ばれる方式なんだ。
電話をかけるときに「もしもし」って確認してから話し始めるように、通信する前に相手との接続を確立してから、データを送るんだよ。
TCP(Transmission Control Protocol)は、信頼性の高い通信を実現するためのプロトコルです。その最大の特徴は、データが確実に相手に届くことを保証する点にあります。
TCPの主な特徴は以下の通りです。
TCPで通信を始める際には、スリーウェイハンドシェイクという手順を踏みます。これは、通信を始める前の「挨拶」のようなものです。
この3段階の手順を経て、初めてデータの送信が開始されます。電話をかけるときに「もしもし」「はい、もしもし」「聞こえますか?」「はい、聞こえます」とやり取りするのに似ていますね。
TCPがデータの到達を保証できる理由は、いくつかの仕組みが組み合わさっているからです。
確認応答(ACK)データを受け取った側は、必ず「受け取りました」という確認応答を返します。もし一定時間内に確認応答が返ってこなければ、送信側は「データが届いていない」と判断して、自動的に再送信します。
シーケンス番号
送信するデータには順番を示す番号が付けられます。これにより、受信側はデータが正しい順序で届いているかを確認でき、もし順番が入れ替わっていても正しく並び替えることができます。
チェックサム
データが通信中に壊れていないかを検証するための仕組みです。もしデータが破損していることが検出されれば、再送信が要求されます。
このように、TCPは複数の仕組みを組み合わせることで、データが確実に、正しい順序で、壊れることなく届くことを保証しているのです。
リンドくん
じゃあUDPはどうなんですか?TCPとは違うんですよね?
たなべ
そう!UDPはコネクションレス型通信と呼ばれる方式なんだ。
はがきを送るように、相手との事前確認なしにデータをポンと送るイメージだよ。
UDP(User Datagram Protocol)は、シンプルで高速な通信を実現するためのプロトコルです。TCPとは対照的に、信頼性よりも速度を重視した設計になっています。
UDPの主な特徴は以下の通りです。
UDPを理解するには、「はがき」に例えるとわかりやすいでしょう。
はがきを送るとき、私たちは相手に「今からはがきを送りますよ」と事前に連絡したりしませんよね。ただ住所を書いて、ポストに投函するだけです。そして、相手に届いたかどうかも確認しません。
UDPも同じように、データに宛先の情報を付けて、そのまま送り出すだけです。届いたかどうかの確認も、届く順序の保証もありません。その代わり、非常にシンプルで高速な通信が可能になります。
UDPのデータ(データグラム)は非常にシンプルな構造をしています。
含まれる情報は以下の通りです。
TCPと比べると、確認応答やシーケンス番号などの制御情報がないため、ヘッダー(制御情報部分)が非常に小さくなっています。これが高速通信を可能にする理由の一つです。
UDPが高速な理由は以下の点にあります。
ただし、これらの特徴は「信頼性を犠牲にして速度を得る」というトレードオフの結果であることを理解しておく必要があります。
リンドくん
なるほど。つまりTCPは確実だけど遅くて、UDPは速いけど不確実ってことですか?
たなべ
その理解で基本的には正解だよ!
それぞれの特徴を表にまとめてみると、違いがよりはっきりするね。
TCPとUDPの違いを整理してみましょう。
接続方式
信頼性
速度
データの順序
再送制御
ヘッダーサイズ
通信確立
TCPとUDPの違いを一言で表すなら、信頼性と速度のトレードオフと言えるでしょう。
TCPは確実性を重視するため、以下のような「コスト」を払っています。
一方、UDPは速度を重視するため、以下を「犠牲」にしています。
どちらが優れているというわけではなく、用途に応じて適切な方を選ぶことが重要なのです。
選択の基準は、以下のような観点で考えると良いでしょう。
TCPを選ぶべき場合
UDPを選ぶべき場合
実際のアプリケーション開発では、これらの特性を理解した上で、目的に最適なプロトコルを選択することが求められます。
リンドくん
実際にはどんな場面でそれぞれが使われているんですか?
たなべ
身近なところでたくさん使われているよ!
普段何気なく使っているサービスの裏側では、TCPとUDPがそれぞれの特性を活かして活躍しているんだ。
TCPは、データの確実性が求められる場面で広く使用されています。
Webページを表示するとき、HTMLファイルや画像、CSSファイルなどを正確に取得する必要があります。もし一部のデータが欠けたら、ページが正しく表示されませんよね。そのため、WebブラウジングにはTCPが使われています。
ブラウザのアドレスバーにhttps://と表示されているとき、その裏ではTCPによる確実な通信が行われているのです。
メールは重要な情報を含むことが多いため、確実に届く必要があります。送信したメールの一部が欠けていたら、意味が通じなくなってしまいますよね。そのため、メールの送受信にはTCPが使用されます。
ファイルをダウンロードやアップロードする際、データが欠けていたらファイルが壊れてしまいます。特に実行ファイルやドキュメントなど、完全性が重要なファイルの転送には、TCPの確実性が不可欠です。
サーバーにリモートでログインして操作する際、入力したコマンドが正確に伝わらないと大変なことになります。そのため、SSHでもTCPが使用されます。
UDPは、リアルタイム性や速度が重視される場面で活躍します。
YouTubeやNetflixなどの動画配信、音楽ストリーミングサービスでは、UDPがよく使われます(実際にはRTPというUDPベースのプロトコル)。
動画や音声では、多少のデータ欠落があっても人間の目や耳では気づきにくいものです。それよりも、リアルタイムで途切れなく再生されることの方が重要ですよね。もしTCPを使っていたら、データの再送を待つ間に映像が止まってしまいます。
リアルタイム性が重要なオンラインゲーム、特にFPSやアクションゲームでは、UDPが多く使われます。
例えば、自分のキャラクターの位置情報を送るとき、0.1秒前の位置が確実に届くより、最新の位置がすぐに届く方が重要です。多少データが失われても、次のデータですぐに更新されるため、問題になりにくいのです。
SkypeやZoomなどのビデオ通話、音声通話では、UDPが使用されることが多いです。
会話では、リアルタイム性が非常に重要です。相手の声が0.5秒遅れて届くより、多少音質が劣化しても即座に届く方が、自然な会話ができますよね。
WebサイトのURLからIPアドレスを調べるDNSクエリには、UDPが使われます。
DNSクエリは非常に小さなデータで、応答も高速です。わざわざ接続を確立するTCPを使うより、UDPでサクッと問い合わせる方が効率的なのです。もし応答がなければ、再度問い合わせれば良いだけです。
実は、TCPとUDPの両方を組み合わせて使うアプリケーションも存在します。
例えば、オンラインゲームでは以下のような使い分けをすることがあります。
このように、それぞれの長所を活かして組み合わせることで、より効率的な通信を実現しているのです。
リンドくん
TCPとUDPの違い、よくわかりました!どちらも大事なんですね。
たなべ
その通り!どちらが優れているというわけじゃなくて、用途に応じて適切に選ぶことが重要なんだ。
ネットワークエンジニアを目指すなら、この違いをしっかり理解しておくことが大切だよ。
この記事では、インターネット通信の基盤となるTCPとUDPの違いについて解説してきました。
重要なポイントをおさらいしましょう。
ネットワークの学習を進めていく中で、TCPとUDPの違いを理解することは、プロトコルの選択やトラブルシューティングにおいて非常に役立ちます。
例えば、アプリケーション開発でネットワーク機能を実装する際、どちらのプロトコルを使うべきか判断できるようになります。
また、ネットワークのパフォーマンスに問題がある場合、プロトコルの特性を理解していれば、原因の特定や解決策の立案がスムーズになるでしょう。
今回学んだ内容は、さらに深いネットワーク技術を学ぶための重要な基礎となります。ぜひ実際のアプリケーションを使いながら、「これはTCPかな?UDPかな?」と考えてみてください。