Trasmissione di rete / multicast non inviata da iPhone in modalità hotspot personale


3

Sulla base dei recenti risultati empirici e sulla base di vari post sul Web, sembra che un'applicazione in esecuzione su un iPhone con hotspot personale abilitato non possa inviare trasmissioni e / o multicast sulla rete dell'hotspot personale. Qualcuno può fare luce sulla causa di questo problema?

L'applicazione

Ho un'applicazione IOS, costruita con codice C ++ multipiattaforma, che trasmette e multicast la sua presenza sulla rete su cui è in esecuzione. L'applicazione funziona perfettamente quando l'iPhone è collegato a una rete Wi-Fi. In questo caso, altri dispositivi sulla rete ricevono le trasmissioni / i multicast e tutto funziona correttamente. Ciò può essere verificato facilmente collegando un computer che esegue WireShark alla rete: i pacchetti broadcast / multicast possono essere visualizzati nella traccia dei pacchetti.

Inutile dire che l'applicazione funziona bene su un iPhone collegato a un Wi-Fi locale.

Il problema

Quando eseguo l'applicazione su un iPhone con il suo hotspot personale abilitato, nessuna trasmissione / multicast viene rilasciata sulla rete dell'hotspot. Questo può essere verificato usando WireShark, che non mostra tali pacchetti nella sua traccia.

Esistono vincoli all'utilizzo di un hotspot personale come router di rete in grado di gestire trasmissioni e multicast?

Quando ho richiesto una pagina Web sul mio dispositivo "WireSharking" utilizzando un browser, l'hotspot personale risponde correttamente a tutti i pacchetti, restituendo i contenuti Web.

Informazioni collaterali

Mi sono imbattuto in altri passati di Stack Overflow che segnalano gli stessi problemi o simili:

  1. La connessione TCP non funziona correttamente quando si utilizza iPhone come hotspot
  2. Impossibile inviare la trasmissione ssdp tramite hotspot personale

Un buon tutorial per scrivere un'applicazione di trasmissione / multicasting su iPhone è " The Making of Talkie: trasmissione multi-interfaccia e multicast " di Michael Tyson . Basti dire che la mia applicazione è conforme a tutti i requisiti (ad es., Impostare le opzioni socket SO_BROADCAST, SO_DONTROUTE e IP_MULTICAST_IF dove appropriato).

Una risposta al riferimento (1) sopra scrive " Potrebbe essere perché l'hotspot personale introduce Network Address Translation? ". Ho filtrato le tracce di WireShark per mostrare solo i pacchetti collegati all'IP dell'hotspot e non ci sono prove che l'hotspot personale abbia inviato qualcosa a un indirizzo NAT.

In sintesi

Qualcuno può spiegare perché un iPhone che esegue un hotspot personale non trasmette pacchetti / multicast e come risolvere il problema?

Molte grazie in anticipo.

PS Inizialmente ho pubblicato questa query su Stack Overflow e ho appreso questo forum più orientato alla Apple.

Risposte:


1

Soluzione rapida e sporca

Ho anche riscontrato lo stesso problema durante lo sviluppo di un'app per iPhone che utilizza un messaggio multicast UDP per rilevare i dispositivi sulla rete. Apparentemente l'iPhone blocca i messaggi multicast in modalità hotspot personale.

Tuttavia, iPhone sembra utilizzare la 172.20.10.0/28sottorete per i dispositivi sulla rete di hotspot personali. Ciò significa che ci sono solo 16 possibili indirizzi. Di questi, 172.20.10.0apparentemente non viene utilizzato, 172.20.10.1è l'iPhone stesso e l'invio di messaggi 172.20.10.15fallisce con un errore "non consentito". Ciò significa che solo i seguenti 13 indirizzi possono essere utilizzati dai clienti: 172.20.10.2, 172.20.10.3, ..., 172.20.10.14.

Quindi la mia soluzione è piuttosto semplice: invece di inviare messaggi broadcast solo a 224.0.0.0, li invio anche a tutti gli altri indirizzi possibili nella sottorete ( 172.20.10.2- 172.20.10.14).

Naturalmente, per essere a prova di futuro in un'app di produzione dovresti probabilmente controllare l'elenco delle interfacce di rete, controllare l'IP e la sottorete, ecc., Ma per il mio uso personale questo metodo è sufficiente.


Ho trovato una soluzione ancora migliore qui: stackoverflow.com/a/40524524/322427
Jakob Egger
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.