TCPとUDP

インターネットプロトコル(IP)トラフィックには2つのタイプがあります。 それらはTCPまたはTransmission Control ProtocolおよびUDPまたはUser Datagram Protocolです。 TCPは接続指向です。接続が確立されると、データを双方向に送信できます。 UDPは、よりシンプルでコネクションレス型のインターネットプロトコルです。 UDPを使用して、複数のメッセージがパケットとしてチャンクで送信されます。

比較表

TCP対UDP比較チャート
TCP UDP
の頭字語伝送制御プロトコルユーザーデータグラムプロトコルまたはユニバーサルデータグラムプロトコル
接続Transmission Control Protocolは、接続指向のプロトコルです。ユーザーデータグラムプロトコルは、コネクションレスプロトコルです。
関数メッセージがインターネットを介して1つのコンピューターから別のコンピューターに移動するとき。 これは接続ベースです。UDPは、メッセージの転送または転送で使用されるプロトコルでもあります。 これは接続ベースではありません。つまり、あるプログラムが別のプログラムに大量のパケットを送信でき、それが関係の終わりになります。
使用法TCPは高い信頼性を必要とするアプリケーションに適しており、送信時間はそれほど重要ではありません。UDPは、ゲームなどの高速で効率的な伝送を必要とするアプリケーションに適しています。 UDPのステートレスの性質は、膨大な数のクライアントからの小さなクエリに応答するサーバーにも役立ちます。
他のプロトコルで使用HTTP、HTTP、FTP、SMTP、TelnetDNS、DHCP、TFTP、SNMP、RIP、VOIP。
データパケットの順序TCPは、指定された順序でデータパケットを再配置します。すべてのパケットは互いに独立しているため、UDPには固有の順序はありません。 順序付けが必要な場合は、アプリケーション層で管理する必要があります。
転送速度TCPの速度はUDPより遅いです。エラー回復が試行されないため、UDPは高速です。 これは「ベストエフォート」プロトコルです。
信頼性転送されたデータがそのまま残り、送信されたのと同じ順序で到着するという絶対的な保証があります。送信されたメッセージまたはパケットがまったく届かないという保証はありません。
ヘッダーサイズTCPヘッダーサイズは20バイトですUDPヘッダーサイズは8バイトです。
共通のヘッダーフィールド送信元ポート、宛先ポート、チェックサム送信元ポート、宛先ポート、チェックサム
データのストリーミングデータはバイトストリームとして読み取られ、シグナルメッセージ(セグメント)の境界に区別される指示は送信されません。パケットは個別に送信され、到着した場合にのみ整合性がチェックされます。 パケットには、受信時に優先される明確な境界があります。つまり、受信側ソケットでの読み取り操作では、最初に送信されたときにメッセージ全体が生成されます。
重量TCPは重いです。 TCPでは、ユーザーデータを送信する前に、ソケット接続をセットアップするために3つのパケットが必要です。 TCPは信頼性と輻輳制御を処理します。UDPは軽量です。 メッセージの順序付け、追跡接続などはありません。IPの上に設計された小さなトランスポート層です。
データフロー制御TCPはフロー制御を行います。 TCPでは、ユーザーデータを送信する前に、ソケット接続をセットアップするために3つのパケットが必要です。 TCPは信頼性と輻輳制御を処理します。UDPにはフロー制御のオプションはありません
エラーチェックTCPはエラーチェックとエラー回復を行います。 誤ったパケットが送信元から宛先に再送信されます。UDPはエラーチェックを行いますが、エラーのあるパケットを単に破棄します。 エラー回復は試行されません。
田畑1.シーケンス番号、2。AcK番号、3。データオフセット、4。予約済み、5。コントロールビット、6。ウィンドウ、7。緊急ポインタ8.オプション、9。パディング、10。チェックサム、11。ソースポート、 12.宛先ポート1.長さ、2。送信元ポート、3。宛先ポート、4。チェックサム
了承謝辞セグメント謝辞なし
ハンドシェークSYN、SYN-ACK、ACKハンドシェイクなし(コネクションレスプロトコル)

データ転送機能の違い

TCPは、ユーザーからサーバー、またはその逆へのバイトストリームの信頼性の高い順序付き配信を保証します。 UDPはエンドツーエンド接続専用ではなく、通信は受信者の準備状態をチェックしません。

信頼性

TCPは、パーツが失われた場合にメッセージの確認と再送信を管理するため、より信頼性が高くなります。 したがって、欠損データはまったくありません。 UDPは、確認、タイムアウト、再送信の概念が存在しないため、通信が受信者に到達したことを保証しません。

ご注文

