Qual é a diferença fundamental entre WebSockets e TCP puro?

167

Eu li sobre o WebSockets e me pergunto por que o navegador não pode simplesmente abrir uma conexão TCP trivial e se comunicar com o servidor como qualquer outro aplicativo de desktop. E por que essa comunicação é possível via websockets?

xap4o
fonte
8
Mas qual é o problema? Deixe-os usar o TCP.
Xap4o
2
Mais informações stackoverflow.com/questions/8051516/…
Hernán Eche 30/01
2
"O WebSocket é um protocolo que fornece canais de comunicação full-duplex através de uma única conexão TCP". Você também pode criar conexões TCP, que são full duplex? O que há de especial no WebSockets?
Abhishek Jain
12
O problema é que geralmente os servidores da Web têm apenas uma porta aberta por razões de segurança, a saber, porta 80. Por definição, uma porta pode ser conectada SOMENTE a um aplicativo . E se um cliente quiser usar um serviço, além da web (HTTP), mas houver apenas uma porta disponível? Voila! Websockets!
Pithikos
3
O @Pithikos chamou a atenção por que precisamos dessa complexidade de websockets e não apenas de lidar com soquetes TCP diretos para a comunicação entre navegador e servidor.
Ensolarado

Respostas:

260

É mais fácil se comunicar via soquetes TCP quando você trabalha dentro de um limite da intranet, pois você provavelmente tem controle sobre as máquinas dessa rede e pode abrir portas adequadas para fazer as conexões TCP.

Pela internet, você está se comunicando com o servidor de outra pessoa do outro lado. Eles são extremamente improvável que haja um soquete antigo aberto para conexões. Geralmente eles terão apenas alguns padrão, como a porta 80 para HTTP ou 443 para HTTPS. Portanto, para se comunicar com o servidor, você é obrigado a se conectar usando uma dessas portas.

Dado que essas são portas padrão para servidores Web que geralmente falam HTTP, você é obrigado a estar em conformidade com o protocolo HTTP, caso contrário, o servidor não falará com você. O objetivo dos soquetes da web é permitir que você inicie uma conexão via HTTP, mas negocie para usar o protocolo de soquetes da web (supondo que o servidor seja capaz de fazê-lo) para permitir um fluxo de comunicação mais semelhante ao "soquete TCP".

Cinza
fonte
2
Obrigado pela explicação fácil, Ash.
Xap4o
Então, basicamente, o WebSocket é simplesmente um invólucro para TCP no sentido de que o UDP é simplesmente um invólucro para IP?
Pacerier 26/02
3
@ Pacerier: Um WebSocket requer algum tipo de protocolo de transporte para operar, mas essa camada de transporte não precisa ser TCP (quase sempre será na prática o TCP). Você pode pensar no WebSockets como um tipo de invólucro em torno do TCP, mas não acredito que exista um link prescritivo entre os dois.
Ash
4
“Pela Internet, você está se comunicando com o servidor de outra pessoa.” “Dado que essas são portas padrão (80 e 443) para servidores Web que geralmente falam HTTP, você é obrigado a obedecer ao protocolo HTTP , caso contrário, o servidor não falará com você ". Normalmente, o servidor websocket ao qual acessamos seria nosso. Portanto, podemos ter um aplicativo com um protocolo que definimos como ouvir uma porta. Então, por que precisaríamos de um handshake HTTP e de uma troca de protocolo? Em vez disso, por que não podemos seguir diretamente um protocolo do tipo websocket?
Ratul
2
Pelo RFC6455, o WebSocket precisa primeiro de um handshake em HTTP e, em seguida, o protocolo é atualizado para o WebSocket. A maioria do navegador segue isso. Não sei como o lado do cliente (navegador) será compatível, se você estiver usando algum protocolo no servidor. É como se nós pudéssemos nos comunicar em francês, apenas nós dois sabemos francês. E o aperto de mão é como, eu estou perguntando: 'Podemos nos comunicar em francês?' Em inglês (aqui HTTP). Aqui, navegadores (como o chrome) sabem francês, mas temos que ensinar francês para servidores. Minha pergunta era por que o RFC6455 (WebSocketProtocol) quer fazer o aperto de mão no HTTP e complicar as coisas, por que eles não conseguem fazer do seu jeito?
Ratul 25/10
31

Navegadores da Web operam na camada Aplicativo, enquanto o TCP opera na Camada de Transporte. Como desenvolvedor de aplicativos da web, é mais fácil enviar mensagens por cabo pela camada de aplicativos, em vez de bytes brutos na camada de transporte.

O WebSockets subjacente é o TCP, apenas abstraído para simplificar.

wulfgarpro
fonte
2

Websocket é um protocolo de camada de aplicativo enquanto TCP é protocolo de camada de transporte. Na camada de transporte, geralmente temos os protocolos TCP e UDP. Qualquer mensagem da camada de aplicação precisa passar pela camada de transporte para ser transmitida para outra máquina. Portanto, websocket e tcp têm um relacionamento entre si e não podem ser comparáveis.

Minh Trần
fonte
2

Para simplificar, as comunicações do soquete da web são feitas pela porta TCP número 80 (ou 443 no caso de conexões criptografadas por TLS), o que é benéfico para os ambientes que bloqueiam conexões de Internet não da Web usando um firewall .

Deseja usar a porta TCP existente ou abrir uma nova porta TCP que possa estar bloqueada pelo firewall?

Eugene
fonte