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

3

In base a recenti risultati empirici e in base a 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ò far luce sulla causa di questo problema?

L'applicazione

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

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 che ha attivato il proprio hotspot personale, nessuna trasmissione / trasmissione multicast viene rilasciata sulla rete dell'hotspot. Questo può essere verificato usando WireShark, che non mostra tali pacchetti nella sua traccia.

Esiste un vincolo sull'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 il contenuto Web.

Informazioni collaterali

Mi sono imbattuto in altri passaggi Stack Overflow che riportano lo stesso problema o problemi simili:

  1. La connessione TCP non funziona correttamente quando si usa iPhone come hotspot
  2. Impossibile inviare broadcast ssdp dall'hotspot personale

Un buon tutorial per scrivere un'applicazione di broadcasting / multicasting su iPhone è " The Making of Talkie: trasmissione multi-interfaccia e multicast ". Basti dire che la mia applicazione è conforme a tutti i requisiti (ad esempio, impostando 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 la Traduzione degli indirizzi di rete? ". Ho filtrato le tracce di WireShark per mostrare solo i pacchetti connessi all'IP dell'hotspot e non vi è alcuna prova che l'hotspot personale invii 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.

P.S. Inizialmente avevo pubblicato questa query on Overflow dello stack , e ho imparato a conoscere questo forum più orientato ad Apple.

    
posta Moshe Rubin 03.03.2015 - 04:43
fonte

1 risposta

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 subnet 172.20.10.0/28 per i dispositivi sulla rete di hotspot personale. Ciò significa che ci sono solo 16 possibili indirizzi. Di questi, 172.20.10.0 non è apparentemente usato, 172.20.10.1 è l'iPhone stesso e l'invio di messaggi a 172.20.10.15 fallisce con un errore 'non consentito'. Ciò significa che solo i seguenti 13 indirizzi possono essere utilizzati dai client: 172.20.10.2 , 172.20.10.3 , ..., 172.20.10.14 .

Quindi il mio work-around è piuttosto semplice: invece di inviare messaggi broadcast solo a 224.0.0.0 , li mando 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 mio uso personale questo metodo è sufficiente.

    
risposta data 10.11.2016 - 09:07
fonte

Leggi altre domande sui tag