TCP送信は順番に送信され、同じ順番で受信されます。 データセグメントが間違った順序で到着した場合、TCPはアプリケーションを並べ替えて配信します。 UDPの場合、受信したアプリケーションに到達したときに、送信されたメッセージシーケンスが維持されない場合があります。 メッセージが受信される順序を予測する方法はまったくありません。

接続

TCPは、ソケット接続に3つのパケットを必要とする重い接続であり、輻輳制御と信頼性を処理します。 UDPは、IP上に設計された軽量のトランスポート層です。 追跡接続やメッセージの順序付けはありません。

転送方法

TCPはデータをバイトストリームとして読み取り、メッセージはセグメント境界に送信されます。 UDPメッセージは個別に送信されるパケットであり、到着時に整合性がチェックされます。 パケットには境界が定義されていますが、データストリームには境界がありません。

エラー検出

UDPは「ベストエフォート」ベースで機能します。 このプロトコルはチェックサムによるエラー検出をサポートしていますが、エラーが検出されると、パケットは破棄されます。 そのエラーから回復するためのパケットの再送信は試行されません。 これは、UDPは通常、ゲームや音声送信などの時間に敏感なアプリケーション向けであるためです。 エラーからの回復は無意味です。なぜなら、再送信されたパケットが受信されるまでに、それは何の役にも立たないからです。

TCPは、エラー検出とエラー回復の両方を使用します。 エラーはチェックサムを介して検出され、パケットにエラーがある場合は、受信者によって確認されず、送信者による再送信がトリガーされます。 この動作メカニズムは、再送信を伴う肯定応答(PAR)と呼ばれます。

TCPとUDPの仕組み

TCP接続は、3ウェイハンドシェイクを介して確立されます。これは、接続を開始および確認するプロセスです。 接続が確立されると、データ転送を開始できます。 送信後、確立されたすべての仮想回線を閉じることにより、接続が終了します。

UDPは、信頼性、順序、またはデータの整合性を保証するために、暗黙のハンドシェイクダイアログなしの単純な伝送モデルを使用します。 したがって、UDPは信頼性の低いサービスを提供し、データグラムは順不同で到着したり、重複して表示されたり、予告なく欠落したりする場合があります。 UDPは、エラーのチェックと修正が不要であるか、アプリケーションで実行されると想定し、ネットワークインターフェイスレベルでのこのような処理のオーバーヘッドを回避します。 TCPとは異なり、UDPはパケットブロードキャスト(ローカルネットワーク上のすべてに送信)およびマルチキャスト(すべてのサブスクライバに送信)と互換性があります。

TCPとUDPの異なるアプリケーション

Webブラウジング、電子メール、およびファイル転送は、TCPを使用する一般的なアプリケーションです。 TCPは、セグメントサイズ、データ交換のレート、フロー制御、ネットワークの輻輳を制御するために使用されます。 ネットワークインターフェイスレベルでエラー修正機能が必要な場合は、TCPをお勧めします。 UDPは、時間に敏感なアプリケーションや、多数のクライアントからの小さなクエリに応答するサーバーで主に使用されます。 UDPはパケットブロードキャストと互換性があります-ネットワーク上のすべてへの送信とマルチキャスト-すべてのサブスクライバへの送信。 UDPは、ドメインネームシステム、Voice over IP、Trivial File Transfer Protocol、およびオンラインゲームで一般的に使用されています。

ゲームサーバーのTCPとUDP

超多人数参加型オンライン(MMO)ゲームの場合、開発者は多くの場合、UDPまたはTCPの永続的な接続のどちらを使用するかを選択する必要があります。 TCPの利点は、永続的な接続、信頼性、および任意のサイズのパケットを使用できることです。 このシナリオでのTCPの最大の問題は、輻輳制御アルゴリズムです。これは、パケット損失を帯域幅制限の兆候として扱い、パケットの送信を自動的に調整します。 3GまたはWi-Fiネットワークでは、これにより大幅な遅延が発生する可能性があります。

経験豊富な開発者ChristofferLernöは、長所と短所を比較検討し、ゲームにTCPを使用するかUDPを使用するかを選択するために次の基準を推奨しています。

  • 時々遅延が発生しても問題ない場合は、HTTP over TCPを使用して、ときどきクライアントが開始するステートレスクエリを作成します。
  • クライアントとサーバーの両方が独立してパケットを送信するが、時々の遅延は問題ない場合(オンラインポーカー、多くのMMOなど)、永続的なプレーンTCPソケットを使用します。
  • クライアントとサーバーの両方が独立してパケットを送信し、時々ラグが発生しない場合は、UDPを使用します(たとえば、ほとんどのマルチプレイヤーアクションゲーム、一部のMMO)。

関連記事