Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
23.05.2015
Размер:
1.7 Mб
Скачать

Первый кадр, посланный отправителем, доходит до получателя успешно.

Получатель

пересылает пакет, извлечённый из этого кадра, своему СУ, и

посылает отправителю через канал подтверждение.

Это подтверждение пропадает в канале.

Отправитель, не дождавшись подтверждения, посылает этот кадр ещё раз, и этот кадр снова доходит успешно.

Получатель воспринимает этот кадр как новый. Он

пересылает пакет, извлечённый из этого кадра, своему СУ, и

посылает отправителю через канал подтверждение, которое опять пропадает канале.

и т.д.

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

Вследующем параграфе мы приводим пример протокола,

вкотором этот механизм присутствует. Для такого протокола уже можно формально доказать его соответствие спецификации (8.25).

8.4.5Протокол с чередующимися битами

Протокол с чередующимися битами (называемый в англоязычной литературе словосочетанием Alternating Bit Protocol, или, сокращённо, ABP) предназначен для решения той же задачи, что и предыдущий протокол: доставка кадров от отправителя получателю через ненадёжный канал связи (который может искажать и терять передаваемые кадры).

267

Механизм, с помощью которого получатель может отличить новый кадр от переданного повторно, реализован в данном протоколе следующим образом: среди переменных отправителя и получателя присутствуют булевы переменные s и r соответственно, значения которых имеют следующий смысл:

значение переменной s равно чётности номера очередного кадра, которого пытается послать отправитель, и

значение переменной r равно чётности номера очередного кадра, которого ожидает получатель.

Вначальный момент значения s и r равны 0 (первый кадр имеет номер 0).

Как и в предыдущем протоколе, в этом протоколе используется абстрактное значение ‘ ’, обозначающее искажённый кадр.

Работа протокола происходит следующим образом.

1.Отправитель, получив очередной пакет от своего СУ,

записывает его в переменную x,

формирует кадр, который представляет собой значение некоторой кодирующей функции ϕ на паре (x, s),

посылает этот кадр в канал,

запускает таймер

после чего он ожидает подтверждение посланного кадра.

Если у отправителя истекает время ожидания, и он не получает подтверждения от получателя, то он повторно посылает уже посланный кадр.

Если же он получает подтверждение, которое представляет собой неискажённый кадр, содержащий бит, то он анализирует значение этого бита: если оно совпадает с текущим значением s, то отправитель

инвертирует значение переменной s (используя для этого функцию inv(x) = 1 − x), и

268

начинает новый цикл своей работы.

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

Блок-схема, представляющая такое поведение, выглядит следующим образом:

'$

start s = 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

&

s?

%

 

 

 

 

 

 

 

 

 

 

 

 

 

inv(s)

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

In ? x

 

 

 

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

s?

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bit(z) = s

 

 

 

 

 

 

 

 

 

B

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

z =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C ! ϕ(x, s)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

s?

 

 

 

 

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sE

 

 

 

 

 

 

 

 

 

start !

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

timeout ?

 

 

-

 

 

C ? z

 

 

 

 

 

 

 

 

 

 

 

 

 

Процесс, представляемый этой блок-схемой, обозначается знакосочетанием Sender и имеет следующий вид:

Init = (s = 0)

269

 

 

 

( bit(z) = s

)

 

 

 

A

z 6=

 

 

?

E

inv(s)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

z =

 

 

 

 

 

 

 

"

bit(z) = s #

?

 

 

In ? x

 

6

 

 

 

 

C ? z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

 

 

 

 

start ! - D

C ! ϕ(x, s)- C

?

 

 

6

 

 

 

timeout ?

 

 

 

Процесс отправителя является параллельной композицией (с ограничением) процесса Sender, и процесса Timer.

2.Канал в каждый момент времени может содержать не более одного кадра. Он может выполнять следующие действия:

получение кадра от отправителя, и

пересылка этого кадра получателю, или

пересылка получателю искажённого кадра, или

потеря кадра

получение кадра с подтверждением от получателя, и

пересылка этого кадра отправителю, или

пересылка отправителю искажённого кадра, или

потеря кадра.

Поведение канала представляется следующим процессом:

270

> ? > ?

 

 

 

 

R ! y

 

(8.29)

 

 

 

??

 

 

 

 

γ

 

S ! u

-

α

 

 

-

β

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R ? u

 

S ? y

 

 

 

 

 

66

 

 

 

 

 

 

 

 

 

 

 

 

 

S !

 

R !

 

 

3.Получатель при получении очередного кадра из канала

проверяет, не искажён ли этот кадр,

и если не искажён, то извлекает из него пакет и связанный с ним бит при помощи функций info и bit, обладающих следующими свойствами:

info(ϕ(x, b)) = x, bit(ϕ(x, b)) = b

Получатель проверяет, совпадает ли значение бита, извлечённого из кадра, с ожидаемым значением, которое содержится в переменной r.

Если проверка дала положительный результат, то получатель

передаёт пакет, извлечённый из этого кадра, своему СУ

инвертирует значение переменной r, и

посылает отправителю через канал подтверждение.

Если проверка дала отрицательный результат, то получатель посылает кадр подтверждения с неверным битом (что заставит отправителя послать свой кадр ещё раз).

Если же кадр искажён, то получатель его игнорирует (предполагая, что отправитель, не дождавшись подтверждения, пошлёт это кадр ещё раз)

271

Блок-схема, представляющая описанное выше поведение, выглядит следующим образом:

' $

 

start

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r = 0

 

 

 

 

 

 

s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

s?

 

 

 

 

6

 

 

6

 

&-

 

%C ! ϕ(1

 

 

r)

c

 

 

 

 

 

inv(r)

 

 

C ? f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

s?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

f =

 

 

-

bit(f) = r

 

 

+ -

Out ! info(f)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Процесс, представляемый этой блок-схемой, обозначается знакосочетанием Receiver и имеет следующий вид:

Init = (r = 0)

a

 

 

 

 

 

 

YH

 

 

 

 

 

 

 

 

 

 

 

 

 

6 HHHH

 

 

 

 

 

 

 

HH

HHC ! ϕ(1

− r)

 

 

C ? f f =

 

 

 

 

HHH

 

HH

 

 

( bit(f) = r

)

 

 

 

f 6=

 

H

 

 

b

 

6

?

HH

- c

?

 

 

 

 

-H

 

 

 

 

 

 

 

 

 

f =

 

)

 

 

 

( bit(f) = r

 

 

 

 

 

6

?

 

 

Out ! info(f) inv(r)

Процесс Protocol, соответствующий всему протоколу, определяется так же, как и в предыдущем пункте, выражением (8.23). Потоковый граф данного процесса имеет вид (8.24).

272