ホームページ よくある問題 TCPとUDPの違いは何ですか

TCPとUDPの違いは何ですか

Nov 11, 2020 am 09:14 AM
tcp udp

tcp と udp の違いは次のとおりです: 1. udp はコネクションレス型、tcp はコネクション型; 2. udp は信頼性の低い送信、tcp は信頼性のある送信; 3. udp はメッセージ送信型、tcp はバイトストリーム伝送を重視しています。

TCPとUDPの違いは何ですか

比較:

(学習ビデオの推奨事項: Java ビデオ チュートリアル)

TCPとUDPの違いは何ですか

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP および UDP プロトコルを使用して非同期通信を実装する方法 PHP および UDP プロトコルを使用して非同期通信を実装する方法 Jul 30, 2023 pm 07:31 PM

PHP および UDP プロトコルを使用して非同期通信を実装する方法 最新のインターネット アプリケーションでは、非同期通信は非常に重要な方法となっています。非同期通信を使用すると、メインスレッドをブロックすることなくユーザーリクエストを同時に処理できるため、システムのパフォーマンスと応答速度が向上します。人気のバックエンド プログラミング言語である PHP は、UDP プロトコルを使用して非同期通信を実現する方法を教えてください。この記事では、PHP で UDP プロトコルを使用して簡単な非同期通信を実装する方法を、具体的なコード例を添付して紹介します。 1. UDP プロトコルの概要 U

win10でtcp/ipプロトコルをリセットするにはどうすればよいですか? Windows 10でTCP/IPプロトコルスタックをリセットする方法 win10でtcp/ipプロトコルをリセットするにはどうすればよいですか? Windows 10でTCP/IPプロトコルスタックをリセットする方法 Mar 16, 2024 am 11:07 AM

win10でtcp/ipプロトコルをリセットするにはどうすればよいですか?実際、その方法は非常に簡単で、ユーザーがコマンド プロンプトに直接入力し、ctrl Shift Enter キーの組み合わせを押して操作を実行するか、reset コマンドを直接実行して設定することができます。 Windows 10 で TCP/IP プロトコル スタックをリセットする方法をユーザーに注意深く紹介します。 Windows 10 で tcp/ip プロトコル スタックをリセットする方法 1。 管理者権限 1. ショートカット キー win R を使用してファイル名を指定して実行ウィンドウを直接開き、「cmd」と入力し、ctrl Shift Enter キーの組み合わせを押し続けます。 2. または、スタート メニューでコマンド プロンプトを直接検索し、右クリックします。

UDP ポート番号とは何ですか? UDP ポート番号とは何ですか? Feb 23, 2023 pm 02:00 PM

一般的な UDP ポート番号は 53、69、161、2049、68、および 520 です。 UDP はポート番号を使用して、さまざまなアプリケーション用に独自のデータ送信チャネルを予約します: 1. ネットワーク ファイル システム (NFS)、ポート番号は 2049、2. 簡易ネットワーク管理プロトコル (SNMP)、ポート番号は 161、3. ドメイン名システム (DNS)、ポート番号は 53、4. 簡易ファイル転送システム (TFTP)、ポート番号は 69、5. 動的ホスト構成プロトコル (DHCP)、ポート番号は 68、6. ルーティング情報プロトコル、ポート番号は 520 などです。

TCPを使用してPythonでクライアントとサーバー間の会話を実装する方法 TCPを使用してPythonでクライアントとサーバー間の会話を実装する方法 May 17, 2023 pm 03:40 PM

TCP クライアント TCP プロトコルを使用して継続的な対話を実現するクライアントのサンプル コード: importsocket#クライアント設定 HOST='localhost'PORT=12345#TCP ソケットを作成し、サーバーに接続 client_socket=socket.socket(socket.AF_INET,socket . SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#ユーザー入力を取得 message=input("送信するメッセージを入力してください:&

また近いうちにお会いしましょう! TCP が 2 回振られるのを見たことがありますか? 4回の握手はどうなるの? また近いうちにお会いしましょう! TCP が 2 回振られるのを見たことがありますか? 4回の握手はどうなるの? Jul 24, 2023 pm 05:18 PM

ここで言う「コネクション指向」とは、コネクションを確立し、コネクションを利用し、コネクションを解放する必要があることを意味します。接続の確立とは、よく知られている TCP スリーウェイ ハンドシェイクを指します。接続を使用する場合、データは 1 回の送信と 1 回の確認の形式で送信されます。また、一般的な TCP 4 波である接続の解放もあります。

Java API開発におけるTCP通信にNetty4を使用する Java API開発におけるTCP通信にNetty4を使用する Jun 17, 2023 pm 11:18 PM

TCP は、コンピュータ ネットワーク通信プロトコルの一種であり、コネクション型の伝送プロトコルです。 Javaアプリケーション開発において、TCP通信はクライアントとサーバー間のデータ送信、音声や映像のリアルタイム送信など、さまざまなシーンで広く利用されています。 Netty4 は、サーバーとクライアント間のデータ交換プロセスを最適化し、効率性と信頼性を高めることができる、高性能、拡張性の高いネットワーク プログラミング フレームワークです。 TCP 通信に Netty4 を使用する具体的な実装手順は次のとおりです。

Java で単一の TCP 接続を使用して複数のファイルを送信するにはどうすればよいですか? Java で単一の TCP 接続を使用して複数のファイルを送信するにはどうすればよいですか? Apr 27, 2023 am 08:49 AM

1 つの TCP 接続を使用して複数のファイルを送信することについてこのブログが書かれているのはなぜですか?最近関連の本を読んでいるのですが、単に Socket を使ってプログラミングするのは問題ありませんが、これはいくつかの基本的な概念を確立するだけです。本当の問題に対してはまだ何もできません。ファイルを転送する必要がある場合、データ (バイナリ データ) を送信しただけのように見えますが、ファイルに関する一部の情報 (ファイル拡張子) が失われていることがわかります。そして、毎回 1 つのファイルを送信するために 1 つのソケットしか使用できないため、連続してファイルを送信する方法はありません (ファイルの送信を完了するにはストリームを閉じることに依存しているため、実際にはファイルの長さがわかりません。したがって、1 つのソケット接続がファイルを表す場合にのみファイルを送信できます)。

Java ネットワーク プログラミングでは、コネクションレス通信に UDP をどのように使用しますか? Java ネットワーク プログラミングでは、コネクションレス通信に UDP をどのように使用しますか? Apr 15, 2024 pm 12:51 PM

UDP (User Datagram Protocol) は、時間に敏感なアプリケーションで一般的に使用される軽量のコネクションレス型ネットワーク プロトコルです。これにより、アプリケーションは TCP 接続を確立せずにデータを送受信できるようになります。サンプル Java コードを使用して UDP サーバーとクライアントを作成できます。サーバーは受信データグラムをリッスンして応答し、クライアントはメッセージを送信して応答を受信します。このコードを使用して、チャット アプリケーションやデータ収集システムなどの実際のユースケースを構築できます。