Como os soquetes funcionam através de conexões sem fio?

14

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

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

Minha pergunta é: como isso funciona sem drenar a bateria? Se fizermos pedidos HTTP contínuos sequencialmente, o consumo de bateria é significativo. Como essas conexões persistentes são mantidas sem encontrar o mesmo problema?

    
por Vinay S Shenoy 12.07.2014 / 15:23
fonte

1 resposta

22

Uma conexão TCP aberta é um estado lógico. Isso não implica que esses dados estejam sempre sendo enviados de um lado para outro. Após o handshake de três vias inicial, você entrou no estado "conectado". Você está nesse estado até que ocorra uma desconexão de 3 vias ou um keep-alive falhe.

Durante o tempo de vida da conexão, os recursos da mídia "física" 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 a vida útil da conexão, não existe conexão de dados subjacente física. Em vez disso, ele fica inativo esperando que algum dos pares na conexão TCP precise enviar dados.

Outra questão é que o TCP é baseado em ack . Os pares de TCP podem manter-se bastante informados sobre o que foi definitivamente recebido. Em caso de falha, o TCP irá retransmitir. Isso funciona muito bem para links físicos bastante confiáveis, mas tende a desmoronar em links muito barulhentos / quebrados, como suas conexões sem fio. Como você pode imaginar, as ocorrências / 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á muita verificação de erros embutida na camada sem fio. Pares no reino sem fio (a estação base / telefone) também usam um protocolo baseado em nak para dizer ao outro lado quando eles não receberam algo. Ser nak baseado reduz a sobrecarga na verificação de erros (assumimos tudo bem, a menos que o outro lado diga que não). Ele também ajuda a resolver os erros antes em que eles se juntam à camada TCP - evitando assim que muitos thrashings do TCP tentem retransmitir. Além disso, reduz o escopo de qualquer retransmissão para os pares sem fio - o telefone não precisa perguntar ao servidor em algum lugar na Internet o pacote novamente, apenas a estação base através do link sem fio.

    
por 12.07.2014 / 16:41
fonte