Эти явления – следствие обезличенности сообщений ACK и NAK.
3.1.2 ARQ с возвратом на n шагов назад (GBn – GoBackn)
Для предупреждения подобных ситуаций должна использоваться нумерация пакетов. Вместе с каждым кадром передается уникальный порядковый номер (ПН) содержащегося в нем пакета.[7] Станция-получатель B хранит номер последнего пакета, поступившего без ошибок и аннулирует все вновь поступающие кадры, если ранее она их уже получила без ошибок, т.е. игнорирует дубликаты.
Протокол отправляет очередные кадры данных сразу вслед за первым, не дожидаясь, пока придет подтверждение в надежде, что «все обойдется», ведь вероятность получить кадр с ошибками, обычно, меньше, чем без ошибок. Станция-отправитель производит посылку серии из n кадров, считая от последнего пакета, получившего подтверждение верности. Все посланные, но не подтвержденные кадры должны оставаться в буфере передатчика с тем, чтобы быть извлеченными для цели повторной передачи, если придет отрицательное подтверждение (или быть удаленными, если подтверждение будет положительным).
Естественно, как и прежде, сторона‑получатель должна тем или иным способом подтвердить верность всех пакетов потока. По-прежнему, если подтверждение на какой-либо кадр отрицательно, кадр должен быть повторно передан.
Существует две стратегии повтора:
а) повторить группу кадров, начиная с того, на который не поступило сообщение ACK;
б) повторить выборочно только те кадры из последовательности длиной n, в которых декодером были обнаружены ошибки.
Протокол ARQ с возвратом на n шагов назад является примером протокола, в котором используется метод непрерывной передачи с обработкой ошибочной передачи кадра по варианту (а), «с возвратом».
Использование обратного канала исключительно для посылки подтверждений – это частный случай. Более общий случай заключается в том, что данные между пунктами А и В передаются (или могут передаваться) в обоих направлениях. Тогда по обратному каналу[8] также идет и поток пакетов данных от станции B к A. В этом случае нумерованное подтверждение посылается в специально выделенном битовом поле заголовка пакетов данных обратного направления (а не в форме специализированного кадра).
Сообщение о верности пакета приобретает новый смысл: любой из корреспондирующих пунктов (А и В), отправляя пакет данных, в заголовке кадра указывает номер пакета (НП) и номер ожидаемого пакета данных от противоположной стороны (не очень удачно называемый в стандартах «номером запроса» – НЗ). Нумерация пакетов в сеансе должна начинаться с нуля. Номер запроса – это свидетельство для удаленной стороны, что все пакеты с меньшими номерами успешно достигли пункта назначения (ошибки в них не зафиксированы). Если передающая сторона к моменту получения НЗ не исчерпала регламент на передачу подряд n пакетов, то она должна перенести начало отсчета регламента на точку (НЗ‑1) в потоке отправляемых пакетов и тем самым снова приобрести возможность передавать без подтверждения ещеn пакетов подряд. Если к моменту получения НЗ передающая сторона исчерпала регламент, то протокол должен будет для повторной передачи пакетов совершить «откат назад», но на величину не более n пакетов. Так возникает понятие «скользящего окна из n пакетов», а протоколы ARQ в такой реализации называют протоколами ARQ со скользящим окном пакетов.
Если интенсивность искажения пакетов мала, то число безостановочно передаваемых пакетов может быть весьма большим. Эффективность использования пропускной способности каналов с таким протоколом может быть весьма высокой.
Отправленные, но еще неподтвержденные пакеты, остаются в буферной памяти станции-отправителя. Протокол ARQ с возвратом на n шагов назад требует буферной памяти не менее, чем на n пакетов на стороне отправителя A и на один пакет на стороне получателя B.[9]
Теперь отметим, что требуемый номер (как пакета, так и подтверждения) при работе с окном из n пакетов может принадлежать ограниченному множеству чисел {0, 1, 2… (n‑1)}. На языке математики это может быть охарактеризовано как нумерация по mod m, причем m>n. Минимальный допустимый модуль равен n+1.
3.1.3ARQ с выборочным повтором (SR – SelectiveRepeat)
Протокол ARQ с выборочным повтором также использует метод непрерывной передачи с окном на n кадров, но обработка ошибочной передачи происходит по стратегии (б) (см. выше).
Протокол ориентирован на дэйтаграммный режим, который не гарантирует поступления пакетов на приемный пункт в той же последовательности, в которой они отправлены передающим модулем. В этих условиях протокол с выборочным повтором избегает излишних повторных передач, но в этом протоколе не могут применяться нумерованные подтверждения в виде НЗ, т. к. номер запроса служит групповым подтверждением для пакетов с номерами, меньшими текущего НЗ. В протоколе же с выборочным повтором каждое подтверждение должно быть строго индивидуально сопоставлено своему пакету. Пакеты должны нумероваться по модулю, но модуль mдолжен здесь выбираться, исходя из условия m>2n.
Для работы протокола как на передающей, так и на приемной стороне необходима буферная память не менее, чем на n пакетов. Буфер на приемной стороне необходим, т. к. пакеты, которые поступают к ней в случайной последовательности, могут быть предъявлены получателю (как нечто цельное) не раньше, чем будут приняты безошибочными все пакеты из n (включая и повторно присланные) и все пакеты будут упорядочены в памяти приемного пункта. Такая сортировка пакетов необходима, т. к. в общем случае набор пакетов составляет единое целое, и предъявление данных получателю с переставленными пакетами недопустимо.
3.2.1 «Эхо» с ретрансляцией по обратному каналу всего кадра (Эхо1)
Пусть при передаче пакетов из пункта А в пункт Bк структуре кадра не предъявлено никаких требований в отношении обнаружения или исправления ошибок (нет избыточных бит). При отправлении пакета данных в прямой канал копия пакета остается в буфере передатчика А. Принимающий модуль В помещает пакет в буфер приемника (без какого-либо анализа) и тут же транслирует его по обратному каналу в сторону отправителя А.[10] Сторона‑отправитель A производит сравнение пакета, хранимого в буфере передачи, с пакетом, поступившим по обратному каналу. Если сопоставление не выявило расхождений, то считается, что в памяти приемного пункта В находится неискаженный пакет данных и можно передавать следующий пакет. Если же сопоставление выявило расхождение, то считается, что пакет в пункте B ошибочный, и передача такого пакета дублируется.
Протокол «ошибается» (пропускает ошибку) только тогда, когда оба кадра, прямой и обратный, искажаются ошибкой одинаковой конфигурации. Во всех других случаях ошибка будет обнаружена.
3.2.2 «Эхо» с ретрансляцией контрольных бит CRC (Эхо2)
Чаще используется другая разновидность этого протокола: оправляемые в прямой канал пакеты данных в передающем модуле кодируются помехоустойчивым циклическим кодом, контрольные биты CRC сохраняются в буфере, а в канал отправляются только биты данных. На приемной стороне пакет данных сохраняется в буфере и тоже кодируется. Сформированные биты CRC отправляются по обратному каналу передающему модулю А. Производится сравнение контрольных бит. На основании этого сравнения делается вывод о верности пакета в буфере приемника пункта B.
Простейшим вариантом работы модуля-отправителя является отправление пакета по прямому каналу и ожидание, пока по обратному каналу не придут его контрольные биты (аналогично алгоритму ARQ с остановкой и ожиданием). Однако может использоваться, так же, как в протоколах с РОС, и метод непрерывной передачи пакетов с сопутствующей нумерацией, механизмом «окна» и всеми вытекающими протокольными действиями.[11]
Незамеченные ошибки могут возникнуть в двух случаях:
– во-первых, при таком искажении кадра, которому не сопутствует изменение контрольной суммы, т.е. когда содержимое кадра исказилось, но таким образом, что вновь вычисленные контрольные биты совпадают с контрольными битами, вычисленными для прежнего (неискаженного) кадра.[12]
– во-вторых, когда кадр искажен в прямом канале, на приемной стороне получено свое значение CRC, которое при передаче по обратному каналу подверглось такому искажению, что совпало с CRC передатчика, отображающим отправленный (неискаженный) пакет.
Как следует из рис. 1, в отсутствие ошибок в каналах время передачи пакета данных под управлением рассматриваемого протокола равно длительности протокольного цикла Тпц. Как уже было отмечено, в этом времени цикла можно выделить долю «полезного», «чистого» времени, связанного с транспортировкой бит данных, и есть время, которое должно быть отнесено к «накладным расходам», обусловленным особенностями протокола.
Если ошибки в сигналах на физическом уровне не исключены, то передача одного пакета данных может потребовать двух протокольных циклов или трех или еще большего их числа. Следовательно, в общем случае в рассматриваемом протоколе время доставки пакета данных (без замеченных на приемной стороне ошибок) есть величина случайная.
Принимая это во внимание, эффективность протокола обычно, предлагается оценивать показателем, похожим на понятие КПД в технике, который отражает влияние различных факторов, действующих в системе передачи