UDP(ユーディーピー)とは | 意味や読み方など丁寧でわかりやすい用語解説
UDP(ユーディーピー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
ユーザデータグラムプロトコル (ユーザデータグラムプロトコル)
英語表記
UDP (ユーディーピー)
用語解説
UDPとは、User Datagram Protocolの略であり、インターネットプロトコルスイートにおけるトランスポート層で利用されるプロトコルの一つである。TCP(Transmission Control Protocol)と同じく、アプリケーション層から送られてくるデータをネットワークを介してやり取りするために使われるが、その特性はTCPと大きく異なる。UDPは、データを送る前に通信相手との接続を確立する手順を踏まず、一方的にデータを送信する「コネクションレス型」のプロトコルである点が最大の特徴だ。このため、TCPが提供するようなデータ到着の保証、順序の保証、再送制御、流量制御といった信頼性に関わる機能を持たない。
UDPは、信頼性よりも速度や効率、リアルタイム性を重視する用途で選択されることが多い。コネクション確立や維持のためのオーバーヘッドがなく、エラーチェックや再送処理といった複雑な制御が不要なため、非常にシンプルな仕組みで高速なデータ転送が可能となる。データは「データグラム」と呼ばれる単位で送受信され、送信側は宛先を指定してデータグラムを送り出すだけであり、受信側はそれが届いたかどうかを送信元に通知する責任を持たない。これにより、ネットワークの輻輳状況や受信側の状態に関わらず、データを送り続けることができる。
UDPが提供する最小限の機能は、主にポート番号によるアプリケーションの特定と、任意で利用されるチェックサムによるデータ破損の検出に限定される。UDPヘッダはTCPヘッダと比較して非常にシンプルで、送信元ポート番号、宛先ポート番号、UDPデータグラムの長さ、そしてチェックサムの四つのフィールドのみで構成される。ポート番号は、一台のコンピュータ上で動作する複数のアプリケーションの中から、どのアプリケーションがデータを受信すべきかを識別するために使われる。チェックサムは、データが転送中に破損していないかを確認するためのもので、データの整合性を保証する唯一の手段だが、UDPの仕様上、チェックサムの計算と検証は必須ではない。もしチェックサムが一致しないデータグラムを受信した場合、そのデータグラムは破棄されるが、送信側には通知されない。
UDPのこのような特性は、特定のアプリケーションにおいて大きなメリットとなる。例えば、動画や音声のストリーミング配信において、多少のパケットロスが発生しても全体の品質に大きな影響を与えず、むしろリアルタイムな再生を維持することが重要である。もしTCPのような信頼性プロトコルを使用すると、失われたパケットの再送処理によって遅延が発生し、映像や音声が途切れてしまう可能性がある。UDPはこのような状況下で、たとえ一部のデータが失われたとしても、後続のデータを途切れることなく送り続けることで、リアルタイム性を確保する。
その他にも、UDPは様々なアプリケーションで利用されている。DNS(Domain Name System)は、ドメイン名とIPアドレスの変換を行うためのサービスで、その問い合わせと応答は短く、高速な処理が求められるため、UDPが主に利用される。NTP(Network Time Protocol)は、コンピュータの時刻を同期させるためのプロトコルであり、ここでも高速で効率的な通信が重要となる。VoIP(Voice over IP)による音声通話や、オンラインゲームのような対戦型アプリケーションでも、わずかな遅延がプレイに影響するため、UDPが使われることが多い。これらのアプリケーションでは、信頼性の不足によるパケットロスは、アプリケーション自身で再送処理を行うか、あるいは無視して後続のデータを優先するなどの対応が取られる。
UDPはTCPと比較して、データ転送の確実性や信頼性においては劣る。ファイル転送やWebページの閲覧、メールの送受信など、データが完全に、かつ正しい順序で届くことが絶対条件となる用途では、TCPがその役割を担う。しかし、リアルタイム性や低遅延が最優先される環境、あるいはネットワークのオーバーヘッドを最小限に抑えたい環境においては、UDPはそのシンプルさと効率性により、不可欠なプロトコルとして機能する。システムを設計する際には、アプリケーションの要件に応じて、TCPとUDPのどちらを選択すべきか、あるいは両者をどのように組み合わせるかを慎重に検討する必要がある。UDPは、インターネットにおける多様なデータ通信を支える重要な基盤の一つであり、その特性を理解することは、ネットワークアプリケーション開発において非常に重要である。