Я генерирую пакеты 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. Любые идеи?