Я читаю о реализации надежного 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