Qual è la differenza fondamentale tra WebSocket e TCP puro?


167

Ho letto di WebSocket e mi chiedo perché il browser non possa semplicemente aprire una banale connessione TCP e comunicare con il server come qualsiasi altra applicazione desktop. E perché questa comunicazione è possibile tramite i websocket?


8
Ma qual è il problema? Lasciateli usare TCP.
xap4o,


2
"WebSocket è un protocollo che fornisce canali di comunicazione full duplex su una singola connessione TCP". È possibile creare anche connessioni TCP che sono full duplex? cos'è questo speciale di WebSocket?
Abhishek Jain,

12
Il problema è che di solito i server Web hanno una sola porta aperta per motivi di sicurezza, vale a dire la porta 80. Per definizione una porta può collegarsi SOLO a un'applicazione . Quindi cosa succede se un client desidera utilizzare un servizio diverso dal Web (HTTP) ma è disponibile una sola porta? Ecco! WebSockets!
Pithikos,

3
@Pithikos ha colpito il centro del perché abbiamo bisogno di questa complessità di websocket e non di occuparci solo di socket TCP diretti per la comunicazione browser-server.
Sunny,

Risposte:


260

È più facile comunicare tramite socket TCP quando si lavora all'interno di un confine intranet, poiché è probabile che si abbia il controllo sui computer su quella rete e si possano aprire le porte adatte per effettuare le connessioni TCP.

Su Internet, stai comunicando con il server di qualcun altro dall'altra parte. È estremamente improbabile che abbia una vecchia presa aperta per le connessioni. Di solito ne avranno solo alcuni standard come la porta 80 per HTTP o 443 per HTTPS. Quindi, per comunicare con il server sei obbligato a connetterti utilizzando una di quelle porte.

Dato che si tratta di porte standard per server Web che generalmente parlano HTTP, sei quindi obbligato a conformarti al protocollo HTTP, altrimenti il ​​server non ti parlerà. Lo scopo dei socket Web è consentire all'utente di avviare una connessione tramite HTTP, ma di negoziare per utilizzare il protocollo dei socket Web (supponendo che il server sia in grado di farlo) per consentire un flusso di comunicazione più simile a "socket TCP".


2
Grazie per una facile spiegazione, Ash.
xap4o,

Quindi in pratica WebSocket è semplicemente un wrapper per TCP, nel senso che UDP è semplicemente un wrapper per IP?
Pacerier,

3
@Pacerier: un WebSocket richiede una sorta di protocollo di trasporto per funzionare, ma quel livello di trasporto non deve essere TCP (ma quasi sempre sarà TCP in pratica). Potresti pensare a WebSocket come a una sorta di wrapper attorno a TCP, ma non credo che ci sia alcun legame prescrittivo tra i due.
Ash,

4
"Su Internet, stai comunicando con il server di qualcun altro all'altra estremità." "Dato che si tratta di porte standard (80 e 443) per server Web che generalmente parlano HTTP, sei quindi obbligato a conformarti al protocollo HTTP , altrimenti il ​​server non ti parlerà. " Di solito, il server websocket a cui accediamo sarebbe il nostro. Quindi possiamo avere un'applicazione con un protocollo che definiamo ascoltare una porta. Quindi, perché dovremmo aver bisogno dell'handshake HTTP e del cambio di protocollo? Invece perché non possiamo seguire direttamente un protocollo simile a un websocket?
ratul

2
Con RFC6455, WebSocket richiede prima una stretta di mano in HTTP, quindi il protocollo passa a WebSocket. La maggior parte del browser segue questo. Non so come supporterà il tuo lato client (browser), se stai usando un protocollo nel server. È come se potessimo comunicare in francese, solo entrambi conosciamo il francese. E l'handshaking è come, ti chiedo, 'Possiamo comunicare in francese?' In inglese (qui HTTP). Qui i browser (come Chrome) conoscono il francese ma dobbiamo insegnare il francese al server. La mia domanda era: perché RFC6455 (WebSocketProtocol) vuole fare la stretta di mano in HTTP e complicare le cose, perché non possono farlo a modo loro?
ratul,

31

I browser Web funzionano a livello di applicazione, mentre TCP funziona a livello di trasporto. Come sviluppatore di applicazioni Web, è più facile inviare messaggi via cavo tramite il Livello applicazione anziché byte grezzi nel Livello trasporto.

Sottostante WebSocket è TCP, viene semplicemente estratto per semplicità.


2

Websocket è un protocollo di livello applicazione mentre TCP è protocollo di livello trasporto. A livello di trasporto, di solito abbiamo il protocollo TCP e UDP. Qualsiasi messaggio dal livello applicazione deve passare attraverso il livello trasporto per essere trasmesso ad altre macchine. Quindi, websocket e tcp hanno una relazione reciproca e non possono essere comparabili.


2

Per semplificare, le comunicazioni tramite websocket vengono effettuate tramite la porta TCP numero 80 (o 443 nel caso di connessioni crittografate con TLS), il che è vantaggioso per quegli ambienti che bloccano le connessioni Internet non web utilizzando un firewall .

Desideri utilizzare la porta TCP esistente o aprire una nuova porta TCP che potrebbe essere bloccata dal firewall?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.