¿Cómo puede Android mantener viva una conexión TCP al cambiar de proveedor de red?

Tengo curiosidad acerca de cómo Android puede mantener viva una conexión TCP mientras cambio de 3G (datos móviles) a WiFi y viceversa.

Estoy preguntando esto después de ver que tenía una transmisión de radio ininterrumpida a través de la radio TuneIn.

¿Es eso válido solo para TuneIn (a través de alguna solución de código) o es una función interesante en las llamadas a la API de Android?

Respuestas (4)

Una conexión TCP no se puede mantener activa durante un cambio de red, ya que obtiene una nueva dirección IP, lo que hace que todas las conexiones finalicen.

TCP se basa en IP para obtener los datos entregados. Si cambia de red, también cambia su dirección IP pública que utiliza la conexión TCP para permitir que TuneIn le entregue datos. Esto invalida la conexión actual y te obliga a establecer una nueva.

Pero todavía existe la posibilidad de obtener una transmisión de audio ininterrumpida. Lo más probable es que la aplicación TuneIn almacene en búfer la transmisión durante dos o tres segundos para compensar los problemas de conexión o incluso una reconexión.

TuneIn Radio puede almacenar hasta 30 segundos en la configuración, por lo que cambiar de WiFi a 3G y viceversa no interrumpirá la reproducción. Solo si tuviera una conexión 3G débil, notaría pausas u otros problemas con el juego.
También pueden usar UDP para entregar flujos.

Una de las soluciones más recientes a este problema es MPTCP (Multi-Path TCP). Pero este tampoco es aún ampliamente compatible (el iOS7 de Apple es compatible con Multipath TCP para su tráfico generado por Siri).

MPTCP puede establecer múltiples conexiones sub TCP y, si los dispositivos en una conexión lo admiten, la conexión se puede mantener incluso si su IP cambia (Wifi a 3G/4G y viceversa).

Si desea saber más sobre MPTCP, lea el siguiente artículo: http://queue.acm.org/detail.cfm?id=2591369

Si bien las respuestas dadas hasta ahora son verdaderas en la práctica actual y ciertamente al cambiar entre su proveedor de Internet móvil y su proveedor de Internet doméstico, tanto IPv4 como IPv6 tienen soluciones de movilidad, IPv4 por extensión e IPv6 de forma nativa. Permiten que un usuario móvil tenga una dirección IP doméstica estática y una dirección IP móvil dinámica que permite mantener las conexiones TCP mientras se mueve de una red a otra. Los detalles se pueden encontrar en los RFC a continuación:

Wikipedia

IP móvil para IPv4 RFC

RFC de IPv6

En cuanto al despliegue actual de estas soluciones de movilidad, no conozco ninguna y no puedo encontrar más información. Supongo que la solución de movilidad IPv4 es demasiado engorrosa de implementar (después de todo, fue una ocurrencia tardía) y no hay suficientes direcciones IPv4 para funcionar tal como están, y mucho menos para dispositivos móviles, de ahí la gran utilización de NAT, por lo que nunca ser usado. En cuanto a IPv6 y las razones de su falta de implementación generalizada son más difíciles de especular, supongo que con gran parte de la web todavía en IPv4 y, por lo tanto, con un uso intensivo de la traducción de IPv4 a IPv6, la solución móvil podría ser difícil de implementar en este ambiente De todos modos, incluso si un proveedor de servicios móviles admitiera lo anterior, tanto su proveedor doméstico como el de telefonía móvil necesitarían algún nivel de soporte, y los ISP domésticos no tienen ningún incentivo monetario en este sentido.

TL; DR Las conexiones TCP se interrumpen en su teléfono cuando cambia de red (y, por lo tanto, de proveedor de red); sin embargo, existen soluciones de movilidad que abordan este problema, pero no se han implementado (al menos no ampliamente).

PD: una mejor prueba de interrupción de la conexión TCP es una llamada de voz o video (obviamente sobre datos). La música y las películas se pueden almacenar en búfer y la transición de la dirección IP no se nota; sin embargo, las llamadas no pueden.

No hay forma de mantener activa una conexión TCP si cambia su dirección IP (y cambiará cuando pase de 3G a WiFi). Sin embargo, no necesita una conexión ininterrumpida para una reproducción ininterrumpida: la mayoría de las aplicaciones de "radio" almacenan previamente algunos datos para mantener la reproducción de música incluso cuando pierde la conexión por un tiempo.