KAKUTA TECH BLOG

Blog Article

TCP / IPとは?階層構造を説明 / TCPとUDPの違い

はじめに

Web ブラウザで Web サイトを開くと、ブラウザと Web サーバーの間でさまざまな通信が行われます。例えば、ブラウザに https://example.com と入力すると、ブラウザはサーバーに「この Web ページをください」と要求し、サーバーはその要求に応じて HTML などのデータを返します。

このとき、「ブラウザからサーバーへデータを送る」という処理だけを見ると、単純なやり取りに見えます。しかし、実際には HTTP、TCP、IP など、役割の異なる複数のプロトコルが組み合わさって通信しています。

ここで重要なのが、HTTP と TCP / IP は同じ種類のルールではないということです。どちらも通信に関するプロトコルですが、担当している役割が異なります。

この記事では、HTTP、TCP、IP がそれぞれどのような役割を持っているのかを、Web ブラウザと Web サーバーの通信を例にしながら分かりやすく説明します。

参考にしたリンク

TCP / IP は何をするためのものなのか

一言でいうと、TCP / IP は、コンピューター同士がネットワークを通じてデータをやり取りするための基本的な仕組みです。

ここでいう「TCP / IP」は、単純に 2 つのプロトコルだけを指している場合もありますが、一般的には TCP や IP を中心とした、複数のプロトコルによって構成されるネットワーク通信の仕組み全体を指す言葉として使われます。

まず、Web ブラウザで Web サイトを見る場面を考えてみましょう。

ブラウザからサーバーに Web ページを要求するとき、ブラウザはサーバーに対して HTTP のルールに従った要求を送ります。例えば、「このページを取得したい」という内容を HTTP のメッセージとして表現します。

しかし、HTTP のメッセージを作っただけでは、それだけで遠くにあるサーバーへ届くわけではありません。

例えば、東京にあるブラウザから大阪にあるサーバーへデータを送るとします。このとき、コンピューターは「どこにデータを届けるのか」を判断し、ネットワーク上にある複数の機器を経由しながらデータを目的地まで運ぶ必要があります。

そこで IP が関係してきます。IP は、通信相手を IP アドレスによって識別し、ネットワーク上でデータをどの宛先へ送るのかを扱います。

さらに、データを送るだけではなく、「送ったデータが正しく届いているか」「途中でデータが失われた場合はどうするか」といった通信の信頼性も考える必要があります。そこで TCP が関係します。

このように考えると、HTTP、TCP、IP はそれぞれ別の仕事をしていることが分かります。

Web 通信では、大まかに次のような関係になっています。

ブラウザ
  ↓
HTTP
  ↓
TCP
  ↓
IP
  ↓
ネットワーク
  ↓
IP
  ↓
TCP
  ↓
HTTP
  ↓
Web サーバー

この図は、HTTP、TCP、IP が完全に独立して順番に実行されるという意味ではありません。実際の通信では、各層がそれぞれの役割を担当しながら組み合わさってデータを送受信します。

重要なのは、HTTP が Web の通信内容を担当し、その下に TCP や IP などの仕組みが存在しているという関係を理解することです。

TCP / IP と HTTP は何が違うのか

「TCP / IP も通信のルールで、HTTP も通信のルールなら、結局同じものなのではないか」と疑問に思うかもしれません。

結論からいうと、どちらもプロトコルですが、担当する範囲と役割が違います。

プロトコルとは、コンピューター同士が通信するときに従うルールのことです。人間同士が会話するときに言葉や順番などのルールが必要なのと同じように、コンピューター同士が通信するときにも「どのような形式でデータを送るのか」「どこに送るのか」「データをどのように扱うのか」といったルールが必要になります。

HTTP は、その中でも Web に関する通信を担当します。

例えばブラウザがサーバーに Web ページを要求するとき、「このリソースを取得したい」という要求を HTTP のルールに従って表現します。サーバー側も HTTP のルールに従って、その結果をレスポンスとして返します。MDN でも HTTP はアプリケーション層のプロトコルであり、クライアントとサーバーがリクエストとレスポンスを交換するための仕組みとして説明されています。

一方、TCP は Web ページそのものについて知っているわけではありません。

TCP が担当しているのは、例えば通信相手との接続を管理したり、データを順序どおりに扱ったり、データが失われた場合に再送したりすることです。TCP は Web 専用のプロトコルではありません。HTTP 以外の通信でも TCP が利用されることがあります。

