Basierend auf neueren empirischen Erkenntnissen und basierend auf verschiedenen Beiträgen im Internet scheint es, dass eine Anwendung, die auf einem iPhone mit aktiviertem persönlichem Hotspot läuft, keine Broadcasts und/oder Multicasts an das Netzwerk des persönlichen Hotspots senden kann. Kann jemand die Ursache dieses Problems beleuchten?
Die Anwendung
Ich habe eine IOS-Anwendung, die mit plattformübergreifendem C++-Code erstellt wurde und ihre Anwesenheit per Broadcast und Multicast in das Netzwerk überträgt, auf dem sie ausgeführt wird. Die Anwendung funktioniert einwandfrei, wenn das iPhone mit einem Wi-Fi-Netzwerk verbunden ist. In diesem Fall empfangen andere Geräte im Netzwerk die Broadcasts/Multicasts und alles funktioniert korrekt. Dies kann leicht überprüft werden, indem ein Computer, auf dem WireShark ausgeführt wird, mit dem Netzwerk verbunden wird – die Broadcast-/Multicast-Pakete sind in der Paketverfolgung zu sehen.
Natürlich funktioniert die Anwendung gut auf einem iPhone, das mit einem lokalen Wi-Fi verbunden ist.
Das Problem
Wenn ich die Anwendung auf einem iPhone mit aktiviertem persönlichem Hotspot ausführe, werden keine Broadcasts/Multicasts im Hotspot-Netzwerk veröffentlicht. Dies kann mit WireShark überprüft werden, das keine derartigen Pakete in seinem Trace anzeigt.
Gibt es Einschränkungen bei der Verwendung eines persönlichen Hotspots als Netzwerkrouter, der Broadcasts und Multicasts verarbeiten kann?
Wenn ich auf meinem „WireShark“-Gerät mit einem Browser eine Webseite angefordert habe, antwortet der persönliche Hotspot korrekt auf alle Pakete und gibt die Webinhalte zurück.
Informationen zu Sicherheiten
Ich bin auf andere Stack Overflow-Vergangenheiten gestoßen, die dieselben oder ähnliche Probleme melden:
Ein gutes Tutorial zum Schreiben einer solchen Broadcasting/Multicasting-Anwendung auf dem iPhone ist Michael Tysons „ The Making of Talkie: Multi-Interface Broadcasting and Multicast “. Es genügt zu sagen, dass meine Anwendung allen Anforderungen entspricht (z. B. Setzen der Socket-Optionen SO_BROADCAST, SO_DONTROUTE und IP_MULTICAST_IF, wo zutreffend).
Eine Antwort auf die obige Referenz (1) schreibt: „ Könnte es daran liegen, dass der persönliche Hotspot Network Address Translation einführt? “. Ich habe die WireShark-Traces gefiltert, um nur Pakete anzuzeigen, die mit der Hotspot-IP verbunden sind, und es gibt keinen Hinweis darauf, dass der persönliche Hotspot etwas an eine NAT-Adresse sendet.
Zusammenfassend
Kann jemand erklären, warum ein iPhone, auf dem ein persönlicher Hotspot ausgeführt wird, keine Pakete sendet/multicastet und wie das Problem gelöst werden kann?
Vielen Dank im Voraus.
PS Ich habe diese Abfrage ursprünglich auf Stack Overflow gepostet und von diesem eher Apple-orientierten Forum erfahren.
Quick-and-Dirty-Workaround
Ich bin auch auf das gleiche Problem gestoßen, als ich eine iPhone-App entwickelt habe, die eine UDP-Multicast-Nachricht verwendet, um Geräte im Netzwerk zu erkennen. Anscheinend blockiert das iPhone Multicast-Nachrichten im persönlichen Hotspot-Modus.
172.20.10.0/28
Das iPhone scheint jedoch das Subnetz für Geräte im persönlichen Hotspot-Netzwerk zu verwenden . Das bedeutet, dass es nur 16 mögliche Adressen gibt. Davon 172.20.10.0
wird offenbar nichts genutzt, 172.20.10.1
das iPhone selbst, und das Versenden von Nachrichten schlägt 172.20.10.15
mit einem „nicht erlaubt“-Fehler fehl. Das bedeutet, dass nur die folgenden 13 Adressen von Clients verwendet werden können: 172.20.10.2
, 172.20.10.3
, ..., 172.20.10.14
.
Meine Problemumgehung ist also ziemlich einfach: Anstatt Broadcast-Nachrichten nur an zu senden 224.0.0.0
, sende ich sie auch an alle anderen möglichen Adressen im Subnetz ( 172.20.10.2
- 172.20.10.14
).
Um in einer Produktions-App zukunftssicher zu sein, sollten Sie natürlich die Liste der Netzwerkschnittstellen überprüfen, die IP und das Subnetz überprüfen usw., aber für meinen persönlichen Gebrauch ist diese Methode ausreichend.
Jakob Egger