WebSocketと純粋なTCPの基本的な違いは何ですか?


167

私はWebSocketについて読みましたが、ブラウザーが単純なTCP接続を開いて、他のデスクトップアプリケーションと同じようにサーバーと通信できないのはなぜでしょうか。そして、なぜこの通信はウェブソケットを介して可能ですか?


8
しかし、問題は何ですか?TCPを使用させます。
xap4o 2010


2
「WebSocketは、単一のTCP接続で全二重通信チャネルを提供するプロトコルです。」全二重のTCP接続も作成できますか?これはWebSocketの何が特別なのですか?
Abhishek Jain

12
問題は、通常、Webサーバーではセキュリティ上の理由からポートが1つだけ開いていることです80。定義上、1つのポートは1つのアプリケーションにのみ接続できます。では、クライアントがWeb(HTTP)以外のサービスを使用したいが、使用可能なポートが1つしかない場合はどうなるでしょうか。出来上がり!WebSockets!
ピティコス2014

3
@Pithikosは、ブラウザとサーバーの通信のために単純なTCPソケットを処理するだけでなく、なぜこのように複雑なWebソケットが必要なのかについて理解を深めました。
サニー

回答:


260

イントラネットの境界内で作業しているときは、TCPソケットを介して通信する方が簡単です。これは、そのネットワーク上のマシンを制御でき、TCP接続に適したポートを開くことができるためです。

インターネットを介して、相手側の他のサーバーと通信しています。彼らは非常に接続のための任意の古いソケットのオープンを持っている可能性は低いです。通常、HTTPの場合はポート80、HTTPSの場合は443のように、いくつかの標準的なものしかありません。したがって、サーバーと通信するには、これらのポートの1つを使用して接続する必要があります。

これらは一般的にHTTPを話すWebサーバーの標準ポートであるため、HTTPプロトコルに準拠する必要があります。そうでない場合、サーバーは通信しません。Webソケットの目的は、HTTP経由で接続を開始できるようにすることですが、Webソケットプロトコルを使用するようにネゴシエートして(サーバーがそのようにできる場合)、より「TCPソケット」のような通信ストリームを許可します。


2
簡単に説明してくれてありがとう、アッシュ。
xap4o 2010

つまり、基本的にWebSocketは、UDPが単にIPのラッパーであるという意味で、単にTCPのラッパーです。
ペーチェリエ

3
@Pacerier:WebSocketは動作するために何らかのトランスポートプロトコルを必要としますが、そのトランスポート層はTCPである必要はありません(ただし、実際にはほとんど常にTCPになるでしょう)。WebSocketはTCPの一種のラッパーと考えることもできますが、2つの間に規範的なリンクがあるとは思えません。
アッシュ

4
「インターネットを介して、相手側の他のサーバーと通信しています。」」これらが一般的にHTTPを話すWebサーバーの標準ポート(80および443)であることを考えると、HTTPプロトコルに準拠する必要があります。そうでなければ、サーバーはあなたと話をしません。」通常、私たちがアクセスするWebSocketサーバーは私たちのものです。したがって、ポートをリッスンするように定義したプロトコルを備えたアプリケーションを作成できます。では、なぜHTTPハンドシェイクとプロトコルスイッチングが必要なのでしょうか。代わりに、プロトコルのようなWebソケットを直接フォローできないのはなぜですか?
2013年

2
RFC6455により、WebSocketは最初にHTTPでのハンドシェイクを必要とし、次にプロトコルがWebSocketにアップグレードされます。ほとんどのブラウザはこれに従います。サーバーでプロトコルを使用している場合、クライアント側(ブラウザー)がどのようにサポートするかわかりません。フランス語でコミュニケーションが取れるようで、フランス語を知っているのは私たち二人だけです。そして、ハンドシェイクは、私があなたに尋ねるようなものです。ここでは、ブラウザ(クロムのような)はフランス語を知っていますが、サーバーのフランス語を教える必要があります。私の質問は、RFC6455(WebSocketProtocol)がHTTPでハンドシェイクを実行して複雑にしたいのですが、なぜ彼らは自分のやり方でそれを行うことができないのですか?
2013年

31

Webブラウザはアプリケーション層で動作しますが、TCPはトランスポート層で動作します。Webアプリケーション開発者は、トランスポート層で生のバイトを送信する代わりに、アプリケーション層を介してネットワーク経由でメッセージを送信する方が簡単です。

基礎となるWebSocket TCPであり、単純にするために抽象化されています。


2

Websocketはアプリケーション層プロトコルで、TCPはトランスポート層プロトコルです。トランスポート層には、通常、TCPおよびUDPプロトコルがあります。アプリケーション層からのメッセージは、トランスポート層を経由して他のマシンに送信される必要があります。したがって、websocketとtcpは互いに関係があり、比較することはできません。


2

簡単にするために、WebSocket通信はTCPポート番号80(TLS暗号化接続の場合は443)を介して行われます。これは、ファイアウォールを使用して非Webインターネット接続をブロックする環境にメリットがあります。

既存のTCPポートを使用するか、ファイアウォールによってブロックされている可能性がある新しいTCPポートを開きますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.