IP はさらに別の役割を担当します。IP は「このデータをどの IP アドレスの相手に届けるのか」というネットワーク上の宛先を扱います。

そのため、次のように考えると整理しやすくなります。

プロトコル

主な役割

Web 通信でのイメージ

HTTP

Web のデータをどのように要求・応答するか

「この Web ページをください」

TCP

データを信頼性を持ってやり取りする

「データを順番どおり、できるだけ確実に届ける」

IP

データをどの宛先へ送るかを扱う

「この IP アドレスへ届ける」

つまり、HTTP と TCP / IP は「どちらが上か下か」という単純な比較をするものではなく、同じ通信の中で異なる役割を担当していると考えると理解しやすくなります。

TCP (Transmission Control Protocol)

TCP は、コンピューター同士がデータをやり取りするときに、データを正しい順番で、できるだけ確実に届けるためのプロトコルです。

主に次のような役割があります。

  • データを通信しやすい大きさに分けて送ります。
  • 分けて送ったデータを、受信側で正しい順番に並べられるように管理します。
  • データが途中で失われた場合などに、必要に応じて再送します。

例えば、ブラウザから Web サーバーへデータを送る場合、途中でデータが失われると、サーバーは正しいデータを受け取れません。TCP はこのような問題に対応し、データを正しくやり取りできるように通信を管理します。

つまり、TCP は 「データを相手にきちんと届けるための通信の管理役」 と考えると分かりやすいです。

IP (Internet Protocol)

IP は、ネットワーク上でデータをどのコンピューターへ届けるのかを扱うプロトコルです。

主に次のような役割があります。

  • 通信するコンピューターを IP アドレスによって識別します。
  • データの宛先となる IP アドレスを指定します。
  • ネットワーク上でデータを宛先へ届けるための仕組みに関わります。

例えば、ブラウザから Web サーバーへデータを送る場合、IP は「このデータをどの IP アドレスのコンピューターへ送るのか」を扱います。

ただし、IP はデータが正しく届いたかどうかを保証する役割ではありません。「どこへ届けるのか」を IP が担当し、「データを正しくやり取りできるように通信を管理する」のが TCP という役割分担になっています。

TCP / IP はどこの話なのか

ここで、もう一つ重要な疑問があります。「TCP / IP は、ブラウザとサーバーの間の話なのか」という疑問です。

Web サイトを表示する場面を考えるのであれば、ブラウザと Web サーバーの間で行われる通信を支える仕組みの一部と考えて問題ありません。ただし、TCP / IP は Web 専用ではありません。

例えば、ブラウザから Web サーバーへアクセスするときだけでなく、ネットワーク上のさまざまなコンピューターやサーバーなどがデータを通信するときにも利用されます。そのため、「TCP / IP = ブラウザとサーバーが通信するときだけ使うもの」と覚えるのは正確ではありません。

より正確には、TCP / IP はネットワーク上でコンピューター同士が通信するための基本的な仕組みであり、Web ブラウザと Web サーバーの通信もその上で行われていると理解するのがよいでしょう。

また、実際の Web 通信では、ブラウザとサーバーが直接 1 本のケーブルでつながっているわけではありません。途中にはルーターなどのネットワーク機器が存在し、データは複数のネットワークを経由して目的のサーバーへ向かいます。MDN も、ブラウザとサーバーの間にはルーターやモデムなど複数の機器が存在し、ネットワーク層やトランスポート層などの仕組みによって通信が行われることを説明しています。

例えば、自分のパソコンで Web サイトを開く場合を考えてみます。

自分のパソコン
  │
  │ HTTP
  ↓
TCP
  ↓
IP
  ↓
ルーター
  ↓
インターネット
  ↓
ルーター
  ↓
IP
  ↓
TCP
  ↓
HTTP
  ↓
Web サーバー

実際にはもっと多くの機器や仕組みが関係する可能性がありますが、初学者の段階では、このようなイメージを持っておくとよいでしょう。

つまり、TCP / IP は「ブラウザの中にある機能」や「サーバーの中にある Web ページの機能」というよりも、ブラウザやサーバーなどのコンピューターがネットワークを通じて通信するとき、その通信を成立させるための仕組みです。

Web ページを表示するとき HTTP、TCP、IP はどう連携するのか

