アプリケーションのデータのやり取りは1つだけじゃない

アプリケーションのデータは、ほとんどの場合、複数に分割されて「フロー」としてネットワーク上を転送されることになります。分割されたデータのうち1つでも宛先に届かなければ、もとのデータに再構成できません。また、データを再構成するときには分割されたデータの順序もきちんとわからなければいけません。アプリケーションのデータを転送するときには、データが失われてしまったら再送したり、分割されたデータの順序を管理することも考えなくてはいけません。

フローについては「データを送受信している主体はなに?」の記事をご覧ください。

データ転送用プロトコルの分類

そこで、データ転送用プロトコルは、その動作によって2つに分類されます。

  • コネクション型プロトコル
  • コネクションレス型プロトコル

コネクション型プロトコル

コネクション型プロトコルはデータを転送する前にまずコネクションの確立を行います。コネクションの確立は、通信相手が確実にデータを受信できることを事前に確認するための手順です。コネクションを確立して、通信相手が確実にデータを受信できることを確認してから、データの転送を開始します。そして、データを受信した宛先では、受信したことを通知するための確認応答を返します。確認応答が返ってこなければ、データが失われたと判断して再送します。また、データを分割しているときには、その順序も明確にできます。

そのため、コネクション型の転送プロトコルを利用すると、確実にデータの転送ができるというメリットがあります。ただし、コネクションの確立や確認応答などの追加の処理(オーバーヘッド)が必要です。

コネクション型プロトコルの代表的な例はTCPです。

図 コネクション型プロトコルの概要

TCPについて詳しくは、以下の記事をご覧ください。


コネクションレス型プロトコル

一方、コネクションレス型プロトコルでは事前にコネクションを確立しません。送信元からデータを転送しても、そのデータを通信相手が受信できるかどうかは確実ではありません。また、データを受信した通信相手は、確認応答を返すこともしません。コネクションレス型の転送プロトコルは、オーバーヘッドが必要ないのでデータ転送を効率よく行うことができます。しかし、確実に転送したデータが通信相手に届くとは限らないため、信頼性が低いデータの転送となります。

代表的なコネクションレス型プロトコルはUDP、IP、そしてイーサネットです。

図 コネクションレス型プロトコルの概要

UDP、IP、イーサネットについてさらに詳しくは以下の記事をご覧ください。


コネクション型プロトコルとコネクションレス型プロトコルのまとめ

コネクション型プロトコルとコネクションレス型のメリットとデメリットをまとめたものが次の表です。

  メリット デメリット
コネクション型プロトコル 信頼性の高いデータ転送が可能 オーバーヘッドの影響でデータ転送の効率がよくない
コネクションレス型プロトコル オーバーヘッドが少ないので効率よくデータ転送できる 確実にデータ転送ができるとは限らない

コネクション型プロトコルとコネクションレス型プロトコルは、その特徴に応じて使い分けます。確実にデータの転送を行う必要があれば、コネクション型プロトコルを利用します。確実さよりもデータ転送の効率を重視するのであれば、余計な処理を行わないコネクションレス型プロトコルを利用します。また、アプリケーションによってはコネクション型プロトコルとコネクションレス型プロトコルを組み合わせていることもよくあります。