トランスポート層通信プロトコルであるUDPは、音声および動画トラフィック用の非常に一般的なプロトコルです。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
ユーザーデータグラムプロトコル(UDP)は、インターネット上で、動画の再生や、DNSのルックアップなど、特に時間を重視した通信に使用される通信プロトコルです。UDPは、データ転送前に正式な接続の確立をしないことで、通信を高速化します。これにより、データを非常に高速に転送することができますが、、転送中にパケットが失われることがあり、DDoS攻撃という形で悪用される機会も生じます。
他のネットワークプロトコルと同様に、UDPはネットワーク上の2台のコンピュータ間でデータを転送するための規格化された方法です。他のプロトコルと比較して、UDPはシンプルな方法でこのプロセスを実現しています。これは、最初に接続を確立したり、パケットの順序を示したり、パケットが意図したとおりに到着したかどうかを確認したりすることなく、パケット(データ転送の単位)を対象となるコンピューターに直接送信します。(UDPのパケットは「データグラム」と呼ばれています)。
UDPは、もう一つの一般的なトランスポートプロトコルであるTCPと比べて、速度は速いものの信頼性は劣ります。TCP通信では、2台のコンピューターが「ハンドシェイク」と呼ばれる自動プロセスを介して接続を確立することから始まります。このハンドシェイクが完了して初めて、一方のコンピューターはもう一方のコンピューターにデータパケットを実際に転送します。
UDP通信では、このようなプロセスを経ることはありません。その代わり、一方のコンピュータがもう一方のコンピュータに対して単純にデータの送信を開始するだけです。
加えて、TCP通信では、データパケットを受信する順番を示し、意図した通りにパケットが到着するかどうかを確認します。中間のネットワークが混雑しているなどの理由でパケットが届かない場合、TCPでは、再送を要求します。UDP通信にはこのような機能はありません。
これらの違いは、いくつかの利点を生み出します。UDPは「ハンドシェイク」を必要とせず、データが正しく到着したかどうかをチェックしないため、TCPよりもはるかに高速にデータを転送することができます。
しかし、これによって得られる速度はトレードオフの関係にあります。UDPデータグラムが伝送中に失われた場合、そのデータグラムは再送信されません。そのため、UDPを使用するアプリケーションは、エラー、損失、重複を許容できなければなりません。
(技術的には、このようなパケットロスはUDPの欠陥というよりも、インターネットの構築方法に起因するものです。ほとんどのネットワークルーターは、パケットの順序付けと到着確認を行わないように設計されています。これは、パケットの順序付けと到着確認を行うと、現実的ではない量の追加のメモリが必要になるためです。TCPは、アプリケーションが必要とするときに、このギャップを埋める方法です)。
UDPは、待機するよりも時にパケットをドロップする方が適切な、時間を重視する通信でよく使用されます。音声と動画のトラフィックはともに時間が重要であり、ある程度の損失に対応するように設計されているため、このプロトコルを使用して送信されます。たとえば、多くのインターネットベースの電話サービスで使用されるVoIP(Voice over IP)は、通常UDP上で動作します。これは、ノイズ交じりの通話のほうが、明瞭でも大幅な遅延のある通話よりも望ましいためです。
UDPはオンラインゲームにとっても理想的なプロトコルです。同様に、DNSサーバーとNTPサーバーはどちらも高速で効率的である必要があるため、UDPを介して動作します。
パケットロスなどのUDPの「リスク」は、ほとんどの場合深刻な問題ではありません。しかし、UDPは悪意のある目的に利用することができます。UDPはハンドシェイクを必要としないため、攻撃者は、標的となるサーバーから通信開始の許可を得ることなく、UDPトラフィックを「氾濫」させることができます。
典型的なUDPフラッド攻撃は、標的となるコンピュータのランダムなポートに大量のUDPデータグラムを送信します。これにより、標的はこれらのポートが到達不能であることを示すために、同じ数のICMPパケットで応答しなければなりません。それぞれの不正なデータグラムに応答するために必要なコンピューティングリソースは、標的を疲弊させ、結果的に正当なトラフィックに対するサービス拒否を引き起こします。(詳細については、UDPフラッド攻撃に関する記事をご覧ください)
組織は、さまざまな方法でUDPフラッド攻撃を防御することができます。1つは、ICMPパケットの応答速度を制限することですが、この方法では正当なパケットもフィルタリングされてしまいます。もう1つの方法は、多数の分散したデータセンターからなる中間ネットワークを介してUDPトラフィックを受信して応答することで、単一の配信元サーバーが不正なリクエストで圧倒されるのを防ぐ方法です。Cloudflareがこの戦略を用いて組織がDDoS攻撃を軽減する方法については、こちらをご覧ください。