ここまでの説明だけでは、それぞれの役割が分かっても、実際の通信でどのようにつながっているのかがまだ分かりにくいかもしれません。そこで、ブラウザで Web ページを開く具体的な流れを見てみましょう。

例えば、ユーザーがブラウザに https://example.com と入力して Web サイトを開いたとします。

まずブラウザは、Web サーバーと HTTP による通信を行う必要があります。

HTTP では、クライアントがサーバーへリクエストを送り、サーバーがレスポンスを返すという形で通信します。

ブラウザが「この Web ページを取得したい」という HTTP のリクエストを作成すると、そのデータは下の通信処理へ渡されます。

そこで TCP が関係します。TCP は、アプリケーションが扱っているデータをネットワーク上で信頼性を持って送受信するための通信を管理します。

その次に IP が関係します。IP は、データをどの IP アドレスの相手へ送るのかを扱います。

その後、データはネットワークを通ってサーバー側へ到達します。

サーバー側では、受け取ったデータを TCP が扱い、その上にある HTTP の処理へ渡します。HTTP の処理によって、「このリクエストは Web ページを要求している」と解釈され、サーバーは HTTP のレスポンスを作成します。

そのレスポンスも、同じようにネットワークを通ってブラウザへ戻ってきます。

この流れを非常に単純化すると、

【ブラウザ側】

「Web ページがほしい」
        ↓
HTTP でリクエストを作る
        ↓
TCP が通信を管理する
        ↓
IP が宛先を扱う
        ↓
ネットワークを通る
        ↓
【サーバー側】

IP がデータを受け取る
        ↓
TCP がデータを扱う
        ↓
HTTP がリクエストを解釈する
        ↓
Web ページのデータを返す

という流れになります。ここで大切なのは、HTTP、TCP、IP がそれぞれ別々の通信をしているわけではないということです。

同じデータの通信を、それぞれ異なる役割から支えていると考えてください。

HTTP は「Web の要求や応答」を担当し、TCP は「データを信頼性を持って届けるための通信」を担当し、IP は「ネットワーク上の宛先へデータを届けるための仕組み」を担当します。

このように役割を分けることで、HTTP はネットワーク上の細かな配送処理をすべて自分で実装する必要がありません。HTTP は Web に必要なルールに集中でき、その下の TCP や IP が通信を支えます。

これが、ネットワーク通信を階層に分けて考える大きな理由の一つです。

まとめ

ここまでの内容をまとめると、最初に出てきた「TCP / IP と HTTP は違うものなのか」という疑問への答えは、はい、違うものです。ただし、Web 通信では互いに組み合わせて利用されますとなります。

HTTP は、Web ブラウザと Web サーバーが Web のデータをやり取りするためのプロトコルです。

TCP は、その HTTP などのデータをネットワーク上で信頼性を持って送受信するためのプロトコルです。

IP は、そのデータをネットワーク上の適切な宛先へ届けるためのプロトコルです。

したがって、Web サイトを表示するときには、

HTTP
「どんな Web データを要求・応答するのか」

        ↓

TCP
「そのデータをどうやって信頼性を持って通信するのか」

        ↓

IP
「そのデータをどのネットワーク上の宛先へ届けるのか」

という役割分担があると考えると理解しやすくなります。

なお、現代の Web ではすべての HTTP 通信が必ず TCP を使用するわけではありません。HTTP/3 は QUIC を使用し、QUIC は UDP をベースとしています。そのため、「HTTP は必ず TCP の上で動く」と断定するのは現在では正確ではありません。MDN も HTTP のトランスポートとして TCP だけでなく、HTTP/3 で利用される QUIC について説明しています。

ただし、HTTP と TCP / IP の関係を初めて学ぶ段階では、まず 「HTTP は Web の通信ルール、TCP は通信を支える仕組み、IP は宛先へ届ける仕組み」 と理解することが重要です。

この基本的な関係を理解しておけば、後から HTTPS、TLS、UDP、QUIC、HTTP/2、HTTP/3 などを学ぶときにも、それぞれが通信のどの部分を担当しているのかを整理しやすくなります。

TCP / IP の 4 つの階層(レイヤー)

TCP / IP は、コンピューター同士がネットワークを通じて通信するためのプロトコルの集合です。通信では、データを送るだけでなく、「何のデータなのか」「正しく届けられたか」「どのコンピューターへ届けるのか」「実際にどのように送るのか」など、さまざまな処理が必要になります。

