UDPについて
UDPの概要
UDPは"User Datagram Protocol"の略で、トランスポート層のプロトコルの一つです。UDPは、TCPと比較して以下のような特徴を持っています。
コネクションレス: UDPは、接続を確立せずにデータを送信します。これにより、オーバーヘッドが削減され、迅速な通信が可能です。
信頼性の低さ: データの順序や到達確認は行われず、パケットの損失や重複が発生する可能性があります。UDPは、信頼性よりも速度を重視したプロトコルです。
データグラム: UDPは、データを「データグラム」として扱います。各データグラムは独立しており、順序が保証されません。
データグラムとはある意味『データのかたまり』ぐらいで考えておけばかまいません。 かたまりですので、分割は(この層では)発生しません。 もし分割が必要というのであれば、その対応は『プロトコルの開発者』が行うべきものとして扱われます。
実際はIP層においてパケットの分割が発生する可能性がありますが、UDPの層では意識することがありませんし、同時に「正確に元に戻るのか」の保証もありません(この辺りはTCPでは多少ですが対応が入ります)。
UDPは、アプリケーション開発者に自由を与えます。必要な機能は自分で実装する必要があります。その一方で、信頼性の低さを受け入れることが求められます。 UDPは、リアルタイム性が求められるアプリケーションで使われます。例えば、オンラインゲームや音声通話、ビデオストリーミングなどで利用されます。 また、データの順序や完全性は保証されません。多少のパケット損失を許容する必要があります。
UDPのヘッダー構造
UDPのヘッダーは『IPの層をそのまま引き上げたようなもの』と言われることがあります。 どのような構造かというと、こうなっています。

