UDP-пакеты принимаются только в неразборчивом режиме

Я генерирую пакеты UDP для 100 групп многоадресной рассылки на одной машине с виртуальной машиной Ubuntu 16.04 и подписываюсь на эти группы на другой машине с виртуальной машиной Ubuntu 16.04. Оба находятся на сервере HP, которым управляет диспетчер Hyper-V. Проблема в том, что мое приложение получает только 2 из 100 групп. Однако, когда Wireshark выполняет захват, приложение начинает получать все сообщения.

Я нашел несколько других подобных вопросов, таких как этот, где объясняется, что, поскольку Wireshark работает в неразборчивом режиме, он позволяет проходить всем пакетам (через что?), и это объясняет, почему мое приложение тоже начинает их «видеть». Таким образом, изменение конфигурации интерфейса Ethernet на неразборчивый режим позволяет приложению получать все сообщения без запуска Wireshark.

А в чем проблема с другими пакетами, которые нормально не принимаются? Я попытался перекрестно проверить шестнадцатеричный дамп «хороших» и «плохих» сообщений, и они не кажутся разными. Контрольные суммы для уровней IP и UDP верны. В чем еще может быть проблема?

  • Диапазон многоадресных IP-адресов 239.1.4.1-100
  • Порт назначения 50003
  • Диапазон исходных портов ~33000–60900
  • брандмауэр отключен

ИЗМЕНИТЬ:

Похоже, когда приложение подписано только на 8 мультикаст-групп, оно работает нормально, однако, если подписано более чем на 8, оно получает только 2 (если они заканчиваются на .7 или .8) или ни одной, как описано выше. Итак, я бы предположил, что пакеты правильные. Может проблема в настройках сети? Или само приложение - нужно найти ошибку в скрипте, который я не писал.

EDIT2:

Я установил образ ISO на другую машину (Virtual box вместо HP Windows Server), и он работает как надо. Таким образом, я предполагаю, что мое приложение работает нормально, и все конфигурации ОС Ubuntu верны. Теперь я возлагаю всю вину на Virtual Manager/settings. Любые идеи?


person Nazar    schedule 11.08.2017    source источник
comment
Пакеты, а не пакеты.   -  person President James K. Polk    schedule 11.08.2017
comment
@JamesKPolk спасибо за исправление   -  person Nazar    schedule 11.08.2017
comment
Возможности здесь с максимальным членством в группах: serverfault.com/questions/248094/   -  person Zan Lynx    schedule 14.08.2017


Ответы (1)


Звучит так, как будто вы не сообщили о них ядру.

См. http://tldp.org/HOWTO/Multicast-HOWTO-6.html

Вы должны использовать setsockopt с IP_ADD_MEMBERSHIP. И обязательно используйте правильные значения для своих локальных интерфейсов.

person Zan Lynx    schedule 11.08.2017
comment
Да, у меня это было в параметрах сокета. Должно быть что-то еще. Только что обновил свой вопрос. - person Nazar; 14.08.2017
comment
netstat перечисляет все IP-группы, на которые он подписан, и некоторые другие... - person Nazar; 14.08.2017
comment
Зан, max_memberships превышает 100. Я также запустил отправителя и получателя на одной машине, и все работает отлично. Значит, это как-то связано с настройками/конфигурациями сети? - person Nazar; 15.08.2017
comment
@Naz: Если он получает их в беспорядочном режиме, а не иначе, это означает, что ядро ​​​​отфильтровывает их и не доставляет приложениям. Что это за настройки, кроме тех, что я упомянул, я не знаю. - person Zan Lynx; 15.08.2017