TCP / IP では、これらの役割を 4 つの階層(レイヤー)に分けています。それぞれの層が異なる役割を担当することで、複雑なネットワーク通信を整理して考えられるようになっています。

例えば、ブラウザで Web サイトを表示する場合、アプリケーション層の HTTP だけで通信が完了するわけではありません。HTTP の下では TCP、IP、Ethernet や Wi-Fi などの仕組みが連携して通信を行います。

アプリケーション層
HTTP / HTTPS / DNS / SMTP など
        ↓
トランスポート層
TCP / UDP
        ↓
インターネット層
IP
        ↓
ネットワークインターフェース層
Ethernet / Wi-Fi など

このように、上の層から下の層へ処理を渡しながら、データを相手へ届けます。

アプリケーション層(Application Layer)

アプリケーション層は、ユーザーが利用するネットワークサービスに関する通信ルールを担当する層です。

Web サイトの閲覧、メールの送受信、ファイル転送など、目的に応じて異なるプロトコルが使用されます。代表的なものとして、Web 通信の HTTP / HTTPS、ファイル転送の FTP、メール送信の SMTP、ドメイン名を IP アドレスに対応付ける DNS などがあります。

例えば、ブラウザで Web サイトを開く場合、HTTP を使って Web サーバーにページを要求します。

つまり、アプリケーション層は、**「どのようなサービスを利用し、どのようなルールでデータをやり取りするのか」**を担当していると考えると分かりやすいです。

トランスポート層(Transport Layer)

トランスポート層は、通信するコンピューター間でデータをどのように届けるかを管理する層です。

代表的なプロトコルには TCP と UDP があります。

TCP は、データが正しい順番で届いているかを確認し、必要に応じて再送するなど、信頼性を重視した通信を行います。一方、UDP は TCP のような再送などの仕組みを持たず、通信の速さやリアルタイム性を重視する場合に利用されます。

例えば、Web 通信では TCP が使われる場合があり、HTTP のデータを相手へ届けるための通信を支えます。

インターネット層(Internet Layer)

インターネット層は、データをネットワーク上のどこへ届けるのかを扱う層です。

代表的なプロトコルが IP です。IP では、通信相手を IP アドレスによって識別し、ネットワークをまたいでデータを目的地へ届けるための仕組みを提供します。

例えば、自分のコンピューターから Web サーバーへデータを送る場合、IP アドレスを使って通信相手を識別します。その途中では複数のネットワーク機器を経由することがありますが、IP はデータを目的のネットワークへ届けるための仕組みに関わります。

つまり、IP は 「このデータをどこへ届けるのか」を扱う仕組みだと考えると分かりやすいです。

ネットワークインターフェース層(Network Interface Layer)

ネットワークインターフェース層は、実際のネットワークを使ってデータを送受信するための仕組みを担当する層です。

代表的なものとして Ethernet や Wi-Fi があります。

例えば、パソコンが Wi-Fi を使ってインターネットに接続している場合、この層の仕組みを利用して、パソコンと無線 LAN ルーターなどの機器との間でデータを送受信します。

上位の層から渡されたデータを、実際に利用しているネットワークの仕組みに合わせて送信する役割を持っています。

4 つの階層の関係

TCP / IP の 4 つの階層は、それぞれ独立して動いているわけではありません。上位の層が下位の層を利用しながら、最終的にデータを相手へ届けます。

例えば、ブラウザで Web サイトを表示する場合は、次のように考えられます。

HTTP
「この Web ページが欲しい」
        ↓
TCP
「データを正しく届ける」
        ↓
IP
「この IP アドレスへ届ける」
        ↓
Ethernet / Wi-Fi
「実際のネットワークを使って送る」

このように、4 つの階層がそれぞれ異なる役割を担当することで、Web サイトの閲覧などのネットワーク通信が成り立っています。

TCP / IP を理解するときは、すべてを一度に覚えるのではなく、アプリケーション層は通信の内容、トランスポート層は通信の管理、インターネット層は宛先、ネットワークインターフェース層は実際の送受信という役割の違いから覚えると理解しやすくなります。

アプリケーション層の機能について

アプリケーション層は、TCP / IP モデルの最上位に位置する層です。簡単にいうと、ユーザーが利用する Web サイトやメール、ファイル転送などのネットワークサービスと、ネットワーク通信をつなぐ役割を持っています。

