Возможные причины потери данных, полученных по гигабитному UDP-соединению? - PullRequest
0 голосов
/ 30 ноября 2011

Я написал специальную программу на C #, которая получает около 1 МБ / с многоадресных данных UDP.Он работает на гигабитной сетевой плате, подключенной к выделенному серверу.

В некоторые моменты времени, когда объем сетевого трафика высок, он теряет пакеты UDP.

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

В обоих случаях загрузка ЦП составляет лишь около 15%..

Как это возможно?

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

Здесь на самом деле работают два буфера: аппаратные (на сетевой карте) и боковые (на .NET).Мы перенастроили аппаратные буферы сетевой карты на 1024 КБ вместо 256 КБ, надеюсь, это решит проблему.

1 голос
/ 30 ноября 2011

Соединения UDP не гарантируют доставку пакетов, если вам нужна гарантированная доставка пакетов, используйте вместо этого TCP.

Существуют различные причины потери пакетов при использовании UDP, чтобы перечислить несколько:

  • Перегрузка сети,
  • Повреждение пакета,
  • Неисправностьаппаратное обеспечение.

Хотя вы можете использовать только 15% своего ЦП на своем сервере (или клиенте), это не означает, что вы не исчерпываете другой ресурс (например, пропускную способность сети, буферы маршрутизатора).Для меня это звучит так, как будто вы страдаете от перегрузки сети (как вы сами заявили, что это происходит только во время большого сетевого трафика).

0 голосов
/ 30 ноября 2011

Если при запуске трех копий они не отбрасывают одинаковых пакетов, это не проблема сети.Вы, вероятно, заполняете буфер приема сокета.

Я не очень знаком с тем, как настроить это в Windows, но проверьте это:

Как мне установитьразмер буфера для нижнего сокета UDP?

...