Go-Back- N ARQ — это особый случай протокола автоматического запроса на повтор (ARQ), в котором процесс отправки продолжает отправлять количество кадров, указанное размером окна , даже не получая пакет подтверждения (ACK) от получателя. Это особый случай общего протокола скользящего окна с размером окна передачи N и размером окна приема 1. Он может передавать N кадров одноранговому узлу, прежде чем потребовать ACK.
Процесс-получатель отслеживает порядковый номер следующего кадра, который он ожидает получить. Он отбросит любой кадр, который не имеет точного порядкового номера, который он ожидает получить (либо дубликат кадра, который он уже подтвердил, либо кадр, который не в порядке, который он ожидает получить позже), и отправит ACK для последнего правильного кадра в порядке. [1] После того, как отправитель отправит все кадры в своем окне , он обнаружит, что все кадры с момента первого потерянного кадра являются ожидающими , и вернется к порядковому номеру последнего ACK, который он получил от процесса-получателя, и заполнит свое окно, начиная с этого кадра, и продолжит процесс снова.
Go-Back- N ARQ — более эффективное использование соединения, чем Stop-and-wait ARQ , поскольку в отличие от ожидания подтверждения для каждого пакета, соединение все еще используется по мере отправки пакетов. Другими словами, в течение времени, которое в противном случае было бы потрачено на ожидание, отправляется больше пакетов. Однако этот метод также приводит к отправке кадров несколько раз — если какой-либо кадр был потерян или поврежден, или ACK, подтверждающий их, был потерян или поврежден, то этот кадр и все последующие кадры в окне отправки (даже если они были получены без ошибок) будут отправлены повторно. Чтобы избежать этого, можно использовать Selective Repeat ARQ . [2]
В этих примерах предполагается бесконечное количество номеров последовательностей и запросов. [1]
N := размер окна Rn := номер запроса Sn := номер последовательности Sb := основание последовательности Sm := макс. последовательностьФункция- приемник — Rn := 0 Делайте следующее всегда: если полученный пакет = Rn и пакет не содержит ошибок, то Принять пакет и отправить его на более высокий уровень Рн := Рн + 1 иначе Отказаться от пакета Отправить запрос на RnФункция- отправитель — Sb := 0 Sm := N + 1 Повторяйте следующие шаги бесконечно: если вы получили номер запроса, где Rn > Sb, то Sm := ( Sm − Sb ) + Rn Sb := Rn если нет передаваемых пакетов , то передать пакет, где Sb ≤ Sn ≤ Sm . Пакеты передаются по порядку.
При выборе значения N следует учитывать несколько моментов :