
中程度初級DevOps
TCP プロトコルと UDP プロトコルの主な違いは何ですか?
要点
TCP は接続指向で信頼性の高いプロトコルであり、配信、順序付け、
オーバーヘッドを犠牲にしてエラーチェックを行います。 UDP はシンプルなコネクションレス型プロトコルです
配達や注文の保証はありませんが、より速くて軽いです。
TCP と UDP は、IP 上で実行される 2 つの主要なトランスポート層プロトコルです。主な違い: TCP はコネクション指向で信頼性が高いのに対し、UDP はコネクションレスであり、「ファイア アンド フォーゲット」ベースで動作します。
TCP (RFC 9293)
- 接続指向。 データを送信する前に、エンドポイントは 3 ウェイ ハンドシェイク (3WHS): SYN → SYN-ACK → ACK を実行し、初期シーケンス番号を同期します。
- 信頼性が高く、順序付けられています。 各バイトにはシーケンス番号が付けられます。受信側は確認応答 (ACK) を送信し、失われたセグメントが再送信され、データが元の順序で再組み立てされます。整合性はチェックサムで検証されます。 RFC 9293 には、TCP が「信頼性の高い、順序どおりのバイトストリーム サービスを提供する」と記載されています。
- バイト ストリーム、メッセージ境界なし。 TCP は非構造化バイト ストリームを配信します。メッセージ境界は保持されません (アプリケーションは独自のメッセージをフレーム化する必要があります)。対照的に、UDP はメッセージ指向です。各データグラムは個別の完全な単位として配信されるか、まったく配信されません (1 つの sendto = 1 recvfrom)。
- フローと輻輳の制御。 TCP は送信速度を調整して、受信側もネットワークも過負荷にならないようにします。
- トレードオフ: オーバーヘッドとレイテンシーが増加し、ヘッダーが大きくなります — 20 ~ 60 バイト (オプションなしで 20、MSS、ウィンドウ スケーリング、SACK などのオプションで拡張可能)。
UDP (RFC 768)
- コネクションレス ハンドシェイクはありません。各データグラムは独立しています。
- 保証はありません。 RFC は「配信と重複保護は保証されない」と明示的に述べています。つまり、UDP は失われたパケット、重複したパケット、または順序が乱れたパケットを回復しません。
- 8 バイトのヘッダーを修正し、送信元ポート、宛先ポート、長さ、チェックサムの 4 つのフィールドのみを追加しました。
- 利点: 遅延とオーバーヘッドが低く、さらにブロードキャスト/マルチキャストをサポートします。
いつどれを使用するか
- TCP: Web (HTTP/HTTPS over TCP)、電子メール、ファイル転送、SSH — データの整合性が重要なあらゆる場所。
- UDP: DNS ルックアップ、オンライン ゲーム、VoIP、ライブ ビデオ ストリーミング - 単一のパケット損失よりも速度が重要な場合。
共通のフォローアップポイント
- UDP 自体はデータを順序付けしませんが、アプリケーションは独自のロジックをその上に重ねることができます (QUIC はこれを UDP 上で行います)。
- HTTP/3 は UDP 上の QUIC で実行され、HTTP/1.1 および HTTP/2 は TCP 上で実行されます。
- UDP チェックサムは、IPv4 では技術的にオプションです (ゼロ値は「計算されない」ことを意味します) が、IPv6 では必須です。
