Wireshark получает многоадресные пакеты UDP, но подписка клиентского приложения не дает?

Описание

В настоящее время я пытаюсь опубликовать метки времени на Raspberry Pi и подписаться на них на моем компьютере на базе Windows. Для этого я подключил ОБА Raspberry Pi и ПК с Windows к коммутатору. Итак, если я запустил пример публикации на Raspberry Pi, я уже вижу входящие многоадресные пакеты UDP в Wireshark на моем ПК с Windows. Теоретически, приложение подписки также должно иметь возможность получать пакеты и распечатывать их на консоли. Но это не тот случай. Образец подписки НЕ распечатывает какие-либо временные метки на консоль, что означает, что он не получает никаких многоадресных пакетов UDP. Это почему? Если я запускаю пример публикации и подписки на ПК с Windows, это работает...

Я могу иметь одну подсказку, в чем может быть проблема: если я запускаю оба примера публикации / подписки на моем компьютере с Windows, они оба распечатывают в консоли, что они слушают opc.tcp://mypc:4801/ Но когда я запускаю пример публикации на raspi говорит, что он прослушивает opc.tcp://raspberrypi:4840/, но образец подписки все еще прослушивает opc.tcp://mypc:4801/ .

Какие-либо предложения? Может ли проблема с брандмауэром здесь? Любой совет высоко ценится!

Дополнительная информация

На следующем изображении вы видите IP-адрес Raspberry Pi:

Ниже вы можете увидеть переданные многоадресные пакеты UDP в Wireshark. Они действительно пришли от Raspberry Pi, потому что IP-адреса совпадают:

1 ответ

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

Кадр Ethernet менее 64 байт

Большинство сетевых адаптеров дополняют данные на выходном канальном уровне, поэтому это может не быть проблемой. Wireshark не сможет увидеть, что это произошло. Чтобы проверить, попробуйте заполнить данные полезными данными самостоятельно (скажем, 0xFF) пока в пакете не будет больше данных, чем 64 байта. К счастью, в наши дни это меньше проблем, но со мной такое случалось очень давно.

Неверная контрольная сумма UDP

Если вычисленная контрольная сумма не совпадает с контрольной суммой, предоставленной отправителем, пакет будет автоматически отброшен. Wireshark по умолчанию не вычисляет контрольную сумму и подключается до того, как драйвер захватит пакет, особенно если вы запускаете Wireshark в случайном режиме. Вы можете включить проверку контрольной суммы через " Правка"> "Настройки"> "Протоколы"> "UDP"> "Проверить контрольную сумму UDP", если это возможно.

Если вы можете изменить код на стороне отправителя, установите в поле заголовка контрольной суммы UDP все нули, чтобы отключить контрольные суммы.

Настройки сетевого адаптера в Windows

Если ваша машина управляется внутри предприятия, то я знаю, по крайней мере, пару плагинов адаптеров, которые будут мешать необычным сетевым пакетам. Попробуйте открыть диалоговое окно "Свойства" на сетевом адаптере и загляните.

Брандмауэр Windows

Я не эксперт в этом, но я думаю, что настройка по умолчанию брандмауэра Windows позволяет многоадресную рассылку. С другой стороны, если ваш компьютер управляется централизованно, политики могли быть изменены.

Другие вопросы по тегам