送信元のポート番号(16ビット、2オクテット)。
宛先のポート番号(16ビット、2オクテット)
長さ(16ビット、2オクテット)
チェックサム(16ビット、2オクテット)
ヘッダ部分は64ビット(8オクテット)の長さを持ちます。それ以降はペイロードとして上位層のデータを包み込む形です。 通信制御用のフラグなどはほぼありません。 信頼性部分についても、チェックサムがある程度です。
UDPは『投げる』もの
UDPでの通信の際、相手(主にサーバー)が存在するかについては実は気にしません。 つまり事前の接続とかはUDPの規程には含まれておらず、単にデータを送信するだけです。
Cライブラリのレベルで見ると、文字通りsendto()
という関数を使って、宛先のアドレスとポート番号を指定してデータを送信します。そのため、相手が存在しない場合でもエラーにはなりません。
ではどうやってエラーを判定するのか? それは単純に『適当なタイムアウトを用意して、値が返ってこない』という状況をエラーとします。
そして、受ける時(送信後に戻りパケットが必要なとき)は、自分が受信体勢に入っておく必要もあります。 お互いに構えていないといけないというわけでもないことも重要です。
このことからも、データグラムを投げるという感覚で理解しておくと良いでしょう。
UDPの利用例
UDPは、リアルタイム性が求められるアプリケーションでよく使用されます。以下は、UDPの利用例です。
オンラインゲーム: ゲームの状態やプレイヤーの動きをリアルタイムで更新するために使用されます。多少のパケット損失が許容されるため、UDPが適しています。
音声通話: VoIP(Voice over IP)アプリケーションでは、音声データをリアルタイムで送信するためにUDPが使用されます。音声の遅延を最小限に抑えるため、信頼性よりも速度が重視されます。
ビデオストリーミング: 動画のストリーミングサービスでは、UDPを使用してリアルタイムで動画データを送信します。多少のパケット損失が許容されるため、UDPが適しています。
注釈
とはいえ、ビデオストリーミングに関しては、通信速度の向上などもあり、TCPベース(https)での通信が主流となっています。
さらに、TCPベース(https)になってる裏で、httpのプロトコル自体がQUICというUDPベースのプロトコルによる通信を行うようになってきており、なんだかんだでUDP寄りに戻ってきているのではないかというふしも見えたりします。
現代的なUDP活用技術
2025年現在、UDPは新しい用途で積極的に活用されており、特に高性能・低レイテンシが要求される分野で重要な役割を果たしています。
QUIC (Quick UDP Internet Connections)
HTTP/3の基盤となるQUICプロトコルは、UDPの上に構築された革新的な技術です。
信頼性とUDPの融合: UDPの高速性を保ちながら、TCPの信頼性機能を独自実装
ゼロラウンドトリップ時間(0-RTT): 前回の接続情報を活用した超高速接続確立
接続マイグレーション: IPアドレス変更時でも接続を維持する能力
内蔵暗号化: TLS 1.3が標準で統合されたセキュアな通信
WebRTC (Web Real-Time Communication)
Webブラウザでのリアルタイム通信を実現する技術です。
P2P通信: ブラウザ同士の直接通信でビデオ会議やファイル共有を実現
SRTP over UDP: 暗号化された音声・映像ストリーミング
DTLS: UDP上でのセキュアな通信を提供するDatagram Transport Layer Security
低遅延: UDPベースによる20-100msの低遅延通信
DNS over HTTPS (DoH) / DNS over TLS (DoT)
従来のDNS(UDP port 53)をより安全にする技術です。
DNS over HTTPS: HTTPSを使用した暗号化DNS問い合わせ(DoH)
DNS over TLS: TLSで暗号化されたDNS通信(DoT)
プライバシー保護: ISPや中間者による DNS 盗聴の防止
検閲回避: DNS フィルタリングの回避能力
ゲーミングとeスポーツでのUDP
注釈
この部分は高度な専門技術に関する内容です。応用情報技術者試験レベルを超える内容のため、初学者の方はスルーしても構いません。
オンラインゲームにおけるUDPの専門的活用が進化しています。 主に関連技術のキーワード程度にはなりますが、調べておくと役に立つと思います。
ネットコード技術
クライアント予測: 遅延を隠すためのローカル予測処理
サーバー調停: 不正防止とフェアプレイのためのサーバーサイド検証
ラグ補償: 過去の状態を再構築して公平性を保証
適応的送信レート: ネットワーク状況に応じた更新頻度調整
最新のゲーミングプロトコル
ENet: 信頼性のあるUDPライブラリ
KCP: 高速かつ信頼性のあるUDPプロトコル
GameNetworkingSockets: Valveが開発したゲーム向けネットワークライブラリ
IoT (Internet of Things) でのUDP
注釈
この部分は高度な専門技術に関する内容です。応用情報技術者試験レベルを超える内容のため、初学者の方はスルーしても構いません。
IoTデバイスでの軽量通信プロトコルとしてUDPが重要視されています。
CoAP (Constrained Application Protocol)
軽量HTTP: リソース制約のあるデバイス向けのHTTP代替
UDPベース: 低消費電力と高効率を実現
observe機能: プッシュ通知のような機能をサポート
MQTT-SN (MQTT for Sensor Networks)
センサーネットワーク向け: 極小デバイス向けMQTT
UDPサポート: ブロードキャスト機能とUDPの活用
エッジコンピューティングとUDP
注釈
この部分は高度な専門技術に関する内容です。応用情報技術者試験レベルを超える内容のため、初学者の方はスルーしても構いません。
CDNとエッジサーバーでのUDP活用が拡大しています。 こちらも関連キーワード程度ですが、調べておくと良いでしょう。
Anycast UDP: 地理的に最適なサーバーへの自動ルーティング
UDP Load Balancing: 高性能ロードバランシング
Edge Computing Protocols: エッジでのリアルタイム処理
高頻度取引(HFT)でのUDP
注釈
この部分は高度な専門技術に関する内容です。応用情報技術者試験レベルを超える内容のため、初学者の方はスルーしても構いません。
金融市場での超高速取引にUDPが活用されています。
マーケットデータ配信: 株価情報のマルチキャスト配信
マイクロ秒レベルの最適化: ハードウェアとの協調による超低遅延
専用ネットワーク: 専用線とカスタムUDPプロトコル
UDPセキュリティの進化
注釈
この部分は高度な専門技術に関する内容です。応用情報技術者試験レベルを超える内容のため、初学者の方はスルーしても構いません。
DTLS (Datagram Transport Layer Security)
UDP向けTLS: UDPでもセキュアな通信を実現
WebRTCでの活用: ブラウザ間のセキュアP2P通信
VPN技術: OpenVPNなどでのUDP+DTLS活用
WireGuard
最新のVPNプロトコルで、UDPベースの高性能VPNを実現しています。
シンプルな設計: 従来VPNより高速かつ安全
UDPベース: 低遅延とファイアウォール透過性
現代暗号技術: ChaCha20、Poly1305等の高速暗号化
これらの技術により、UDPは単なる「軽量で信頼性の低いプロトコル」から、現代ネットワークの核となる多様な技術基盤へと発展しています。