TCP/IP、HTTP、ソケットの違い

高洛峰
リリース: 2016-12-13 09:54:59
オリジナル
1809 人が閲覧しました

ネットワークは下から上に

物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、プレゼンテーション層、アプリケーション層に分かれています。

予備的な理解により、IPプロトコルはネットワーク層に相当し、TCPプロトコルはトランスポート層に相当し、HTTPプロトコルはアプリケーション層に相当することがわかりました

この3つは本質的に比較不可能であり、

ソケットはTCP /IP プロトコルのカプセル化とアプリケーション (プログラマ レベル) の比較。

TPC/IP プロトコルは、主にネットワーク内でデータを送信する方法を解決するトランスポート層プロトコルであるとも言えます。

そして HTTP は、主にデータをパッケージ化する方法を解決するアプリケーション層プロトコルであるとも言えます。

TCP/IP と HTTP プロトコルの関係について、ネットワークには比較的分かりやすい紹介があります:

「データを送信するとき、私たちは (トランスポート層の) TCP/IP プロトコルしか使用できませんが、その中でこの場合、アプリケーション層が存在しない場合、データの内容を識別することができません

送信されたデータを意味のあるものにしたい場合は、アプリケーション層のプロトコルを使用する必要があります

HTTP、FTP など、多くのアプリケーション層のプロトコルがあります。 、TELNET など。独自のアプリケーション層プロトコルを定義することもできます。

WEB はアプリケーション層プロトコルとして HTTP テキスト情報をカプセル化し、それをトランスポート層プロトコルとして TCP/IP を使用します。 . ”

私たちが普段よく話すソケットとは何ですか? 上のソケットはTCP/IPプロトコルのカプセル化です。ソケット自体はプロトコルではなく、呼び出し側のインターフェース(API)です。

Socketを介して、TCP/IPプロトコルを使用できます。

実際、Socket には TCP/IP プロトコルとの必要な接続がありません。

ソケット プログラミング インターフェイスが設計されたとき、他のネットワーク プロトコルにも適応できることが期待されました。

つまり、Socket の出現は、プログラマーにとって TCP/IP プロトコル スタックの使用を容易にするだけです。これは、TCP/IP プロトコルの抽象化であり、

これは、次のような、私たちが知っている最も基本的な関数インターフェイスの一部を形成します。作成、リッスン、接続、受け入れ、送信、読み取り、書き込みなど。

インターネット上には、ソケットと TCP/IP プロトコルの関係について、より理解しやすい次のような記述があります。

「TCP/IP は、オペレーティング システムの動作メカニズムと同じように、単なるプロトコル スタックであり、

オペレーティングシステムが win32 プログラミングインターフェースなどの標準プログラミングインターフェースを提供するのと同じように、

プログラマが使用できるインターフェースも提供します。ネットワーク開発です。

TCP/IP プロトコルに関しては、インターネット上のこの種の情報の量と深さの点で過大評価することはできません。

これに関する古典的な書籍(例えば、「TCP/IP 詳解: 第 1 巻、第 2 巻、第 3 巻」)を購入して勉強する予定です。今日は、アプリケーションとプログラミング インターフェイスに基づいた知識をまとめます。 TCP/IP プロトコル、つまり、先ほどよく話した HTTP と Socket です。

CSDN には、より鮮明な説明があります。HTTP はデータのカプセル化または表示の特定の形式を提供する自動車であり、ソケットはネットワーク通信機能を提供するエンジンです。

実際には、トランスポート層のTCPはネットワーク層のIPプロトコルをベースにしており、アプリケーション層のHTTPプロトコルはトランスポート層のTCPプロトコルをベースにしていると述べたように、Socket自体はプロトコルではありません。上記では、TCP または UDP プログラミング用のインターフェイスのみを提供します。

以下は筆記試験や面接でよく出てくる重要な概念を抜粋してまとめたものです。

1. TCP 接続の 3 ウェイ ハンドシェイクとは何ですか?

最初のハンドシェイク: クライアントは syn パケット (syn=j) をサーバーに送信し、サーバーが確認するのを待ちます

2 回目のハンドシェイク: サーバーは syn パケットを受信し、クライアントの SYN (ack=j+1) を確認すると同時に SYN パケット (syn=k)、つまり SYN+ACK パケットを送信する必要があります。時間になると、サーバーは SYN_RECV 状態に入ります。

