Широковещательная / многоадресная передача по сети не отправляется iPhone в режиме личной точки доступа

3

Основываясь на недавних эмпирических результатах и ​​на различных публикациях в Интернете, кажется, что приложение, работающее на iPhone с включенной персональной точкой доступа, не может отправлять широковещательные и / или многоадресные сообщения в сеть персональной точки доступа. Может кто-нибудь пролить свет на причину этой проблемы?

Приложение

У меня есть приложение IOS, созданное с использованием кроссплатформенного кода C ++, которое транслирует и передает свое присутствие в сеть, в которой работает. Приложение работает безупречно, когда iPhone подключен к сети Wi-Fi. В этом случае другие устройства в сети получают широковещательные / многоадресные рассылки, и все работает правильно. Это можно легко проверить, подключив компьютер с WireShark к сети - пакеты широковещательной / многоадресной передачи можно увидеть в трассировке пакетов.

Излишне говорить, что приложение хорошо работает на iPhone, подключенном к локальной сети Wi-Fi.

Эта проблема

Когда я запускаю приложение на iPhone, для которого включена его личная точка доступа, в сеть точек доступа не передаются широковещательные и многоадресные сообщения. Это можно проверить с помощью WireShark, который не показывает таких пакетов в своей трассировке.

Есть ли какие-либо ограничения относительно использования личной точки доступа в качестве сетевого маршрутизатора, способного обрабатывать широковещательные и многоадресные рассылки?

Когда я запрашивал веб-страницу на моем устройстве «WireSharking» с помощью браузера, персональная точка доступа корректно реагирует на все пакеты, возвращая веб-содержимое.

Информация о залоге

Я столкнулся с другими вставками переполнения стека, которые сообщают о тех же или похожих проблемах:

  1. TCP-соединение не работает должным образом при использовании iPhone в качестве точки доступа
  2. Не удалось отправить ssdp трансляцию через личную точку доступа

Хороший учебник для написания такого приложения для вещания / многоадресной рассылки на iPhone - Майкл Тайсон " Создание из Talkie: мульти-интерфейс вещания и многоадресной рассылки Msgstr "Достаточно сказать, что мое приложение соответствует всем требованиям (например, установка параметров сокетов SO_BROADCAST, SO_DONTROUTE и IP_MULTICAST_IF, где необходимо).

Ответ на ссылку (1) выше пишет " Может ли это быть потому, что личная точка доступа вводит трансляцию сетевых адресов? Msgstr "Я отфильтровал трассировки WireShark, чтобы показать только пакеты, подключенные к IP-адресу горячей точки, и нет никаких доказательств того, что личная горячая точка отправляет что-либо по адресу NAT.

В итоге

Кто-нибудь может объяснить, почему iPhone, на котором запущена личная точка доступа, не передает / многоадресные пакеты, и как решить проблему?

Спасибо заранее.

Постскриптум Я первоначально отправил этот запрос на переполнение стека и узнал об этом более Apple-ориентированном форуме.

Moshe Rubin
источник

Ответы:

1

Быстрый и грязный обходной путь

Я также столкнулся с той же проблемой при разработке приложения для iPhone, которое использует многоадресное UDP-сообщение для обнаружения устройств в сети. Очевидно, iPhone блокирует многоадресные сообщения в режиме личной точки доступа.

Тем не менее, iPhone, кажется, использует 172.20.10.0/28 подсеть для устройств в личной сети точек доступа. Это означает, что есть только 16 возможных адресов. Из этих, 172.20.10.0 по-видимому, не используется, 172.20.10.1 это сам iPhone, и отправка сообщений на 172.20.10.15 завершается с ошибкой «не разрешено». Это означает, что клиенты могут использовать только следующие 13 адресов: 172.20.10.2, 172.20.10.3..., 172.20.10.14,

Так что мой обходной путь довольно прост: вместо отправки широковещательных сообщений только на 224.0.0.0Я также отправляю их на все другие возможные адреса в подсети ( 172.20.10.2 - 172.20.10.14 ).

Конечно, чтобы быть ориентированным на будущее в производственном приложении, вам, вероятно, следует проверить список сетевых интерфейсов, проверить IP-адрес, подсеть и т. Д., Но для моего личного использования этого метода достаточно.

Jakob Egger
источник
Я нашел еще лучшее решение здесь: stackoverflow.com/a/40524524/322427
Jakob Egger