UDP
UDPも、アプリケーションへのデータを振り分けるために利用するプロトコルです。ただし、TCPとは異なり、相手のアプリケーションが動作しているかどうかや、データがきちんと届いたかといった確認を一切行いません。相手のアプリケーションにいきなりデータを送り付けますし、送信したデータが相手のアプリケーションまできちんと届くかどうかも保証しません。
このようにUDPは、データ通信の信頼性がけっして高くありません。ではなぜ、そのようなプロトコルがあるのかというと、余計な処理を行わない分、TCPに比べ、データの転送効率が高いというメリットがあるのです。TCPでは、送信データのサイズが大きいときには、TCPが適宜分割してくれますが、UDPでは、データを送信したいアプリケーション側であらかじめ適切なサイズに分割する必要があります。
UDPでアプリケーションのデータを送受信するには、データにUDPヘッダを付加します。UDPヘッダとアプリケーションのデータを合わせてUDPデータグラムと呼ぶことがあります。
UDPを利用する典型的なアプリケーションは「IP電話」です。IP電話の音声データは、IP電話で細かく分割します。IP電話の設定によって異なりますが、1秒間の音声データは50個に分割されるような設定が一般的です。IP電話で細かく分割した音声データにUDPヘッダを付加して転送します[6]。
注
[6]: IP電話の音声データには、UDPヘッダだけではなく「RTP」(Real-time Transport Protocol)ヘッダも付加されます。RTPヘッダには、それぞれのデータのタイムスタンプ(時刻)が記録されていて、元の音声データに組み立てられるようにしています。
UDPヘッダのフォーマットは次図のとおりです。
TCPに比べて、UDPヘッダのフォーマットはとてもシンプルで、ポート番号の情報のみと言っていいぐらいです。
TCP or UDP ?
アプリケーション間でデータを送受信するトランスポート層のプロトコルに、TCP/IPでは、TCPとUDPの2種類用意しています。どちらも一番の目的は、適切なアプリケーションにデータを振り分けることです。
この共通した機能以外に、信頼性を確保する必要があればTCPを利用します。信頼性はあまり重視せずに効率だけ求めるのであればUDPを利用します。アプリケーションごとにどのようにデータの転送をしたいかによって、TCPかUDPを使い分けます。
TCPを利用するようなアプリケーションは、送受信するデータのサイズが大きいものです。データサイズが大きいと、分割しなければいけません。分割されたデータの一部が失われると、宛先でデータを組み立てることができないので信頼性が必要です。TCPを利用すれば、アプリケーション間のデータ転送において信頼性を確保することができます[7]。
一方、UDPを利用するようなアプリケーションは、扱うデータのサイズが小さくて分割の必要がないものです。また、IP電話のようなリアルタイムのデータの転送が必要なものや、同じデータを一度の複数の宛先に送信する(ブロードキャストまたはマルチキャスト)ようなアプリケーションも、UDPを利用することが多くなっています。
次表にTCPとUDPの特徴をまとめておきます。
プロトコル | TCP | UDP |
---|---|---|
信頼性 | 高い | 高くない |
転送効率 | 高くない | 高い |
主な機能 |
|
|
用途 |
|
|
注
[7]: 大部分のアプリケーションはTCPを利用しています。私たちが現在利用しているアプリケーションのデータのサイズは比較的大きく、分割が必要になるからです。