Was ist der grundlegende Unterschied zwischen WebSockets und reinem TCP?

167

Ich habe über WebSockets gelesen und frage mich, warum der Browser nicht einfach eine einfache TCP-Verbindung öffnen und wie jede andere Desktop-Anwendung mit dem Server kommunizieren konnte. Und warum ist diese Kommunikation über Websockets möglich?

xap4o
quelle
8
Aber was ist das Problem? Lassen Sie sie TCP verwenden.
xap4o
2
Weitere Informationen stackoverflow.com/questions/8051516/…
Hernán Eche
2
"WebSocket ist ein Protokoll, das Vollduplex-Kommunikationskanäle über eine einzelne TCP-Verbindung bereitstellt." Sie können auch TCP-Verbindungen erstellen, die Vollduplex sind? Was ist das Besondere an WebSockets?
Abhishek Jain
12
Das Problem ist, dass auf Webservern aus Sicherheitsgründen normalerweise nur ein Port geöffnet ist, nämlich der Port 80. Per Definition kann ein Port NUR an eine Anwendung angeschlossen werden . Was ist, wenn ein Client einen anderen Dienst als Web (HTTP) verwenden möchte, aber nur ein Port verfügbar ist? Voila! Websockets!
Pithikos
3
@Pithikos hat ins Schwarze getroffen, warum wir diese Komplexität von Websockets benötigen und uns nicht nur mit direkten TCP-Sockets für die Browser-Server-Kommunikation befassen.
Sunny

Antworten:

260

Die Kommunikation über TCP-Sockets ist einfacher, wenn Sie innerhalb einer Intranetgrenze arbeiten, da Sie wahrscheinlich die Kontrolle über die Computer in diesem Netzwerk haben und Ports öffnen können, die zum Herstellen der TCP-Verbindungen geeignet sind.

Über das Internet kommunizieren Sie mit dem Server eines anderen am anderen Ende. Es ist äußerst unwahrscheinlich, dass eine alte Steckdose für Verbindungen geöffnet ist. Normalerweise haben sie nur wenige Standard-Ports wie Port 80 für HTTP oder 443 für HTTPS. Um mit dem Server zu kommunizieren, müssen Sie eine Verbindung über einen dieser Ports herstellen.

Da dies Standardports für Webserver sind, die im Allgemeinen HTTP sprechen, müssen Sie sich daher an das HTTP-Protokoll halten, da der Server sonst nicht mit Ihnen spricht. Der Zweck von Web-Sockets besteht darin, Ihnen zu ermöglichen, eine Verbindung über HTTP herzustellen, dann aber das Web-Sockets-Protokoll zu verhandeln (vorausgesetzt, der Server ist dazu in der Lage), um einen eher "TCP-Socket" -ähnlichen Kommunikationsstrom zuzulassen.

Asche
quelle
2
Danke für die einfache Erklärung, Ash.
xap4o
WebSocket ist also im Grunde genommen einfach ein Wrapper für TCP in dem Sinne, dass UDP einfach ein Wrapper für IP ist?
Pacerier
3
@Pacerier: Für ein WebSocket ist ein Transportprotokoll erforderlich, aber diese Transportschicht muss nicht TCP sein (in der Praxis wird es jedoch fast immer TCP sein). Sie könnten sich WebSockets als eine Art Wrapper um TCP vorstellen, aber ich glaube nicht, dass es einen präskriptiven Zusammenhang zwischen beiden gibt.
Ash
4
"Über das Internet kommunizieren Sie mit dem Server einer anderen Person am anderen Ende." "Da es sich um Standardports (80 und 443) für Webserver handelt, die im Allgemeinen HTTP sprechen, müssen Sie daher das HTTP-Protokoll einhalten , sonst spricht der Server nicht mit Ihnen. " Normalerweise ist der Websocket-Server, auf den wir zugreifen, unser eigener. So können wir eine Anwendung mit einem Protokoll haben, das wir definieren, um einen Port abzuhören. Warum brauchen wir dann einen HTTP-Handshake und eine Protokollumschaltung? Warum können wir stattdessen nicht direkt einem Websocket-ähnlichen Protokoll folgen?
Ratul
2
Nach RFC6455 benötigt WebSocket zuerst einen Handshake in HTTP und dann das Protokoll-Upgrade auf WebSocket. Die meisten Browser folgen diesem. Ich weiß nicht, wie Ihre Clientseite (Browser) dies unterstützt, wenn Sie ein Protokoll im Server verwenden. Es ist, als könnten wir auf Französisch kommunizieren, nur wir beide sprechen Französisch. Und Händeschütteln ist wie, ich frage Sie: "Können wir auf Französisch kommunizieren?" Auf Englisch (hier HTTP). Hier sprechen Browser (wie Chrome) Französisch, aber wir müssen Server-Französisch unterrichten. Meine Frage war, warum RFC6455 (WebSocketProtocol) den Handshake in HTTP ausführen und die Dinge komplizieren möchte. Warum können sie das nicht auf ihre Weise tun?
Ratul
31

Webbrowser arbeiten auf der Anwendungsschicht, während TCP auf der Transportschicht arbeitet. Als Webanwendungsentwickler ist es einfacher, Nachrichten über die Anwendungsschicht über das Kabel zu senden, als Rohbytes auf der Transportschicht.

WebSockets liegt TCP zugrunde, es wird der Einfachheit halber nur abstrahiert.

wulfgarpro
quelle
2

Websocket ist ein Anwendungsschichtprotokoll, während TCP das Transportschichtprotokoll ist. Auf der Transportschicht haben wir normalerweise das TCP- und UDP-Protokoll. Jede Nachricht von der Anwendungsschicht muss die Transportschicht durchlaufen, um an einen anderen Computer übertragen zu werden. Daher haben Websocket und TCP eine Beziehung zueinander und können nicht vergleichbar sein.

Minh Trần
quelle
2

Zur Vereinfachung erfolgt die Websocket-Kommunikation über den TCP-Port Nr. 80 (oder 443 bei TLS-verschlüsselten Verbindungen). Dies ist von Vorteil für Umgebungen, in denen Nicht-Web-Internetverbindungen mithilfe einer Firewall blockiert werden .

Möchten Sie einen vorhandenen TCP-Port verwenden oder einen neuen TCP-Port öffnen, der möglicherweise von der Firewall blockiert wird?

Eugene
quelle