Надежный вопрос по методам UDP и ACK - PullRequest
7 голосов
/ 07 января 2011

Я читаю о реализации надежного UDP (т. Е. Отправка пакетов ACK и повторная отправка пакетов без ACK).

Из двух основных шаблонов, которые я нахожу в сети:

  1. Клиент отправляет ACK для каждого полученного пакета с последовательностью этого пакета.Сервер предполагает, что пакет не доставлен, пока не получит ACK.

  2. Клиент отправляет пакет ACK с последовательностями пакетов, которые, по его мнению, отсутствуют.Сервер предполагает, что пакет доставлен, если он не получит ACK от клиента, говорящего о том, что он пропустил последовательность, затем он повторно отправляет запрошенные (пропущенные) пакеты.

Короче говоря, 1. клиентыотправляет последовательность принятых пакетов, в то время как в 2. клиент отправляет последовательность отсутствующих пакетов.

Просто интересно, каковы плюсы / минусы каждого метода, и какой из них является более распространенным (я полагаю, 1,но 2 кажется очень умным методом, так как, предположительно, большинство пакетов приходит, и обычно теряются только несколько).

РЕДАКТИРОВАТЬ: краткий пример обоих методов:

Method 1: Server sends: 1,2,3,4,5 
Client received: 1,3,5,4 
Client sends back: ACK 1, ACK 3, ACK 5, ACK 4  
Server resends: 2.. maybe more if ACK packets were lost


Method 2:
Server sends 1,2,3,4,5,6,7,8
Client receives: 1,3,2,5,7
Client Sends :ACK (lowest continuous 3,highest received 7,  seem to be missing 4,6)
Server resends: 4,6,8

1 Ответ

8 голосов
/ 15 мая 2011

# 2 также известен как Отрицательный ACK, он же NAK, это оптимистическая точка зрения транспорта.Это означает, что масштабирование лучше, когда транспорт функционирует правильно.

# 1 - это пессимистическая точка зрения и предполагает, что транспорт часто будет давать сбой.

TCP использует ACK, поскольку существуетфундаментальная зависимость от управления перегрузкой для отбрасывания пакетов для формирования трафика для создания справедливой сети.Надежные UDP-каналы обычно используют NAK, потому что вы используете надежный высокоскоростной средний или низкоскоростной поток с требованием низкой задержки по сравнению с шагом блокировки, типичным для базовой реализации ACK.

Обратите внимание, если вы поднимаетесь на шаг выше и смотритеПри, скажем, управлении подпиской над надежным каналом UDP нет явного победителя для использования ACK или NAK.Мир рыночных данных доказал использование обеих технологий на высокой скорости в сетях большой емкости.Преимущество ACK с подписками заключается в том, что вам не требуется сложная повторная синхронизация после сбоя в сети, однако вы увидите постоянный пик использования сети и ЦП, когда каждый хост выдает повторную подписку.

...