HTTP、TCP、UDP、Socket、WebSocket を 1 つの記事で理解する

再版: HTTP、TCP、UDP、ソケット、WebSocket を理解するための 1 つの記事 - 技術チュートリアル - Tunan Navigation

1. この一連のキーワードの違いは何ですか?

名前があるところには定義があり、理解の前提は常にその定義を理解することでした。これは、台形の定義を説明せよと言うようなものです。定義を知らないと、平行四辺形を特殊な台形として扱い、TCP とソケットを混同し、さらには TCP 接続とソケット接続を混同する可能性があります。と HTTP 長い接続と短い接続の違いは何ですか。

実際、違いを理解するのは簡単です。その前に、OSI 7 層モデルといわゆる 5 層モデルという概念を明確にする必要があります。

OSI 7 層モデルは、全能の国際標準化機構 (ISO) が世界中のさまざまなコンピュータを相互接続するために提案した理想的な標準であり、端的に言えば、理想と現実のギャップは 7 層間のギャップです。モデルと 5 層モデル。具体的な分類は以下の通りです。

7層モデル

5層モデル

4層モデル

アプリケーション層

プレゼンテーション層

アプリケーション層

アプリケーション層

セッション層

トランスポート層

トランスポート層

トランスポート層

ネットワーク層

ネットワーク層

ネットワーク層

データリンク層

データリンク層

リンク層/エンティティ層

物理層

物理層

7 層モデルの上位 3 層は TCP/IP 5 層モデルであるアプリケーション層に分類され、5 層モデルの下位 2 層はリンク層またはエンティティ層に分類されます。 4層モデルです。
つまり、いわゆる 5 層や 4 層は、実際には理解を容易にするために形成された暗黙のルールとみなすことができ、具体的な実装は依然として 7 層の基準に基づいている必要があります。結局のところ、各層には独自の機能があり、各層の機能を完了するには、全員が関連するルール、つまり合意を遵守する必要があります。したがって、モデルが 5 層であるか 4 層であるかについては、あまり意識する必要はありません。行き来するときのレイヤーは数層で十分です。

それでは、最初の質問に戻りますが、この一連のキーワードの違いは何でしょうか?

  • 本質的に、HTTP、WebSocket、TCP、UDP、および IP はすべてプロトコルですが、TCP/IP はさまざまなプロトコルの組み合わせです。プロトコル スタック、プロトコル ファミリ、TCP/IP モデルなどと呼ぶこともできます。幸せになれ、とにかくそれらは無で食べられないものであり、それらはすべて対応する機能を完了するために策定された統一的な規則です。
    そしてSocket(ソケット)は操作できる実物です。Socket の本質は、先祖による TCP/IP プロトコル ファミリの抽象化またはカプセル化である API であり、TCP/IP プロトコルを操作して Socket 接続を確立するための入り口を提供するファサードのようなものです。このソケットは、Unix のソケットではなく、ネットワーク プログラミングのソケットを指すことに注意してください。概念は似ていますが、Unix のソケットは、これらの厄介なプロトコルに基づいているのではなく、オペレーティング システム自体のファイル システムに基づいています。

  • レイヤ化の観点から見ると、HTTP と WebSocket はアプリケーション層プロトコル、TCP と UDP はトランスポート層プロトコル、IP はネットワーク層プロトコルです。

次に、これらのキーワード間の具体的な関係は何でしょうか?

1.TCPとUDP

TCP はコネクション指向の伝送制御プロトコルです。TCP 接続後、クライアントとサーバーは相互にメッセージを送受信できます。クライアントまたはサーバーがアクティブに切断するまで、接続は常に存在するため、これをロング接続と呼びます。特徴: 時間のかかる接続、データ送信のサイズ制限なし、正確で信頼性の高い、早い者勝ち。
UDP はコネクションレス型のユーザー データグラム プロトコルです。いわゆるコネクションレスとは、データを送信する前に情報を交換する必要がないことを意味します。接続を確立するためのハンドシェイクのプロセスはありません。指定されたアドレスに対応するデータを直接送信するだけで済みます。そして港。したがって、UDP は、不安定性、高速性、およびブロードキャスト性という特徴を備えていますが、一般にデータ パケットは 64KB に制限されており、必ずしも最初の送信が最初になるとは限りません。

2.HTTP

HTTP は TCP プロトコルに基づくアプリケーションです。リクエスト時には、TCP 接続を確立する必要があり、リクエスト パケットにはリクエスト メソッド、URI、プロトコル バージョンなどの情報が含まれている必要があります。リクエストが完了すると、接続が確立されます。要求/応答操作を完了するために切断されます。したがって、これはショート接続と呼ばれます。
HTTP/1.1 のキープアライブによって維持される長時間接続は、各 HTTP リクエストにおける TCP 接続の 3 ウェイ ハンドシェイクのトラブルとリソース オーバーヘッドを最適化するためであり、TCP 接続は 1 つだけ確立され、リクエスト/応答は 1 回で完了します。このチャンネルを複数回操作します。
サーバーはメッセージをクライアントにアクティブにプッシュできないことに注意してください。

3.Webソケット

WebSocket もプロトコルの 1 つであり、これも TCP プロトコルに基づいています。具体的なプロセスとしては、WebSocket が最初に「アップグレード」とマークされたリクエストを HTTP 経由で送信し、サーバーが解析後に TCP 接続の確立を開始することで、HTTP の長い接続のリクエストごとにヘッダーをアップロードする冗長性が節約されます。ただし、WebSocket は Web アプリケーションだけでサポートされているわけではありません。

4.ソケット接続とTCP接続

実際、これは単なる言葉遊びです。ソケット接続を確立するには、少なくとも 1 組のソケット (ソケット) が必要であり、ソケット接続の作成には、異なるトランスポート層プロトコル (TCP または UDP) を指定できるため、TCP を使用して確立する場合は、コネクション、Socketコネクション TCPコネクションとみなされます。UDPはコネクションレス型です。

5.ソケットとWebSocket

これら 2 つは名前は似ていますが、Java と JavaScript が互いに何の関係もないのと同じように、まったく異なる概念です。Socket は、Socket 接続を確立するための一連のプロトコルによってカプセル化されたインターフェイスです。WebSocket は Html5 の製品ですが、ブラウザ アプリケーションに限定されません。C、C++、Python など、多くの言語が WebSocket をサポートしています。

6. HTTP、WebSocket、TCPの関係

HTTP 通信プロセスは、「あなたがプッシュし、私が行く」方式に属します。クライアントがリクエストを送信しない場合、サーバーはクライアントにデータを送信できません。最初の HTTP リクエストの後、WebSocket は TCP チャネルを使用して双方向コミュニケーション。したがって、HTTP と WebSocket はどちらも TCP プロトコルに基づいていますが、2 つはまったく異なる通信方式です。

おすすめ

転載: blog.csdn.net/beenles/article/details/123503890