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

15

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

Pero los sistemas de mensajería instantánea 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 a los servidores.

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

Vinay S Shenoy
fuente
¿Su pregunta es sobre sockets o websockets? Esas son dos cosas muy diferentes.
svick
@svick Mi pregunta estaba relacionada con los enchufes.
Vinay S Shenoy

Respuestas:

23

Una conexión TCP abierta es un estado lógico. No implica que esos datos siempre se envíen de un lado a otro. Después del apretón de manos inicial de tres vías , ha entrado en el estado "conectado". Usted está en ese estado hasta que se produce una desconexión de 3 vías o falla una operación de mantenimiento.

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, se trata de transferir tramas de Ethernet. En el caso de una conexión inalámbrica 3G / 4G, esto se realiza mediante el establecimiento de conexiones con los protocolos de nivel inferior, según sea necesario.

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

Otro problema es que TCP está basado en ack . Los pares TCP pueden mantenerse informados de manera bastante eficiente de lo que definitivamente se ha recibido. En caso de falla, TCP se 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 TCP. Por ejemplo, hay muchas comprobaciones de errores integradas en la capa inalámbrica. Los pares en el ámbito 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. Estar basado en nak reduce la sobrecarga en la verificación de errores (asumimos que todo está bien a menos que el otro lado diga que no). También ayuda a abordar errores antesburbujean hasta la capa TCP, evitando así una gran cantidad de golpes TCP que intentan retransmitir. Además, reduce el alcance de cualquier retransmisión a los pares inalámbricos: el teléfono no necesita pedirle al servidor en algún lugar de Internet nuevamente el paquete, solo la estación base a través del enlace inalámbrico.

Doug T.
fuente