UDP — это ненадежный протокол с потерями, который работает поверх протокола IP. В отличие от TCP (который обрабатывает все аспекты надежной связи), прикладной уровень должен обрабатывать отброшенные пакеты и другие аспекты «надежного» транспортного протокола. Таким образом, вполне вероятно, что любая реализация, которая требует надежности в той же степени, что и TCP, будет иметь дополнительные накладные расходы.
Вы можете выделить два порта port A
и port B
. Каждый порт является однонаправленным, если нет отброшенного пакета.
client 1 = port A = server 2
server 1 = port B = client 2
Это делает вещи простыми. Сервер просто отправляет данные и периодически прослушивает, но получает сообщения только в том случае, если его клиент сбрасывает сигнал.
Клиент — это отрицание. Он принимает сигналы и отправляет только в случае отсутствия пакета. Альтернативной реализацией была бы та, в которой пара клиент/сервер могла бы общаться друг с другом, делая порт действительно однонаправленным.
Мы получаем надежность сообщений на обоих портах, используя индекс двух пакетов.
client index 1 = server index 2
server index 1 = client index 2
Индекс для каждого из них является однобайтовым и увеличивается клиентами при отправке нового сообщения. Доставка сообщения предполагается до тех пор, пока не будет получено специальное сообщение, которое будет UDP-сообщением для отброшенного пакета. Это будет содержать сигнал для отброшенного сообщения, вероятно, в его наиболее значимом или наименее значимом бите / байте в зависимости от порядка следования байтов дизайна, а также от индекса сообщения. Очередь также кажется необходимой, но я еще не проработал ее детали.
person
marshal craft
schedule
25.12.2016