tcp と udp の違いは次のとおりです: 1. udp はコネクションレス型、tcp はコネクション型; 2. udp は信頼性の低い送信、tcp は信頼性のある送信; 3. udp はメッセージ送信型、tcp はバイトストリーム伝送を重視しています。
比較:
(学習ビデオの推奨事項: Java ビデオ チュートリアル)
UDP
UDP プロトコルの正式名は User Datagram Protocol で、ネットワーク内で TCP プロトコルと同様にデータ パケットを処理するために使用され、コネクションレス型のプロトコルです。 OSI モデルでは、4 番目の層であるトランスポート層が IP プロトコルの上位層になります。 UDP には、データ パケットのグループ化、アセンブリが提供されておらず、データ パケットの並べ替えができないという欠点があります。つまり、メッセージが送信された後、メッセージが安全かつ完全に到着したかどうかを知ることが不可能です。
これには次の特徴があります:
1. コネクションレス指向
まず第一に、UDP はデータを送信する前に接続を確立するために 3 ウェイ ハンドシェイクを実行する必要がありません。 TCP と同様に、データを送信して送信を開始します。また、これはデータ パケットのポーターにすぎず、データ パケットの分割や結合操作は実行しません。
具体的には:
送信側で、アプリケーション層はデータをトランスポート層の UDP プロトコルに渡します。UDP はデータに UDP ヘッダーを追加するだけです。UDP プロトコルでは、その後、ネットワーク層に渡されます。受信側では、ネットワーク層がデータをトランスポート層に渡します。UDP は IP ヘッダーのみを削除し、スプライシング操作を行わずにアプリケーション層に渡します。
2.ユニキャストとマルチキャスト、ブロードキャスト機能
#UDP は 1 対 1 の送信だけでなく、1 対多、多対多、多対 1 の送信もサポートします。 UDP は、ユニキャスト、マルチキャスト、ブロードキャストを提供します。 3. UDP はメッセージ指向です送信側の UDP はメッセージをアプリケーション プログラムに配信し、ヘッダーを追加した後、IP 層に配信します。 UDP は、アプリケーション層によって渡されたパケットをマージも分割もせず、これらのパケットの境界を保持します。したがって、アプリケーションは適切なサイズのメッセージを選択する必要があります4. 信頼性の低さまず、信頼性の低さは接続の欠如に反映され、通信のために接続を確立する必要はありません。いつでも送信できますが、このような状況は確かに信頼できません。 また、受信したデータはすべて転送され、データはバックアップされません。データを送信する場合、相手がデータを正しく受信したかどうかは関係ありません。 さらに、ネットワーク環境の良し悪しはありますが、UDP は輻輳制御がないため常に一定の速度でデータを送信します。ネットワーク状況が悪くても送信速度は調整されません。この実装の欠点は、ネットワーク状態が良くない場合にパケット損失が発生する可能性があることですが、利点も明らかです。リアルタイム要件が高い一部のシナリオ (電話会議など) では、UDP の代わりに UDP を使用する必要があります。 TCP。 5. ヘッダーのオーバーヘッドは小さく、データ メッセージの送信時に非常に効率的です。 TCPあるコンピュータが別のコンピュータと通信する場合、データを正しく送受信できるように、2 台のコンピュータ間の通信はスムーズで信頼性が高い必要があります。たとえば、Web ページを表示したり電子メールをチェックしたりする場合、コンテンツを失うことなく Web ページを完全かつ順序どおりに表示したいと考えます。ファイルをダウンロードするときは、ファイルの一部ではなく完全なファイルを取得したいと考えます。データが失われたり順序が崩れたりすると、期待した結果が得られないため、TCP が使用されます。 TCP プロトコルの正式名は Transmission Control Protocol で、IETF の RFC 793 で定義された、コネクション型で信頼性の高いバイト ストリーム ベースのトランスポート層通信プロトコルです。 TCP は、接続指向の信頼性の高いストリーミング プロトコルです。ストリームとは、途切れることのないデータ構造を指し、排水管を流れる水のようなものと考えることができます。 1. TCP 接続プロセス最初のハンドシェイククライアントは接続要求セグメントをサーバーに送信します。このメッセージセグメントには、独自のデータ通信の初期シーケンス番号が含まれます。リクエストが送信されると、クライアントは SYN-SENT 状態に入ります。 2 回目のハンドシェイクサーバーが接続要求セグメントを受信した後、接続に同意した場合は、データ通信用の独自の初期シーケンス番号も含まれる応答を送信します。送信が完了すると、SYN-RECEIVED 状態になります。 3 回目のハンドシェイククライアントは接続承認応答を受信すると、確認メッセージもサーバーに送信します。クライアントがこのメッセージ セグメントを送信すると ESTABLISHED 状態になり、サーバーもこの応答を受信すると ESTABLISHED 状態になり、この時点で接続が正常に確立されます。 ここで質問があるかもしれません: TCP では、接続を確立するのに 2 回ではなく 3 回のハンドシェイクが必要なのはなぜですか?これは、無効な接続要求セグメントがサーバーによって受信され、エラーが発生するのを防ぐためです。 2. TCP の切断TCP は全二重であり、切断時には両端が FIN と ACK を送信する必要があります。 最初のハンドシェイククライアント A がデータ送信が完了したと判断した場合、サーバー B に接続解放要求を送信する必要があります。 2回目の握手B 接続解放要求を受信した後、アプリケーション層に TCP リンクを解放するように指示します。その後、ACK パケットが送信され、CLOSE_WAIT 状態に入り、A から B への接続が解放され、A が送信したデータが受信されなくなったことを示します。ただし、TCP 接続は双方向であるため、B は引き続き A にデータを送信できます。
3回目のハンドシェイク
この時点でまだ未完了のデータがある場合、Bは送信を続け、完了後、Aにコネクション解放要求を送信し、Bは、 LAST-ACK 状態。
4 回目のハンドシェイク
A は解放要求を受信後、B に確認応答を送信します。このとき、A は TIME-WAIT 状態になります。この状態は 2MSL (セグメントの最大有効期間。メッセージ セグメントがネットワーク内で存続する時間を指し、タイムアウト後に破棄されます) の間続きます。この期間内に B からの再送信要求がない場合、CLOSED 状態に移行します。州。 B が確認応答を受信すると、B も CLOSED 状態になります。
3. TCP プロトコルの特徴
接続指向
接続指向とは、データを送信する前に両端で接続を確立する必要があることを意味します。接続方法は、確実な接続が可能な「3ウェイハンドシェイク」を採用しています。接続を確立すると、信頼性の高いデータ送信の基礎が築かれます。
ユニキャスト送信のみをサポート
各 TCP 送信接続はエンドポイントを 2 つだけ持つことができ、ポイントツーポイントのデータ送信のみを実行でき、マルチキャストおよびブロードキャスト送信方法はサポートしません。
バイト ストリーム志向
TCP は、UDP のようにメッセージを独立して送信せず、メッセージ境界を保持せずにバイト ストリームでメッセージを送信します。
信頼性の高い伝送
信頼性の高い伝送では、パケット損失とエラーの判断は、TCP セグメント番号と確認番号に依存します。 TCP はメッセージ伝送の信頼性を確保するために、各パケットにシーケンス番号を付与すると同時に、受信側エンティティに送信されたパケットが順番に受信されることを保証します。次に、受信側エンティティは、正常に受信したバイトに対して対応する確認応答 (ACK) を送り返します。送信側エンティティが妥当な往復遅延 (RTT) 以内に確認応答を受信しない場合、対応するデータ (失われたとみなされる) が再送信されます。 。
輻輳制御の提供
ネットワークが輻輳している場合、TCP はネットワークに注入されるデータの速度と量を減らし、輻輳を軽減できます
TCP は全二重通信を提供します
TCP では、TCP 接続の両端に双方向通信のデータを一時的に保存するキャッシュがあるため、通信の両側のアプリケーションがいつでもデータを送信できます。もちろん、TCP はデータ セグメントをすぐに送信することも、一定期間キャッシュしてより多くのデータ セグメントを一度に送信することもできます (最大データ セグメント サイズは MSS によって異なります)
関連推奨事項: phpトレーニング
以上がTCPとUDPの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。