3 votes

Diffusion réseau/multidiffusion non envoyée par l'iPhone en mode hotspot personnel

Sur la base de récentes découvertes empiriques et de divers messages sur le web, il semble qu'une application fonctionnant sur un iPhone avec un hotspot personnel activé ne peut pas envoyer de diffusions et/ou de multidiffusions sur le réseau du hotspot personnel. Quelqu'un peut-il nous éclairer sur la cause de ce problème ?

L'application

J'ai une application IOS, construite avec du code C++ multiplateforme, qui diffuse et multidiffuse sa présence sur le réseau sur lequel elle est exécutée. L'application fonctionne parfaitement lorsque l'iPhone est connecté à un réseau Wi-Fi. Dans ce cas, les autres appareils du réseau reçoivent les diffusions/multidiffusions, et tout fonctionne correctement. Cela peut être vérifié facilement en connectant un ordinateur exécutant WireShark au réseau - les paquets de diffusion/multidiffusion peuvent être vus dans la trace des paquets.

Inutile de préciser que l'application fonctionne bien sur un iPhone connecté à un réseau Wi-Fi local.

Le problème

Lorsque j'exécute l'application sur un iPhone dont le hotspot personnel est activé, aucune diffusion/multicast n'est émise sur le réseau du hotspot. Ceci peut être vérifié en utilisant WireShark, qui ne montre aucun paquet de ce type dans sa trace.

Existe-t-il une contrainte concernant l'utilisation d'un hotspot personnel comme routeur de réseau capable de gérer les diffusions et les multidiffusions ?

Lorsque j'ai demandé une page web sur mon appareil "WireSharking" en utilisant un navigateur, le hotspot personnel répond correctement à tous les paquets, renvoyant le contenu web.

Informations sur les garanties

Je suis tombé sur d'autres passages de Stack Overflow qui signalent les mêmes problèmes, ou des problèmes similaires :

  1. La connexion TCP ne fonctionne pas correctement lorsque l'iPhone est utilisé comme hotspot
  2. Échec de l'envoi de la diffusion ssdp par le hotspot personnel

Un bon tutoriel pour l'écriture d'une telle application de diffusion/multidiffusion sur iPhone est l'ouvrage de Michael Tyson intitulé " Le making of de Talkie : Diffusion et multidiffusion multi-interface ". Il suffit de dire que mon application est conforme à toutes les exigences (par exemple, en définissant les options de socket SO_BROADCAST, SO_DONTROUTE et IP_MULTICAST_IF, le cas échéant).

Une réponse à la référence (1) ci-dessus écrit " Serait-ce parce que le hotspot personnel introduit la traduction d'adresse réseau ? ". J'ai filtré les traces WireShark pour ne montrer que les paquets connectés à l'IP du hotspot, et il n'y a aucune preuve que le hotspot personnel envoie quoi que ce soit à une adresse NAT.

En résumé

Quelqu'un peut-il expliquer pourquoi un iPhone fonctionnant avec un hotspot personnel ne diffuse pas/multiplie les paquets, et comment résoudre le problème ?

Merci d'avance.

P.S. J'ai initialement posté cette requête sur Stack Overflow et j'ai appris l'existence de ce forum plus orienté vers Apple.

1voto

Jakob Egger Points 241

Solution rapide et simple

J'ai également rencontré le même problème lors du développement d'une application iPhone qui utilise un message UDP multicast pour découvrir les appareils sur le réseau. Apparemment, l'iPhone bloque les messages multicast en mode hotspot personnel.

Cependant, l'iPhone semble utiliser le 172.20.10.0/28 sous-réseau pour les appareils du réseau de hotspot personnel. Cela signifie qu'il n'y a que 16 adresses possibles. Parmi celles-ci, 172.20.10.0 n'est apparemment pas utilisé, 172.20.10.1 est l'iPhone lui-même, et l'envoi de messages à 172.20.10.15 échoue avec une erreur "non autorisée". Cela signifie que seules les 13 adresses suivantes peuvent être utilisées par les clients : 172.20.10.2 , 172.20.10.3 , ..., 172.20.10.14 .

Ma solution de contournement est donc assez simple : au lieu d'envoyer des messages de diffusion uniquement aux personnes suivantes 224.0.0.0 je les envoie également à toutes les autres adresses possibles du sous-réseau ( 172.20.10.2 - 172.20.10.14 ).

Bien sûr, pour être à l'épreuve du futur dans une application de production, vous devriez probablement vérifier la liste des interfaces réseau, vérifier l'IP et le sous-réseau, etc., mais pour mon usage personnel, cette méthode est suffisante.

0 votes

J'ai trouvé une solution encore meilleure ici : stackoverflow.com/a/40524524/322427

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X