ここで注意したいのは、「アプリケーション層 = アプリそのもの」ではないということです。例えば、Google Chrome や Safari などの Web ブラウザそのものがアプリケーション層というわけではありません。ブラウザなどのアプリケーションがネットワークを利用するときに、その通信で使用する HTTP などのプロトコルがアプリケーション層に該当します。

例えば、ブラウザで Web サイトを開く場合を考えてみましょう。ブラウザは Web サーバーに対して「このページを取得したい」という要求を送ります。このとき、Web 通信のルールとして HTTP が使われます。HTTP によって、クライアントがどのような形式で要求を送り、サーバーがどのような形式で応答するのかが決められています。

そのため、アプリケーション層は「Web サイトを表示する」「メールを送受信する」といったユーザーが利用するネットワークサービスに近い部分を担当していると考えると分かりやすいです。

アプリケーション層では何をしているのか

アプリケーション層の大きな役割は、ネットワークを利用するアプリケーションが、相手とどのようにデータをやり取りするのかを決めることです。

例えば Web 通信では HTTP、メールの送信では SMTP、メールの受信では POP3 や IMAP など、目的に応じて異なるプロトコルが使用されます。

これらのプロトコルには、それぞれ異なる役割があります。

  • HTTP:Web ブラウザと Web サーバーが Web コンテンツをやり取りするために使用します。
  • HTTPS:HTTP に TLS による暗号化などを組み合わせ、安全に Web 通信を行います。
  • FTP:ファイルをサーバーへ送ったり、サーバーから取得したりするために使用します。
  • SMTP:メールを送信するために使用します。
  • POP3:メールサーバーからメールを受信するために使用します。
  • IMAP:メールサーバー上のメールを管理・受信するために使用します。
  • SSH:ネットワーク経由で別のコンピューターに安全に接続し、操作するために使用します。
  • DNS:ドメイン名と IP アドレスの対応関係を問い合わせるために使用します。

このように、アプリケーション層には「Web 専用のプロトコル」だけが存在するわけではありません。どのようなネットワークサービスを利用するのかによって、使用するプロトコルが変わります。

Web 通信では HTTP が使われる

アプリケーション層を理解するうえで、まず HTTP を例にすると分かりやすくなります。

例えば、ブラウザで https://example.com にアクセスすると、ブラウザは Web サーバーに対してページを取得するためのリクエストを送ります。サーバーはそのリクエストを受け取り、HTML などのデータをレスポンスとして返します。

この「どのような要求を送り、どのような応答を返すのか」というルールを定めているのが HTTP です。

つまり、HTTP は「データをネットワーク上でどこへ届けるか」を決めるプロトコルではありません。そこは IP など、下位の仕組みが担当します。

HTTP が担当するのは、Web 通信でどのようなデータを要求し、どのような形式で応答するのかという、アプリケーションに近い部分です。

例えば HTTP では、Web ページを取得するときに GET、データを送信するときに POST などのメソッドが使用されます。

このように考えると、アプリケーション層と HTTP の関係も理解しやすくなります。

アプリケーション層という大きな分類の中に、Web 通信用の HTTP、メール送信用の SMTP、ファイル転送用の FTP など、目的の異なるプロトコルが存在しているという関係です。

ファイル転送では FTP が使われる

Web 以外の例として、FTP があります。

FTP は、ネットワークを通じてファイルを送信したり、サーバーからファイルを取得したりするためのプロトコルです。

例えば、自分のコンピューターにあるファイルをサーバーへアップロードする場合、FTP のルールに従ってファイルを転送します。

ここでも、FTP がネットワーク上のすべての処理を担当しているわけではありません。FTP は「ファイルをどのようにやり取りするのか」というアプリケーションに近い部分のルールを担当し、その下では TCP / IP などの仕組みが通信を支えます。

つまり、HTTP と FTP は用途が異なりますが、どちらもネットワーク通信におけるアプリケーション層のプロトコルとして扱われます。

メールでは SMTP、POP3、IMAP が使われる

電子メールでも、アプリケーション層のプロトコルが使用されます。

メールを送信するときには SMTP が使用されます。一方、メールを受信・管理するときには POP3 や IMAP が使用されます。

例えば、メールアプリからメールを送信すると、SMTP のルールに従ってメールサーバーへメールが送られます。

受信するときは POP3 や IMAP を利用してメールサーバーからメールを取得します。

