Надежный вопрос по методам UDP и ACK
Я читаю о реализациях надежного UDP (т.е. отправка пакетов ACK и повторная отправка пакетов без ACK).
Из двух основных моделей, которые я нахожу вокруг сети:
Клиент отправляет ACK для каждого полученного пакета с последовательностью этого пакета. Сервер предполагает, что пакет не доставлен, если он не получил ACK.
Клиент отправляет пакет 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 ответ
№ 2 также известен как Отрицательный ACK, он же NAK, это оптимистическая точка зрения транспорта. Это означает, что весы лучше, когда транспорт работает правильно.
# 1 - это пессимистическая точка зрения, предполагающая, что транспорт часто приводит к сбою.
TCP использует ACK, потому что существует фундаментальная зависимость от управления перегрузкой для отбрасывания пакетов для формирования трафика для создания справедливой сети. Надежные каналы UDP обычно используют NAK, потому что вы используете надежный высокоскоростной поток средней или низкой скорости с требованием низкой задержки по сравнению с шагом блокировки, типичным для базовой реализации ACK.
Обратите внимание, что если вы поднимитесь на шаг выше и посмотрите, скажем, на управление подпиской выше надежного канала UDP, явного победителя для использования ACK или NAK не будет. Мир рыночных данных доказал использование обеих технологий на высокой скорости в сетях большой емкости. Преимущество ACK с подписками заключается в том, что вам не требуется сложная повторная синхронизация после сбоя в сети, однако вы увидите постоянный пик использования сети и ЦП, когда каждый хост выдает повторную подписку.