Выборочное повторение ARQ с сокетами C UDP - PullRequest
0 голосов
/ 15 мая 2018

Я пишу приложение на C, которое использует WinSockets для передачи данных из приложения отправителя в приложение получателя, и я заменяю алгоритм остановки и ожидания выборочным повторением, где я застрял.

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

Однако я не вижу, как я должен получать подтверждения на стороне отправителя. Получение recvfrom сразу после отправки пакета фактически вернет его обратно к остановке и ожиданию. Есть ли у вас какие-либо советы о том, как действовать? Спасибо!

1 Ответ

0 голосов
/ 19 июля 2018

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

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

Если ACK получателя до того, как отправитель достиг максимума, ожидания не будет:)

EDIT:

У этого парня есть несколько интересных идей, сопровождаемых кодом: http://gafferongames.com/tags/networking

...