Каковы необходимые механизмы для надежного уровня по UDP? - PullRequest
1 голос
/ 20 февраля 2011

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

Каковы необходимые механизмы для надежного уровня по UDP?Дополнительные детали приветствуются.

На данный момент я понимаю, что это требования:

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

Это повлияло на мою архитектуру: надежные заголовки сообщений с последовательностями и временными метками, подтверждающие сообщения, которые отражают принятую последовательность и временную метку, система для отслеживания подходящего времени повторной передачи на основе адреса ипоток, который a) принимает сообщения и ставит их в очередь для получения пользователем, b) подтверждает надежные сообщения и c) повторно передает неподтвержденные сообщения с истекшими таймерами повторной передачи.

ПРИМЕЧАНИЕ: Надежный UDP не тот жекак ПТС.Даже заказанный надежный UDP не совпадает с TCP.Я не тайно не знаю, что я действительно хочу TCP.Кроме того, прежде чем кто-то играет в семантику, да ... надежный UDP - это "оксюморон".Это слой поверх UDP, который обеспечивает надежную доставку.

Ответы [ 3 ]

2 голосов
/ 20 февраля 2011

Возможно, вы захотите взглянуть на ответы на этот вопрос: Что вы используете, когда вам нужен надежный UDP?

Я бы добавил «управление потоком» в ваш список,Вы хотите иметь возможность контролировать объем данных, отправляемых по конкретной ссылке, в зависимости от того, сколько времени вы получаете в оба конца, или вы будете заполнять ссылку и просто выбрасывать датаграммы.

1 голос
/ 31 июля 2013

Обратите внимание, что в зависимости от общего протокола, можно обойтись без таймеров повторной передачи. См., Например, сетевой протокол Quake 3 .

В Q3 надежные пакеты просто отправляются, пока не увидят подтверждение.

0 голосов
/ 20 февраля 2011

Почему вы пытаетесь заново изобрести TCP?Он предоставляет все функции, которые вы заявили изначально, и было показано, что он работает хорошо.

РЕДАКТИРОВАТЬ - Поскольку ваши комментарии показывают, что у вас есть дополнительные требования, которые изначально не были заявлены, вы должны рассмотреть вопрос о том, будет ли гибридная модель с использованием нескольких сокетовбыть лучше, чем пытаться выполнить все эти критерии в одном протоколе прикладного уровня.

На самом деле кажется, что вам действительно нужно SCTP .

SCTP поддерживает:

  1. передача на основе сообщений (а не поток байтов)
  2. несколько потоков через один сокет-сокет
  3. упорядоченный или неупорядоченный прием пакетов

... порядок сообщений не является обязательным в SCTP;принимающее приложение может выбрать обработку сообщений в том порядке, в котором они были получены, а не в том порядке, в котором они были отправлены

...