Como os soquetes funcionam em conexões sem fio?


15

Eu trabalhei apenas em aplicativos do lado do cliente (especificamente móveis) usando o Android, onde toda a rede é tratada na camada HTTP usando componentes fornecidos pela estrutura, como HttpUrlConnection.

Mas os sistemas de mensagens push, como Websockets / XMPP etc, mantêm uma conexão persistente com o servidor. Até o GCM do Google, que é incorporado aos dispositivos compatíveis com o Google Play, mantém uma conexão persistente com os servidores.

Minha pergunta é: como isso funciona sem descarregar a bateria? Se fizermos solicitações HTTP contínuas sequencialmente, o consumo de bateria será significativo. Como essas conexões persistentes são mantidas sem encontrar o mesmo problema?


Sua pergunta é sobre soquetes ou websockets? Essas são duas coisas muito diferentes.
svick

@svick Minha pergunta estava relacionada a soquetes.
Vinay S Shenoy

Respostas:


23

Uma conexão TCP aberta é um estado lógico. Isso não implica que esses dados estejam sempre sendo enviados e retornados. Após o aperto de mão triplo inicial, você entrou no estado "conectado". Você está nesse estado até que ocorra uma desconexão de três vias ou uma falha de manutenção.

Durante a vida útil da conexão, os recursos do meio "físico" subjacente podem ser estabelecidos para fazer transferências de dados para essa conexão. No caso de uma conexão com fio, trata-se de transferir quadros ethernet. No caso de uma conexão sem fio 3G / 4G, isso é feito estabelecendo conexões com os protocolos de nível inferior, conforme necessário.

Portanto, durante toda a vida da conexão, não existe nenhuma conexão de dados subjacente física. Em vez disso, fica inativo aguardando que um dos pares na conexão TCP precise enviar dados.

Outra questão é que o TCP é baseado em confirmação . Os pares de TCP podem manter-se bem informados sobre o que foi definitivamente recebido. Em caso de falha, o TCP retransmitirá. Isso funciona muito bem para links físicos razoavelmente confiáveis, mas tende a desmoronar em links muito ruidosos / quebrados, como suas conexões sem fio. Como você pode imaginar, acks / retransmissões ocorreriam com muita frequência nesses ambientes.

Normalmente, o protocolo sem fio subjacente faz tudo o que pode para reduzir a necessidade de retransmissões TCP. Por exemplo, há muitas verificações de erros embutidas na camada sem fio. Os pares no domínio sem fio (estação base / telefone) também usam um protocolo nak para dizer ao outro lado quando não receberam algo. Ser baseado nak reduz a sobrecarga na verificação de erros (assumimos que tudo está bem, a menos que o outro lado diga que não). Também ajuda a corrigir erros antes deeles borbulham para a camada TCP - evitando, assim, muitas trocas de TCP tentando retransmitir. Além disso, reduz o escopo de qualquer retransmissão para os pares sem fio - o telefone não precisa pedir novamente ao servidor em algum lugar da Internet o pacote, apenas a estação base através do link sem fio.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.