обеспечение порядка пакетов в UDP - PullRequest
8 голосов
/ 19 сентября 2010

я использую 2 компьютера с приложением для отправки и получения дейтаграмм udp.
отсутствует управление потоком данных (ICMP отключен)
часто, когда я отправляю файл как дейтаграммы udp через приложение, я получаю 2 измененияих порядок и для этого - потеря пакетов.

есть ли способ убедиться, что winsock и send () будут отправлять пакеты так же, как они туда попали?
или ОС делает это?У меня отключен и вид брандмауэра, и между компьютерами не подключен аппаратный коммутатор (они подключены напрямую).необходима конфигурация сетевого устройства?
спасибо

Ответы [ 4 ]

10 голосов
/ 19 сентября 2010

UDP - это легкий протокол, который по своей конструкции не обрабатывает такие вещи, как последовательность пакетов. TCP - лучший выбор, если вы хотите надежную доставку и последовательность пакетов.

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

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

7 голосов
/ 19 сентября 2010

UDP не гарантирует, что ваши пакеты будут доставлены в порядке.(Это даже не гарантирует, что ваши пакеты будут доставлены вообще.) Если вам нужен такой уровень надежности, вам лучше использовать TCP.В качестве альтернативы вы можете добавить маркеры последовательности в свои дейтаграммы и переставить их на другом конце, но зачем изобретать велосипед?

5 голосов
/ 20 сентября 2010
есть ли способ убедиться, что winsock и send () будут отправлять пакеты так же, как они туда попали?

Это называется TCP.

Или попробуйте надежный протокол UDP, такой как UDT . Я предполагаю, что вы можете использовать небольшую встроенную платформу, поэтому вам нужен более компактный протокол, такой как Bell Lab RUDP .

0 голосов
/ 03 октября 2010

управление потоком отсутствует (ICMP отключен)

Вы можете реализовать собственное управление потоком, используя UDP:

  • Отправка одного или нескольких пакетов UDP
  • Ожидание подтверждения (отправляется как другой UDP-пакет от получателя к отправителю)
  • Повторите, как указано выше

Подробнее см. Протокол скользящего окна .

[Это будет в дополнение к с порядковым номером в отправляемых вами пакетах.]

...