UDP(User Datagram Protocol)とは

UDPは単純にアプリケーションへのデータを振り分けるためにだけに利用するプロトコルです。TCPのような確認などはいっさい行いません。UDPでアプリケーションのデータを送受信するには、UDPヘッダを付加します。UDPヘッダとアプリケーションのデータを合わせてUDPデータグラムと呼ぶことがあります。

相手のアプリケーションが動作しているかどうかの確認などせずに、いきなりUDPデータグラムを送りつけて、アプリケーションのデータを送信します。TCPに比べると、余計な処理をしないので、データの転送効率がよいというメリットがあります。その反面、信頼性が高くないというデメリットがあります。UDPの場合は、送信したUDPデータグラムが相手のアプリケーションまできちんと届くかどうかはわかりません。また、データのサイズが大きいときには、アプリケーション側で適切なサイズに分割する必要があります。

UDPを利用する典型的なアプリケーションはIP電話です。IP電話の音声データは、IP電話で細かく分割します。IP電話の設定によって異なりますが、1秒間の音声データは50個に分割されるような設定が一般的です。IP電話で細かく分割した音声データにUDPヘッダを付加して転送します。

図 UDPによるアプリケーション間のデータの転送(IP電話の音声データの転送)

ネットワーク上にIP電話のデータを送り出すには、さらにIPヘッダとイーサネットなどのネットワークインタフェース層プロトコルのヘッダも付加されます。

IP電話の音声データにはUDPヘッダだけではなくRTP(Real-time Transport Protocol)ヘッダも付加されます。RTPヘッダには、それぞれのデータのタイムスタンプが記録されていて、順番通りに元の音声データに組み立てられるようにしています。

UDPを利用しているのはIP電話の音声データの転送です。電話をかけるまではSIP(Session Initiation Protocol)というアプリケーションプロトコルを利用しています。SIPはトランスポート層にTCPを利用します。

UDPヘッダフォーマット

UDPによるアプリケーション間のデータ転送を行うときに付加するUDPヘッダのフォーマットは次の図のようになります。

図 UDPヘッダフォーマット

TCPに比べて、UDPヘッダのフォーマットはとてもシンプルで、ポート番号の情報のみと言っていいぐらいです。

TCP or UDP ?

アプリケーション間でデータを送受信するために、TCP/IPではトランスポート層のプロトコルにTCPとUDPの2種類用意しています。どちらも一番の目的は、適切なアプリケーションにデータを振り分けることです。

この共通した機能以外に、信頼性を確保する必要があればTCPを利用します。信頼性はあまり重視せずにアプリケーションのデータ転送の効率だけ求めるのであればUDPを利用します。アプリケーションごとにどのようにデータの転送をしたいかによって、TCPかUDPを使い分けています。

TCPを利用するようなアプリケーションは、送受信するデータのサイズが大きいアプリケーションです。データサイズが大きいと、分割しなければいけません。分割されたデータの一部が失われると、宛先でデータを組み立てることができないので信頼性が必要です。TCPを利用すれば、アプリケーション間のデータ転送において信頼性を確保することができます。

一方、UDPを利用するようなアプリケーションは、扱うデータのサイズが小さくて分割の必要がないものです。また、IP電話のようなリアルタイムのデータの転送が必要だったり、同じデータを一度の複数の宛先に送信する(ブロードキャストまたはマルチキャスト)ようなアプリケーションもUDPを利用することが多くなっています。

以下の表にTCPとUDPの特徴をまとめています。

表 TCPとUDPの比較

プロトコル

TCP

UDP

信頼性

高い

高くない

転送効率

よくない

よい

主な機能

アプリケーションへのデータの振り分け

データの分割/組み立て

再送制御

フロー制御

アプリケーションへのデータの振り分け

用途

データのサイズが大きく信頼性が必要なアプリケーションのデータの転送

リアルタイムのデータの転送

ブロードキャスト、マルチキャスト

データのサイズが小さいアプリケーションのデータ転送

なお、大部分のアプリケーションはTCPを利用しています。私たちが現在利用するようなアプリケーションのデータのサイズは比較的大きく、分割することになるためTCPでの信頼性の確保が必要になるからです。また、TCPかUDPのどちらかだけではなく、両方組み合わせていることもあります。

以下の表に主なアプリケーションプロトコルがTCP/UDPのどちらを利用しているかをまとめています。

TCPとUDPを利用するアプリケーションプロトコル

TCP

HTTP(80)、HTTPS(443)、FTP(20/21)、SMTP(25)、SMTPs(465)、POP3(110)、POP3s(995)、IMAP4(143)、IMAP4s(993)、DNS(53)

UDP

TFTP(69)、DNS(53)、DHCP(67/68)、SNMP(161/162)、Syslog(514)、NTP(123)

()内はウェルノウンポート番号