ここで重要なのは、「メール」という1つのサービスでも、目的によって使用するプロトコルが異なるということです。

SMTP は主にメールの送信に使われ、POP3 や IMAP はメールの受信・管理に使われます。

このように、アプリケーション層では「ネットワークを使って何をしたいのか」に応じて、適切なプロトコルが使われます。

DNS もアプリケーション層のプロトコル

DNS もアプリケーション層に含まれる代表的なプロトコルです。

DNS は、example.com のようなドメイン名から、それに対応する IP アドレスを問い合わせるために使用されます。

人間は example.com のようなドメイン名の方が覚えやすいですが、ネットワーク通信では IP アドレスを使って通信相手を識別します。そのため、ブラウザで Web サイトへアクセスするときには、ドメイン名に対応する IP アドレスを調べる必要があります。

この問い合わせを行う仕組みが DNS です。

ただし、DNS は「Web サイトを表示するためのプロトコル」というわけではありません。DNS の役割は、ドメイン名から IP アドレスなどの情報を問い合わせることです。

その後、取得した IP アドレスを利用して、ブラウザは目的の Web サーバーとの通信を開始します。

SSH によるリモートアクセス

SSH もアプリケーション層で使用される代表的なプロトコルです。

SSH を利用すると、ネットワークを介して別のコンピューターに安全に接続し、そのコンピューターを操作できます。

例えば、自分のパソコンから遠くにある Linux サーバーへ接続し、コマンドを実行したり、サーバー上のファイルを操作したりできます。

SSH は通信内容を暗号化するため、安全にリモートコンピューターを操作するための手段として利用されています。

このように、アプリケーション層は Web ブラウザだけに関係するものではありません。Web、メール、ファイル転送、リモートアクセスなど、さまざまなネットワークサービスで利用されています。

アプリケーション層と下位の層との関係

ここまで説明した HTTP、FTP、SMTP、DNS、SSH などは、それぞれ異なる目的で使用されます。しかし、これらのプロトコルだけでネットワーク通信のすべてが行われているわけではありません。

例えば、HTTP を使って Web サーバーと通信する場合、HTTP の下では TCP や IP などの仕組みが通信を支えています。

イメージとしては、

アプリケーション層
  HTTP
  DNS
  SMTP
  FTP
  SSH
       ↓
トランスポート層
  TCP / UDP
       ↓
インターネット層
  IP
       ↓
ネットワークアクセス層
  Ethernet / Wi-Fi など

という関係です。

アプリケーション層のプロトコルは「何をどのようなルールでやり取りするのか」を担当し、下位の層がデータをネットワーク上で運ぶための処理を担当します。

そのため、アプリケーション層を理解するときは、**「アプリケーションそのものがネットワーク通信をすべて行う」のではなく、「アプリケーションがネットワークを利用するための通信ルールを、アプリケーション層のプロトコルが定めている」**と考えることが重要です。

つまり、Web サイトを見るなら HTTP、メールを送るなら SMTP、ドメイン名から IP アドレスを調べるなら DNS というように、目的に応じたプロトコルを利用します。そして、その下では TCP / UDP や IP などの仕組みが通信を支えています。

TCP と UDP

TCP(Transmission Control Protocol)と UDP(User Datagram Protocol)は、TCP / IP モデルのトランスポート層で使用される代表的なプロトコルです。

トランスポート層は、アプリケーションから受け取ったデータを相手のコンピューターへ届けるための通信を管理します。TCP と UDP はどちらもデータを届けるために使われますが、**「確実に届けることを重視するか」「速く届けることを重視するか」**という点で大きく異なります。

TCP(Transmission Control Protocol)

TCP は、通信相手との接続を確立し、データを正確に届けることを重視するプロトコルです。UDP と同じくトランスポート層で使用されますが、UDP とは異なり、データを送信する前に通信相手との接続を確立します。このような通信方式を「コネクション指向」と呼びます。

TCP では、データを送るだけではなく、相手に正しく届いたかを確認したり、データが失われた場合に再送したりします。そのため、UDP よりも処理は増えますが、データを正確に届けることができます。

信頼性のあるデータ転送

TCP は、送信したデータが正しく相手に届くように管理する仕組みを持っています。

例えば、送信したデータの一部がネットワーク上で失われた場合、TCP はそのデータが正常に届かなかったことを検知し、必要に応じて再送します。また、データが送信した順番とは異なる順番で届いた場合も、受信側で正しい順番に並べ直します。

