TCPとUDPとは何ですか?簡単な説明

インターネットは、コンピュータ間で情報を交換するために2つのプロトコルに依存しています。これらの通信プロトコルは、一対一または一対多のいずれかの関係において、データ転送がどのように行われるかを決定するルールを定義します。トランスミッションコントロールプロトコル(TCP)とユーザーデータグラムプロトコル(UDP)は、ネットワークを介してデータを移動させるために使用できる2つのプロトコルです。これらは両方とも、OSIモデルのトランスポート層で機能します。

似ているようで異なる、これら2つのプロトコルはそれぞれ効率的に仕事をこなします。一方は接続指向であり、データ転送を開始する前に接続を確立する必要がありますが、もう一方は接続レスであり、宛先デバイスに事前に通知することなくデータを送信します。これらのプロトコルが行うことには、以下でわかるように、もっと多くのことがあります。この記事は、TCPとUDPに焦点を当てています — それらがどのように機能し、それぞれの利点、欠点、そして違いについてです。

## TCPとは何ですか?

Transmission Control Protocolは、インターネット上でのデータパケットの転送を主に扱う通信プロトコルです。オープンシステム間相互接続(OSI)モデルのトランスポート層(レイヤー4)で動作します。このプロトコルは、クライアントデバイス/アプリケーションとサーバー間のデータパケットの転送を支援します(UDPと共に)。

TCPは接続指向型であり、クライアントとサーバーがデータをどちらかの方向に送信する前に接続を確立しなければなりません。さらに、エラーをチェックし、データパケットが送信デバイスまたはアプリケーションが意図した順序で目的地に到着することを保証するため、信頼性の高いプロトコルです。

## TCPはどのように機能するのか?

TCPを使用する場合、クライアントとサーバーは、双方向のデータパケットの転送が始まる前に、三次ハンドシェイクとして知られる接続を確立します。三次ハンドシェイクが始まる前に、サーバーは接続を受け入れるためにポートでリスニングしていなければなりません。ハンドシェイクは、クライアントとサーバーの間でSYN、SYN/ACK、ACKとして知られる3つのメッセージ(またはフラグ)の交換から始まります。

以下で、交換プロセスのステップバイステップを見ていきましょう。

クライアントは、サーバーにSYNデータパケットを送信します。SYNパケットには、クライアントが割り当てるランダムなシーケンス番号(X)が含まれています。このパケットの目的は、サーバーが新しい接続に利用可能かどうかを確認することです。

サーバーはSYNパケットを受信し、SYN/ACKパケットを送信することでそれを認識します。サーバーは、クライアントが最初のSYNパケットに割り当てたシーケンス番号(X)に1を加えた数(1+X)を確認番号として設定し、別のランダムなシーケンス番号(Y)を設定します。したがって、サーバーはSYN/ACKパケットと共に2つのシーケンス番号をクライアントに送信します。

クライアントはサーバーからSYN/ACKパケットを受信し、ACKパケットを送信してそれを認識します。クライアントは、サーバーから受け取ったシーケンス番号(Y)に1を加えた数を確認番号として設定します。

3ウェイハンドシェイクプロセスが完了すると、クライアントとサーバーは互いにデータの送受信ができるようになります。

## TCPの利点と欠点

ほとんどのプロトコルと同様に、TCPも完璧ではありません。それには利点と欠点があります。以下でTCPを使用する際の長所と短所を見てみましょう。

## 利点

信頼できる

TCPは、データパケットが正しい順序で目的地に到着することを保証するため、信頼性があります。TCPがデータセグメントを送信するとき、タイマーを起動し、目的地からの確認を待ちます。確認が得られない場合、セグメントを再送します。さらに、データパケットが順不同で到着したときに知るために、シーケンシングを使用します。

2. エラー検出と回復

TCPは、パケットが目的地に到着した際に変更がないかを確認するために、エンドツーエンドのチェックサムを使用します。エラーがあるパケットは破棄し、送信者がそれらを再送するのを待ちます。さらに、データの重複も破棄します。

3. 混雑制御

TCPは、輻輳を処理するためにバッファリングとウィンドウ制御を使用します。TCP接続の受信側が一度に受け取れるよりも多くのデータパケットを受信すると、輻輳が発生することがあります。TCPは輻輳を処理するためにバッファを使用しますが、バッファがいっぱいになると、送信者が一度に送信できるデータの量を減らすためにウィンドウ制御を使用します。

## デメリット

低速

UDPに比べて、TCPは遅いです。まず、必要な3ウェイハンドシェイクに時間がかかります。次に、データ転送中にフロー制御、輻輳制御、およびエラーチェックが原因で速度が低下します。このような場合、TCPは信頼性のために速度を犠牲にします。

2. DoS攻撃に対して脆弱

