#TCP/IP と UDP を再確認してみた
口頭で説明できるようにまとめてみました。
#TCP/IP って何だろう
インターネット プロトコル (IP) は、インターネットのアドレスシステムであり、ソース デバイスからターゲットデバイスに情報のパケットを配信するコア機能を備えています。IP はネットワーク接続を確立するための主要な方法であり、インターネットの基礎を確立します。IP は、パケットの順序付けやエラーチェックを処理しません。このような機能には、別のプロトコル (通常は TCP) が必要です。
TCP/IP の関係は、パズルに書かれたメッセージをメールで送信することに似ています。メッセージが書かれ、パズルがバラバラに。その後、各小品は異なる郵便経路を通過することができ、その中には他のものよりも時間がかかるものもあります。さまざまな道をたどってパズルのピースが到着したとき、ピースの順序が狂っている可能性があります。インターネットプロトコルは、ピースが宛先アドレスに確実に到着するようにします。TCP プロトコルは、ピースを正しい順序で組み立て、不足しているピースを再送信するように要求し、パズルが受信されたことを送信者に知らせる、反対側のパズルアセンブラーと考えることができます。TCP は、最後のピースが送信された後、最初のパズルピースが送信される前から送信者との接続を維持します。
IP はコネクションレス プロトコルです。つまり、データの各ユニットは個別にアドレス指定され、ソースデバイスからターゲット デバイスにルーティングされ、ターゲットはソースに確認応答を返しません。ここで、伝送制御プロトコル (TCP) などのプロトコルが登場します。TCP は、送信者とターゲット間の接続を維持し、パケットの順序を確保するために、IP と組み合わせて使用されます。
たとえば、電子メールが TCP 経由で送信されると、接続が確立され、3 ウェイハンドシェイクが行われます。まず、ソースは、ダイアログを開始するために、SYN「初期リクエスト」パケットをターゲット サーバーに送信します。次に、ターゲットサーバーは SYN-ACK パケットを送信して、プロセスに同意します。最後に、ソースはプロセスを確認するために ACK パケットをターゲットに送信します。その後、メッセージの内容を送信できます。電子メール メッセージは、最終的にパケットに分割されてから、各パケットがインターネットに送信され、一連のゲートウェイを通過してからターゲットデバイスに到着します。ターゲットデバイスでは、パケットのグループが TCP によって再構成されて、電子メールの元のコンテンツになります。
現在インターネットで使用されている IP の主要なバージョンは、インターネットプロトコルバージョン 4 (IPv4) です。IPv4 で可能なアドレスの総数によるサイズの制約のため、新しいプロトコルが開発されました。新しいプロトコルは IPv6 と呼ばれ、より多くのアドレスを使用できるようになり、採用が増えています。
#UDP って何だろう
ユーザーデータグラムプロトコル (UDP) は、ビデオの再生やDNSルックアップなど、特に時間に敏感な伝送のためにインターネット全体で使用される通信プロトコルです。データが転送される前に正式に接続を確立しないことで通信を高速化します。これにより、データを非常に高速に転送できますが、パケットが転送中に失われる可能性があり、DDoS 攻撃の形で悪用される可能性があります。
#UDP はどのように機能するの?
すべてのネットワーク プロトコルと同様に、UDP はネットワーク内の 2 台のコンピューター間でデータを転送するための標準化された方法です。他のプロトコルと比較して、UDP はこのプロセスを簡単な方法で実行します。つまり、最初に接続を確立したり、パケットの順序を示したり、意図したとおりに到着したかどうかを確認したりすることなく、パケット (データ転送の単位) をターゲット コンピュータに直接送信します。(UDP パケットは「データグラム」と呼ばれます。)
UDP は、TCPより高速ですが、信頼性が低くなります。TCP は、もう 1 つの一般的な転送プロトコルです。TCP 通信では、2 台のコンピュータが「ハンドシェイク」と呼ばれる自動化されたプロセスを介して接続を確立することから始めます。このハンドシェイクが完了して初めて、一方のコンピュータが他方のコンピュータに実際にデータパケットを転送します。
UDP 通信は、このプロセスを通過しません。代わりに、一方のコンピュータがもう一方のコンピュータにデータの送信を開始できます。
さらに、TCP 通信は、データ パケットを受信する順序を示し、パケットが意図したとおりに到着することを確認します。パケットが到着しない場合 (たとえば、中間ネットワークの輻輳が原因で)、TCP はパケットの再送信を要求します。UDP 通信には、この機能は含まれていません。
これらの違いにより、いくつかの利点が生まれます。UDP は「ハンドシェイク」やデータが正しく到着したかどうかのチェックを必要としないため、TCP よりもはるかに高速にデータを転送できます。
ただし、この速度にはトレードオフが伴います。UDP データグラムが転送中に失われた場合、再送信されません。その結果、UDP を使用するアプリケーションは、エラー、損失、および複製を許容できる必要があります。
(技術的には、このようなパケット損失は、インターネットの構築方法の結果というよりも、UDP の欠陥ではありません。ほとんどのネットワークルーターは、設計上、パケットの順序付けと到着確認を実行しません。これは、実現不可能な量の追加メモリが必要になるためです。TCP はアプリケーションで必要なときにこのギャップを埋める方法です)
#どの種類のサービスが UDP に依存するの?
UDP は、通常、時間に制約のある通信で使用され、待機するよりも時々パケットをドロップする方がよい場合があります。音声とビデオのトラフィックは、時間に敏感で、ある程度の損失を処理するように設計されているため、このプロトコルを使用して送信されます。たとえば、多くのインターネット ベースの電話サービスで使用されている VOIP (ボイスオーバーIP) は、UDP 上で動作します。これは、静かな電話での会話の方が、はっきりしているが大幅に遅れている会話よりも好ましいためです。
これにより、UDP はオンラインゲームの理想的なプロトコルにもなります。同様に、DNS サーバーはどちらも高速で効率的である必要があるため、UDP 経由でも動作します。
#UDP は DDoS 攻撃でどのように使用されるの?
パケット損失のような UDP の「リスク」は、ほとんどのユースケースでは深刻な問題ではありません。ただし、UDP は悪意のある目的で悪用される可能性があります。UDP はハンドシェイクを必要としないため、攻撃者は、通信を開始するためのサーバーの許可を最初に取得しなくても、対象のサーバーを UDP トラフィックで「フラッディング」できます。
典型的な UDP フラッド攻撃では、大量の UDP データグラムがターゲット コンピュータのランダムなポートに送信されます。これにより、ターゲットは同じくらい多くのICMPパケットで応答するようになります。これは、それらのポートが到達不能であることを示しています。不正な各データグラムに対応するために必要なコンピューティングリソースがターゲットを使い果たし、正当なトラフィックへのサービス拒否を引き起こす可能性があります。組織は、さまざまな方法で UDP フラッド攻撃を防御できます。1 つは ICMP パケットの応答速度を制限することですが、このアプローチでは正当なパケットを除外することもできます。もう 1 つの方法は、多くの分散データセンターの中間ネットワークを介して UDP トラフィックを受信して応答し、単一のオリジンサーバーが不正な要求でいっぱいになるのを防ぐことです。