¿Cómo funcionan los sockets a través de conexiones inalámbricas?

14

Solo he trabajado en aplicaciones del lado del cliente (específicamente, en dispositivos móviles) con Android, donde todas las redes se manejan en la capa HTTP usando componentes provistos por el framework como HttpUrlConnection.

Pero los sistemas de mensajería push como Websockets / XMPP, etc., mantienen una conexión persistente con el servidor. Incluso el GCM de Google, que está integrado en dispositivos compatibles con Google Play, mantiene una conexión persistente con los servidores.

Mi pregunta es, ¿cómo funciona esto sin agotar la batería? Si realizamos solicitudes HTTP continuas de forma secuencial, el consumo de batería es significativo. ¿Cómo se mantienen estas conexiones persistentes sin encontrar el mismo problema?

    
pregunta Vinay S Shenoy 12.07.2014 - 15:23
fuente

1 respuesta

22

Una conexión TCP abierta es un estado lógico. No implica que los datos siempre se envíen de un lado a otro. Después del protocolo de enlace de tres vías inicial, ingresó al estado "conectado". Estás en ese estado hasta que se produzca una desconexión de 3 vías o se produzca un error de keep-alive.

Durante la vida útil de la conexión, se pueden establecer recursos del medio "físico" subyacente para realizar transferencias de datos para esa conexión. En el caso de una conexión por cable, esta es una cuestión de transferir los marcos de Ethernet alrededor. En el caso de una conexión inalámbrica 3G / 4G, esto se hace estableciendo conexiones con los protocolos de nivel inferior según sea necesario.

Entonces, durante la vida de la conexión, no existe una conexión física subyacente de datos. En su lugar, permanece inactivo esperando que cualquiera de los pares en la conexión TCP necesite enviar datos.

Otro problema es que TCP se basa en ack . Los pares de TCP pueden mantenerse bastante informados entre sí sobre lo que se ha recibido definitivamente. En caso de fallo, TCP retransmitirá. Esto funciona muy bien para enlaces físicos bastante confiables, pero tiende a desmoronarse en enlaces muy ruidosos / rotos, como sus conexiones inalámbricas. Como puede imaginar, los acks / retransmisiones ocurrirían con mucha frecuencia en estos entornos.

Por lo general, el protocolo inalámbrico subyacente hace todo lo posible para reducir la necesidad de retransmisiones de TCP. Por ejemplo, hay muchos controles de errores integrados en la capa inalámbrica. Los compañeros en el reino inalámbrico (la estación base / teléfono) también usan un protocolo basado en nak para decirle al otro lado cuando no recibieron algo. El hecho de estar basado en nak reduce la sobrecarga en la comprobación de errores (suponemos que todo está bien a menos que el otro lado diga que no). También ayuda a solucionar los errores antes que se propagan a la capa TCP, evitando así que muchos intentos de TCP se retransmitan. Además, reduce el alcance de cualquier retransmisión a los interlocutores inalámbricos: el teléfono no necesita pedir el paquete en algún lugar de Internet nuevamente, solo la estación base a través del enlace inalámbrico.

    
respondido por el Doug T. 12.07.2014 - 16:41
fuente

Lea otras preguntas en las etiquetas