TCPの3ウェイハンドシェイクは、DoS攻撃やDDoS攻撃に対して脆弱性を持っています。SYNフラッドはそのような攻撃の一つで、悪意のあるエンティティがSYNパケットでサーバーを氾濫させ、利用不可能にします。この攻撃の目的は、サーバーを圧倒させ、正当なリクエストに応答できなくすることです。

## UDPとは何ですか?

User Datagram Protocol (UDP)は、OSIモデルのトランスポート層で動作するTCPと同様の通信プロトコルです。TCPと異なり、接続レスプロトコルであり、クライアントがデータパケットを送信する前にサーバーとの接続を確立する必要がありません。その結果、3ウェイハンドシェイク、フロー制御、およびシーケンシングがありません。

UDPは、送信されたデータグラムが宛先に到着するか、またはクライアントが送信した順序で到着するかどうかを気にしません。これにより、TCPよりも信頼性が低くなりますが、確認応答を待ったりデータを再送信したりする必要がないため、速くなります。しかし、UDPはデータの整合性を重視しており、第三者がデータグラムを改ざんしていないことを確認するためにチェックサムを使用します。

## UDPの仕組みは?

UDPでは、データグラムが発信地から目的地へ移動するプロセスは簡単です。ネットワーク層から受け取ったIPパケットにヘッダーを追加した後、事前に接続を確立する必要なく、直接目的地のサーバーにデータグラムを送信します。このプロセスのシンプルな性質が、UDPを接続不要のプロトコルにしています。

さらに、UDPは、転送中のデータの損失が許容される時間に敏感な通信に最適です。たとえば、音声およびビデオ通信にUDPが使用されます。

UDPの利点と欠点

UDPのフロー制御とデータ再送信がないことは、利点でもあり欠点でもあります。以下で、UDPを使用する際の利点と欠点を見ていきます。

## 利点

1. 高速データ伝送

UDPは、宛先のコンピュータがさらにデータを受信する前にデータグラムを確認する必要がなく、データを再送信しないため、TCPよりも速いです。さらに、3ウェイハンドシェイクがないため、オーバーヘッドが少なく、データの送信がより速くなります。

2. エラー検出

TCPと同様に、UDPもエンドツーエンドのチェックサムを使用して、データグラムにエラーがないかを検出します。これにより、データの整合性を保ち、エラーのあるデータグラムを破棄します。再送信メカニズムがないため、UDPは破棄したデータグラムを回復または再送信しません。

## デメリット

信頼できない

接続を信頼性のあるものにする機能は、UDP接続には存在しません。TCPとは異なり、UDPは送信されたデータグラムが目的地に到達することを保証しません。その結果、データグラムにはタイマーがなく、受信デバイスによって認識される必要もありません。さらに、データグラムが適切な順序で目的地に到着することも保証されません。

2. 混雑制御なし

UDPには輻輳を制御するメカニズムがありません。データグラムを認識せず、ウィンドウを使用してデータ送信を制御しないため、輻輳を防ぐ方法がありません。その結果、大量のデータの突発は輻輳を引き起こす可能性があります。

## TCPとUDPの違い

以下では、接続指向のTCPと非接続のUDPの違いについて見ていきます。

1. 信頼性

TCPはUDPに比べてより信頼性の高いプロトコルです。TCPは、次のデータセグメントを送信する前に、データセグメントが目的地に到達したことを確認します。さらに、送信された順序と同じ順序でセグメントが到着することを保証し、目的地に到達しないデータは再送信します。加えて、TCPはフロー制御を使用して、クライアントがサーバーが処理できるよりも速くパケットを送信しないようにします。一方、UDPは上記のいずれも行わず、できるだけ早くデータを転送することをより重視します。

2. 速度

TCPの信頼性を高める機能が、それをTCPよりも遅くしています。3ウェイハンドシェイク、フロー制御、輻輳制御、再送信メカニズムはUDPには含まれていません。その結果、オーバーヘッドが少ないため、UDPはTCPよりも速いです。

3. 使用方法

TCPの接続指向のデータ転送は、信頼性が必要でデータの損失を許容できないアプリケーションに適しています。例えば、HTTP、SSH、FTP、SMTP、IMAPなどのプロトコルをサポートしています。一方、UDPの速度は、ライブビデオやオーディオチャット、Voice over IP、DNSリクエスト、オンラインゲームなど、データの損失を許容できる時間に敏感なアプリケーションやプロトコルに適しています。

## 結論

TCPとUDPは、インターネット上の通信の基盤です。これら2つのプロトコルがなければ、インターネットに接続されたデバイス同士が互いに通信することは困難になります。信頼性と正確性が必要な場合はTCPが適しています。一方、データパケットの損失をあまり気にせず、それらが目的地に速く到達することをより重視する場合はUDPが必要です。