идентификатор последовательности для обработки надежности - PullRequest
0 голосов
/ 04 июня 2009

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

Я мог бы использовать base64, но это только сделало бы его немного более читабельным, но на самом деле ничего не решало.

Я также рассмотрел вопрос о добавлении метки даты, однако это было бы неаккуратно при работе с сообщениями, полученными около полуночи.

Я чувствую, что должно быть лучшее решение, которое кто-то может предложить, даже если это просто придерживаться целых чисел.

Ответы [ 2 ]

1 голос
/ 04 июня 2009

Для этого конкретного задания я предпочитаю использовать инкрементную (не менее 64-битную) целочисленную последовательность, засеянную меткой времени с высоким разрешением. Таким образом, даже если происходит потеря состояния на отправляющем конце, когда последовательность повторно отбирается со времени, она, по всей вероятности, просто прыгнет вперед. Любые ошибки в 10K, оставленные в этом году, оставляются в качестве упражнения для Lazarus Long. : -)

Имейте в виду, что обнаружение разрыва последовательности по сути является оптимизацией. Передающая сторона должна повторять передачу до тех пор, пока не будет получено подтверждение, а отсутствие (для паузы или поврежденной дейтаграммы) просто вызывает более раннюю повторную передачу. (ZMODEM - редкое исключение из этого правила, в качестве режима работы по умолчанию используется один ack в конце потока, а все остальные повторные передачи управляются nacks; однако в качестве протокола передачи файлов это по сути один гигант составная датаграмма.)

0 голосов
/ 04 июня 2009

Использовать TCP? Вот почему TCP отличается от UDP

Я не хочу быть саркастичным, но именно поэтому TCP существует.

...