3 回目のハンドシェイク: クライアント クライアントはサーバーから SYN+ACK パケットを受信し、パケットの送信後、確認パケット ACK (ack=k+1) をサーバーに送信します。クライアントとサーバーは ESTABLISHED 状態に入り、3 ウェイ ハンドシェイクを完了します。

ハンドシェイクプロセス中に送信されるパケットにはデータは含まれません。スリーウェイハンドシェイクが完了すると、クライアントとサーバーは正式にデータの送信を開始します。

理想的には、TCP接続が確立されると、どちらかが積極的に接続を閉じるまでTCP接続が維持されます。

切断時には、サーバーとクライアントの両方が TCP 接続の切断要求をアクティブに開始できます。切断プロセスには「4 ウェイ ハンドシェイク」が必要です (プロセスについては詳しく説明しません。これはサーバーとクライアントの間の対話です)。 )

2. Socket を使用してネットワーク接続を確立する手順

Socket 接続を確立するには、少なくとも 1 組のソケットが必要で、そのうちの 1 つは ClientSocket と呼ばれ、もう 1 つはクライアント上で実行されます。 ServerSocket と呼ばれるサーバー上で実行されます。

ソケット間の接続プロセスは、サーバー監視、クライアントリクエスト、接続確認の3つのステップに分かれています。

1.サーバー監視:サーバー側ソケットは特定のクライアントソケットを見つけず、接続待ちの状態にあり、リアルタイムでネットワークの状態を監視し、クライアントの接続要求を待っています。

2.クライアントリクエスト:接続リクエストを行うクライアントのソケットを指し、接続対象はサーバーのソケットです。

これを行うには、クライアントのソケットは、まず接続したいサーバーのソケットを記述し、サーバー側のソケットのアドレスとポート番号を示してから、サーバー側のソケットに対して接続要求を行う必要があります。

3. 接続確認: サーバー側ソケットがクライアント ソケットからの接続要求をリッスンまたは受信すると、クライアント ソケット要求に応答し、新しいスレッドを確立し、サーバー側ソケットに接続する 言葉の説明。クライアントがこの説明を確認すると、両者は正式に接続を確立します。

サーバー側ソケットは引き続き待機状態にあり、他のクライアントソケットからの接続要求を受信し続けます。

3. HTTP リンクの特徴

HTTP プロトコルは、Web ネットワーキングの基礎であり、携帯電話ネットワーキングで一般的に使用されるプロトコルの 1 つであり、TCP プロトコルに基づいています。

HTTP 接続の最も重要な特徴は、クライアントが送信するすべてのリクエストがサーバーに応答を返すことを要求し、リクエストが完了した後、接続がアクティブに解放されることです。コネクションを確立してからコネクションを閉じるまでのことを「コネクション」と呼びます。

4. TCP と UDP の違い (最もテストされています...試験に失敗しそうです - -\)

1. TCP はリンク指向ですが、ネットワークの安全性と不安定な特性によって、ハンドシェイクの回数 どちらも接続の信頼性を保証できませんが、TCP の 3 ウェイ ハンドシェイクは接続の信頼性を最小限 (実際にはかなりの程度) 保証します

そして UDP は接続指向ではありません。相手との接続を確立する前にデータを送信しないため、受信したデータに対する確認信号は送信側に送信されません。当然、データを再送信する必要はありません。したがって、UDP はコネクションレスで信頼性の低いデータ送信プロトコルです。

2. UDPの方がオーバーヘッドが小さく、データの送信速度が速いのは、1の特徴があるからこそ、データの送受信を確認する必要がないため、リアルタイム性が高いということです。

TCPとUDPの違いを知れば、ファイル転送にTCP伝送プロトコルを使用するMSNがUDPを使用するQQよりも遅い理由を理解するのは難しくありませんが、それはQQ通信が安全でないという意味ではありません、

プログラマは手動で検証できるためですUDP データの送受信。送信者が各データ パケットに番号を付け、受信者がそれを検証するなど。

それでも、UDP は、基礎となるプロトコルのカプセル化に TCP のような「スリーウェイ ハンドシェイク」を使用しません。 . "そして、TCP では達成できない伝送効率を実現します。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート