3 votos

El iPhone no envía la emisión de red/multidifusión en el modo de punto de acceso personal

Según los últimos descubrimientos empíricos, y en base a varios posts en la web, parece que una aplicación que se ejecuta en un iPhone con el hotspot personal activado no puede enviar difusiones y/o multidifusiones a la red del hotspot personal. ¿Puede alguien aclarar la causa de este problema?

La aplicación

Tengo una aplicación IOS, construida con código C++ multiplataforma, que difunde y multiplica su presencia en la red en la que se ejecuta. La aplicación funciona perfectamente cuando el iPhone está conectado a una red Wi-Fi. En este caso, otros dispositivos de la red reciben las emisiones/multicasts, y todo funciona correctamente. Esto puede verificarse fácilmente conectando un ordenador que ejecute WireShark a la red: los paquetes de difusión/multidifusión pueden verse en el rastreo de paquetes.

Ni que decir tiene que la aplicación funciona bien en un iPhone conectado a una Wi-Fi local.

El problema

Cuando ejecuto la aplicación en un iPhone que tiene su hotspot personal activado, no se emiten emisiones/multicasts en la red del hotspot. Esto puede verificarse utilizando WireShark, que no muestra tales paquetes en su traza.

¿Existe alguna restricción en cuanto a la utilización de un hotspot personal como un router de red capaz de manejar difusiones y multidifusiones?

Cuando solicité una página web en mi dispositivo "WireSharking" utilizando un navegador, el hotspot personal responde correctamente a todos los paquetes, devolviendo el contenido de la web.

Información colateral

Me he encontrado con otros pasados de Stack Overflow que informan de los mismos, o similares, problemas:

  1. La conexión TCP no funciona correctamente cuando se utiliza el iPhone como hotspot
  2. Fallo en el envío de la emisión ssdp por el hotspot personal

Un buen tutorial para escribir una aplicación de emisión/multidifusión de este tipo en el iPhone es el libro de Michael Tyson " La creación de Talkie: Difusión multiinterfaz y multidifusión ". Basta con decir que mi aplicación cumple con todos los requisitos (por ejemplo, estableciendo las opciones de socket SO_BROADCAST, SO_DONTROUTE, e IP_MULTICAST_IF cuando corresponde).

Una respuesta a la referencia (1) anterior escribe " ¿Podría ser porque el hotspot personal introduce la traducción de direcciones de red? ". He filtrado las trazas de WireShark para mostrar sólo los paquetes conectados a la IP del hotspot, y no hay evidencia de que el hotspot personal envíe nada a una dirección NAT.

En resumen

¿Alguien puede explicar por qué un iPhone que ejecuta un hotspot personal no transmite/multidifunde paquetes, y cómo resolver el problema?

Muchas gracias de antemano.

P.D. Originalmente publiqué esta consulta en Stack Overflow y me enteré de este foro más orientado a Apple.

1voto

Jakob Egger Puntos 116

Solución rápida y sucia

También me encontré con el mismo problema al desarrollar una aplicación para iPhone que utiliza un mensaje UDP multicast para descubrir dispositivos en la red. Al parecer, el iPhone bloquea los mensajes de multidifusión en el modo de punto de acceso personal.

Sin embargo, el iPhone parece utilizar el 172.20.10.0/28 subred para los dispositivos de la red de hotspot personal. Esto significa que sólo hay 16 direcciones posibles. De ellas, 172.20.10.0 aparentemente no se utiliza, 172.20.10.1 es el propio iPhone, y el envío de mensajes a 172.20.10.15 falla con un error "no permitido". Esto significa que sólo las siguientes 13 direcciones pueden ser utilizadas por los clientes: 172.20.10.2 , 172.20.10.3 , ..., 172.20.10.14 .

Así que mi solución es bastante simple: en lugar de enviar mensajes de difusión sólo a 224.0.0.0 También los envío a todas las demás direcciones posibles de la subred ( 172.20.10.2 - 172.20.10.14 ).

Por supuesto, para estar a prueba de futuro en una aplicación de producción probablemente deberías comprobar la lista de interfaces de red, comprobar la IP y la subred, etc., pero para mi uso personal este método es suficiente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X