WebRTCにも使われているプロトコルであるUDPについてまとめてみました。
UDPとは
UDP(User Datagram Protocol)とは、TCPと同じトランスポート層のプロトコルです。
RFC768によって策定されています。UDPの特徴として以下のようなものがあげられます。
コネクションレスなデータ通信 データの信頼性、順序などを保証しない 高いスループット(伝送速度) マルチキャスト、ブロードキャスト コネクションレスとは、通信相手との接続を確立しないということです。 送信側が送りたいデータを一方的に受信側に送るため、接続を確立せずに通信が行えます。 こういった特徴があるため、データの信頼性、順序性などは保証されませんが、高速な送信を実現できます。 また、TCPは接続を確立するため、ユニキャスト(1対1)しか行えませんが、UDPはコネクションレスのため、マルチキャスト、ブロードキャストに対応可能です。 その他に、TCPでは複雑な制御をするためにTCPヘッダを送りたいデータに付属させる必要があります。TCPヘッダのサイズは通常20 Byteほどです。UDPにもヘッダは必要なのですが8 Byteと少量のため、小規模なデータの送信などはUDPの方が効率よく行えます。
使用されているサービス
UDPプロトコルは以下のような技術に使用されています。
- DNS
- DHCP
- VoIP
- 動画ストリーミング
DNSはIPアドレスとドメインを対応づけるプロトコルです。 DHCPはLAN内のパソコンなどにIPアドレスを動的に割り当てるプロトコルです。 VoIPはIPネットワーク上で音声データを通信する技術です。
ブロードキャストを行う必要があったり、信頼性よりもリアルタイム性が重要視される場面ではUDPが選択されることが多いです。
データグラム
TCPではデータの通信の単位をパケットと呼びますがUDPでは「データグラム」といいます。 実際にネットワーク上を流れているデータは以下のようなものとなります。
UDPデータグラムの表 上の表の送信元ポート、送信先ポート、データグラム長、チェックサムまでがUDPヘッダとなり、 ペイロードが実際に送信したいデータになります。
0~15bitまでは16bitが送信元のポート番号を表します。 16~31bitまでは16bitが送信先のポート番号を表します。 32~47bitまではデータグラム長を表します。データグラム長は、UDPヘッダとUDPペイロードの合計値です。 48~64bitまではチェックサムを表します。チェックサムは、データ(ペイロード)の整合性の検査用データとなります。 それ以降がペイロードです。
UDPデータグラムのサイズですが、これはIPパケットのサイズに依存します。 IPパケットは65535 Byteの容量となり、IPヘッダが20 Byteのため、UDPデータグラムで使用可能な容量は65535 – 20 = 63315となります。そしてUDPヘッダが8Byteのため、UDPペイロードの容量は最大で65507 Byteということになります。
よってデータグラム長に入る値は8 ~ 65515ということになります。
まとめ
- UDPはコネクションレスの通信方法
- 信頼性を犠牲にして高スループットな通信を実現
- ヘッダサイズが小さく、オーバーヘッドが少ない(複雑な制御を行わないため)