2014-10-21 1 views
0

Я написал простой многоадресный сервер и клиентскую программу на языке программирования C. Затем я подключил сервер к маршрутизатору с поддержкой многоадресной рассылки (поддерживается dd-wrt) через интерфейс Ethernet. Клиент подключается к маршрутизатору через беспроводной интерфейс. Я отправляю пакеты с сервера клиенту каждые 10 мс. Размер пакета - 512 байт. Проблема заключается в том, что клиент получает только 40% пакетов, которые я также вижу в Wireshark. Это не проблема с беспроводной и потерями пакетов, это что-то о многоадресной рассылке, и я не могу понять, где проблема. Я также проверял скорость передачи данных, и все выглядит нормально. Любой совет? ThxПотери пакетов многоадресной рассылки

+1

Показать код .. – UDPLover

+0

Зависит от того, как вы генерируете пакеты .. и наиболее очевидные потери пакетов UDP связаны с переполнением буфера. – UDPLover

+0

И что я могу сделать, чтобы исправить переполнение буфера? Пакеты - это char [512], которые отправляются с функцией sendto. – user3852803

ответ

0

Многоадресная рассылка выполняется по UDP. UDP имеет нулевые функции для восстановления потери пакетов. То, что вы видите, является эндемическим. Если вам нужна надежность, вы должны сами ее построить.

+0

Да, я знаю. Я также создал механизм повторной передачи. Но эта проблема потери пакетов не связана с надежностью UDP или беспроводной связью, это что-то еще, возможно, с размером буфера или другим параметром. Теперь я снова тестировал свою систему, когда пакеты достаточно малы, потери пакетов также малы, около 2%. Затем я увеличиваю размер пакета до 1400 байт, и я получил потерю пакетов 50% (1400 байт работает без фрагментации). Затем я использовал функцию setsockopt и установил размер буфера на 65 000, но все же у меня есть потеря пакетов около 40%, что не связано с надежностью UDP. Как я могу решить эту проблему? – user3852803

+0

комплект больше UDP буфер .. подобный 2000 000. около 2 MB. – UDPLover

+0

Общее допустимое ограничение на размер полезной нагрузки UDP составляет 534 байта. Это не будет фрагментировано, поэтому пакет может быть потерян полностью. Как только происходит фрагментация, потеря любого фрагмента подразумевает потерю целого. – EJP