Задать вопрос

Какие возможные проблемы при использовании UDP?

Доброго времени суток!

При использовании сокетов, по протоколу UDP, какие возможны проблемы?
Мне стоит заботится только о не дошедших и дублированных пакетах?
И как посоветуете бороться с не дошедшими пакетами?

TCP не используется т.к. это будет p2p соединение. А более менее простое решение с соединением через NAT это - UDP hole punching.
  • Вопрос задан
  • 3570 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
lam0x86
@lam0x86
Пакеты также могут быть искажены или доходить в неправильном порядке.
В целом, тема довольно непростая, можно погуглить в сторону "reliable UDP".
Ответ написан
Комментировать
RIAMedia
@RIAMedia
Кину ссылку на свою статью habrahabr.ru/post/142858 про UDP Hole Punching и в конце ссылка на библиотеку, которая позволит не заморачиваться с пакетами.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Возможно вам стоит обратить внимание на RTMFP протокол и сервер Cumulus.
Там в качестве транспорта используется UDP.

Если хотите писать свой велосипед - прочтите rfc, появится много хороших идей.
Дизайн у RTMFP просто отличный.

Вообще нормальных rtmfp серверов сейчас нет - сам как-то хотел заняться.
Стучите в скайп d00mko если интересно.
Ответ написан
Комментировать
nekipelov
@nekipelov
> При использовании сокетов, по протоколу UDP, какие возможны проблемы?

Это довольно странный вопрос. Если понимать его буквально, то никаких проблема там нет. Это при работе с TCP проблемы: таймауты, keep-alive, асинхронность или потоки... При работе с UDP все значительно проще: отправил и забыл :-)

> Мне стоит заботится только о не дошедших и дублированных пакетах?

Это уже от задач зависит. Разумеется не дошедшие пакеты будут. Будут и дубликаты и переупорядочивание. Но это особенность протокола, а не проблема.

> И как посоветуете бороться с не дошедшими пакетами?

Нужен reliable протокол, но сделанный поверх UDP, я правильно понял? Тогда надо смотреть в сторону проектов вроде enet.bespin.org. На github много чего находится по слову rudp, возможно подойдет: https://github.com/search?q=rudp. Но я ни одно подобное решение не использовал, когда была необходимость, пришлось писать самому. Сразу предупреждаю, что достичь эффективности аналогичной TCP невозможно хотя-бы потому, что весь код будет работать в user-space, а не на уровне ядра. Да и вообще дело это неблагодарное...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы