Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерные сети.doc
Скачиваний:
9
Добавлен:
28.10.2018
Размер:
1.42 Mб
Скачать

3. Arq на n шагов назад (Go Back n)

Широко используемый алгоритм. Используется в стандартных протоколах УЛПД - HDLC, SDLC, ADCCP, LAPB.

Пакеты нумеруются и посылаются из А в В без ожидания запроса НЗ, тем самым подтверждаются все пакеты до НЗ.

n - число шагов назад, означает, что узлу А не разрешается посылать пакет i+n , пока пакет i не получит подтверждение (т.е. НЗ = i+1).

Иначе этот протокол называют протоколом со скользящим окном.

Пусть - последний НЗ, принятый в т.А. Тогда из т.А могут посылаться пакеты с номерами в "окне" от до + n - 1.

Затем при получении нового НЗ возрастает и окно скользит вверх.

Если в т.В принят пакет с ошибкой, то пакеты с большими номерами не принимаются, пока А не повторит передачу этого пакета.

Пример: Протокол на 4 шага назад

 

 

  1. из-за этой ошибки пакеты после четвертого повторяются начиная с 1-го

  2. эта ошибка не вызвала сложностей, подтверждение пришло до того, как пришлось бы идти назад.

  3. когда пакет 5 передается повторно приходит НЗ=7. Возможно разумно сразу за 5-м передавать 7-й, а не 6-й

При выборе n большим можно исключить некоторые повторные передачи.

Алгоритм остается корректным, если порядковый номер ПН и НЗ номер запроса передаются по модулю m (m>n), поскольку величина |Z- Yпр| самое большее равна n.

(Z - номер пакета, помещаемого в кадр;  Yпр- номер ожидаемого пакета)

Повторные передачи в этом методе появляются по следующим причинам:

  1. ошибки при передаче в прямом направлении;

  2. ошибки при передаче в направлении обратной связи;

  3. длина кадров в направлении обратной связи больше, чем в прямом направлении. Выход - увеличение n.

(в стандартных протоколах используется m=8, m=128)

Пример: ARQ на 7 шагов назад.

Но если увеличить n, то эффективность возрастает по причинам 2 и 3, но падает по причине 1. Если приемный модуль будет посылать короткие управляющие кадры при приеме кадра с ошибкой, то возврат будет произведен быстрее (или можно рассчитать, в каком кадре должно быть подтверждение) Разновидности: ARQ с возвращением и "заиканием" на последнем сообщении.

4. Arq с выборочным повтором (с адресным переспросом)

Для т.В считаются принятыми пакеты, идущие в произвольном порядке. Повторная передача запрашивается из А только для тех пакетов, которые принимаются неправильно.

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

  1. Циклические избыточные проверки.

Cyclic Redundancy Check - CRC. Это наиболие часто используемые коды с проверкой на четность.

Пусть

K- длина последовательности битов данных , L- длина CRC (число проверочных битов).

Удобно обозначать биты данных через , ,..., , и представлять последовательность в виде многочлена S(D) :

При этом степени переменной D сохраняют порядок битов.

CRC представляется другим многочленом:

Тогда передаваемую информацию и CRC вместе можно представить многочленом:

Многочлен C(D) , представляющий CRC определяется как

где         - порождающий многочлен - многочлен степени L , который задает конкретный код CRC . Операция деления многочленов является обычным делением многочленов, но коэффициенты принимают только двоичные значения, а арифметические операции над коэффициентами выполняются по модулю 2 (1+1=0 , 0-1=1).

Например:

Данные 101011   

Порождающий многочлен 10011   

получаем кодовое слово 1010110100

Поскольку степень многочлена g(D) не превышает L,то степень остатка не превышает L-1 . Если степень C(D) получалась меньше, чем L-1, то соответствующие старшие оэффициенты , ... полагаются равными 0.

Вычисление CRC на практике обычно реализуется аппаратно.

Пусть z(D)- частное от деления на g(D).

Тогда = g(D)*z(D)+C(D).

Вычтем C(D) по модулю 2 из обеих частей этого равенства. x(D) = + C(D) = g(D)z(D) Таким образом, все кодовые слова делятся на g(D). Например, в предыдущем примере:

Пусть x(D) передается, а принятая последовательность y(D) отличается от x(D) из-за ошибок в канале связи.

y(D) = x(D)+e(D) ,

где e(D) - многочлен, представляющий последовательность ошибок.

Несовпадения коэффициентов y(D) и x(D) отмечены в многочлене e(D) единичными коэффициентами.

Т.к. x(D) нацело делится на g(D) , то остаток [ y(D)/g(D) ] = остаток [ e(D)/g(D) ]

Если ошибки не возникли e(D) = 0, остаток = 0.

Если остаток не равен нулю, то принятая последовательность содержит ошибки.

Возможен случай, когда e(D) № 0 , а остаток = 0. Если e(D) является кодовым словом e(D) = g(D) z(D), то обнаружить ошибки нельзя. g(D) имеет по крайней мере 2 ненулевых члена ( и 1 ) , следовательно g(D)z(D) тоже должно иметь min 2 ненулевых члена ( z(D) № 0 ).

Пусть возникла одиночная ошибка .

при любом I. Следовательно, все одиночные ошибки обнаруживаются.

Поскольку разница между степенями и 1 равна L, то степени старшего и младшего членов g(D)z(D) также отличаются по крайней мере на L (Z(D) № 0). Если e(D) - кодовое слово, то длина пакета ошибок не меньше L+1.

Пусть возникла двойная ошибка, например

  не делится на g(D). e(D) нельзя обнаружить, если делится на g(D) .

Для любого g(D) существует min число n, для которого делится на g(D) .

А для любого L>0 существуют примитивные многочлены , для которых .

Если g(D) - примитивный многочлен степени L , и если длина кадра меньше , то не может делиться на g(D). Все двойные ошибки обнаруживаются при этом. На практике для вычисления CRC используется порождающий многочлен g(D), который получается произведением примитивного многочлена степени L-1 и многочлена (D+1).

(D+1) позволяет обнаруживать любое нечетное число ошибок.

У такого кода минимальное расстояние >=4 ,

способность обнаруживать пакеты ошибок >=L ,

вероятность обнаружения ошибок в случайной последовательности .

Стандартные ЦИП-коды с L=16:

   ЦИП-16

  ЦИП-МККТТ (CRC-CCITT)

CRC-32 используется в протоколах обмена данными HDLC и ZMODEM:

Модификация CRC-CCITT:

Первые 16 бит кадра инвертируются при вычислении CRC, а при передаче не инвертируются. Инвертируется остаток для CRC. В приемном модуле первые 16 бит кадра инвертируются для повторного вычисления остатка, который затем инвертируется для сравнения с принятой CRC. При этом удается избежать нулевой последовательности, удовлетворяющей CRC (линия или модем неисправны). Тогда обнаруживаются такие ошибки, как добавление или удаление нулей из начала (конца) кадра.