このような仕組みによって、アプリケーションはネットワーク上でデータが失われたり順番が入れ替わったりすることを細かく意識せずに、信頼性のある通信を利用できます。

ストリーム指向

TCP では、データを「ストリーム」として扱います。ストリームとは、データを連続した一つの流れとして扱う仕組みです。

例えば、アプリケーションから複数回に分けてデータを送信しても、TCP はそれぞれを独立したデータとして扱うのではなく、連続したバイト列として扱います。

そのため、TCP 自体には「ここからここまでが1つのメッセージ」という境界はありません。メッセージ単位でデータを扱う必要がある場合は、アプリケーション側でデータの区切りを判断する仕組みを用意します。

この点は、データを独立した単位で扱う UDP との大きな違いです。

信頼性が重要な通信に適している

TCP は、データが正しく届くことが重要な通信に向いています。

例えば、Web サイトのデータを取得するとき、HTML の一部が失われたまま表示されると、ページを正しく表示できない可能性があります。また、ファイル転送ではデータの一部が失われると、正しいファイルを作成できません。

そのため、Web 通信、ファイル転送、電子メールなど、多少の遅延が発生してもデータを正確に届けることが重要な通信で TCP が利用されます。

TCP は確認や再送などの処理を行うため、UDP と比べて通信に必要な処理が多くなります。その代わり、データを正確に届けるための仕組みを備えています。

TCP と UDP の違いを理解するときは、TCP は「正確に届けること」を重視し、UDP は「できるだけ速く届けること」を重視すると考えると分かりやすいです。

UDP(User Datagram Protocol)

UDP は、通信の速さやリアルタイム性を重視するプロトコルです。TCP と同じくトランスポート層で使用されますが、TCP のように通信相手との接続を確立してからデータを送るのではなく、基本的にはすぐにデータを送信します。このような通信方式を「コネクションレス」と呼びます。

TCP では、データが正しく届いたかを確認したり、失われたデータを再送したりすることで、信頼性を高めています。一方、UDP にはこのような仕組みが基本的にありません。そのため、データが途中で失われたり、順番が入れ替わったりしても、UDP 自体が再送や順番の調整を行うことはありません。

信頼性よりも通信速度を重視する

UDP は、TCP のような確認や再送の処理を行わないため、通信に必要な処理が少なくなります。その結果、TCP と比べて通信を素早く開始でき、遅延を小さくしやすいという特徴があります。

例えば、リアルタイムの音声通話で一部のデータが失われた場合を考えてみましょう。失われたデータを再送すると、そのデータを待つために音声が遅れてしまう可能性があります。この場合、少し音声が途切れても、現在の音声をすぐに届ける方が適しています。

つまり UDP は、**「すべてのデータを確実に届けること」よりも「多少のデータが失われても、できるだけ早く次のデータを届けること」**を重視する通信に向いています。

データグラム単位でデータを送る

UDP では、データを「データグラム」という単位で扱います。データグラムは、それぞれ独立したデータとして送信されます。

例えば、アプリケーションが 3 つのデータを UDP で送信した場合、それぞれが独立したデータとして扱われます。UDP は、それらがすべて届いたか、正しい順番で届いたかを確認しません。

そのため、必要に応じてアプリケーション側でデータの順番を管理したり、失われたデータへの対応を行ったりすることがあります。

リアルタイム性が重要な通信で利用される

UDP は、多少のデータ欠落が発生しても、通信を止めずに最新のデータを送ることが重要な用途で利用されます。

例えば、音声通話、オンラインゲーム、ライブ配信などが挙げられます。

オンラインゲームでは、過去の位置情報を再送するよりも、現在のプレイヤーの位置情報をできるだけ早く送る方が重要な場合があります。古いデータを待つことで操作に遅延が発生するより、多少のデータが失われても最新の情報を受け取る方が適しているためです。

TCP と UDP の違いは、TCP が「正確に届けること」を重視するのに対して、UDP は「できるだけ速く届けること」を重視すると考えると分かりやすいです。どちらが優れているというわけではなく、通信の目的に応じて使い分けられています。

どちらを使用するかは、アプリケーションの要件によります。TCPは信頼性が重要なアプリケーションに適していますが、その信頼性には通信の遅延が伴います。一方で、UDPは信頼性が低いが高速で、遅延が許容されるシナリオに適しています。