2015-04-22 4 views
1

Я отправляю/получаю очень короткие UDP-пакеты между компьютером (C#) и микроконтроллером (C++). Независимо от скорости, я теряю около 50% своих UDP-пакетов, иногда больше, иногда меньше.50% udp-пакеты потеряны

В C# Я использую UDPClient, отправляя в IPEndPoint (синхронно) и получая асинхронно.

Мои буферы достаточно большие, и я вижу, что потери производятся на компьютере как для отправки, так и для приема (микро-отправка как можно большего количества пакетов). Я пытаюсь отправить/получить около 60 пакетов в секунду, но я могу настроить это, и даже 10 пакетов в секунду у меня есть потери. Например, я отправил 20 пакетов в секунду, микро принимает и отправляет 15, а мой компьютер получает 10 пакетов в секунду.

Мы говорим о локальном подключенном к сети Ethernet-соединении 1 гигабита, очень коротком (возможно, 10 футов). Я отправляю одноадресные пакеты, хотя в сети у меня также есть многоадресное видео (12 Мбит/с). Самый большой пакет составляет около 120 байт, большинство из них около 30-40 байт.

Любые советы о том, как отладить проблему или что может быть причиной этого?

Спасибо.

ответ

1

Вот некоторые вещи, чтобы рассмотреть следующие вопросы:

  • Это проводное соединение или беспроводное соединение? Разумеется, 50% потери UDP-пакетов будут более распространены в беспроводном случае, хотя и по плохой ссылке.

  • Предполагая, что это беспроводное соединение, уровень сигнала достаточно высок на обоих устройствах? Вы можете проверить это с помощью различных утилит, таких как iwconfig на * nix.

  • Какова фактическая скорость передачи данных? Вы говорите, что вы передаете с различными расценками, но я предполагаю, что это относится к тому, как часто вы отправляете пакеты, а не фактическую скорость передачи по ссылке. Чем быстрее битрейт, тем выше ожидаемая потеря пакетов. Я считаю, что это прямой результат физики антенн, что данные могут передаваться с более высокой мощностью, если они передаются при более низких битрейтах.

  • Являются ли эти пакеты одноадресными или широковещательными? Передача пакетов приведет к более высокой скорости потери пакетов. Это связано с отсутствием механизма повтора в нижних слоях сетевого стека в широковещательном случае.

  • Хотя вы сказали, что ваши пакеты небольшие, другим фактором, влияющим на потерю пакетов UDP, является размер пакетов. Это довольно интуитивно: чем крупнее пакет, тем меньше вероятность его получения.

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

+0

Спасибо за ваш ответ. Просто отредактировал вопрос, добавив, что дополнительная информация. – chourizo

+0

@chourizo У меня возникают проблемы с широковещательными пакетами multicast/udp, я тоже испытываю убытки + 60%, я буду сообщать с любой помощью/информацией об этой проблеме, которая может быть полезной. В то же время я буду отправлять повторяющиеся пакеты, то есть отправлять каждый пакет 2 раза, если первый «потерян» каким-то образом – KGCybeX

+0

Надеюсь, что я ошибаюсь, но я боюсь, что увеличение количества пакетов только ухудшит ситуацию. Часть моих проблем связана с наличием двух сетевых интерфейсов с неправильными приоритетами. Пожалуйста, убедитесь, что это не так (отключите один из них).Кроме того, попробуйте иметь больше пакетов с меньшим количеством данных для уменьшения накладных расходов. делая это, я исправил свои проблемы. – chourizo