
Ограничении, обусловленное помехами
На практике идеального обмена сообщениями не происходит. Сообщения и квитанции могут быть искажены или вообще потеряны.
На
рисунке показана последовательность
событий, происходящих при искажении
помехой данных во время передачи блок
1 был искажен и искажение помехой было
обнаружено когда ЭВМ В получило сообщение.
В этом случае ЭМВ В передает запрос
ошибки в виде отрицательной квитанции
(ОК). Получение ОК ЭВМ А для нее означает,
что она должна вновь передать блок 1
(Б1). Если блок 1 затем принят правильно,
то в ЭВМ А поступает положительная
квитанция (ПК), после получения которой
ЭВМ может передавать блок 2 (Б2).
Н
а
рисунке показана ситуация, когда в
результате искажения потеряна ПК. В
этом случае блок 1 был передан от ЭВМ А
к ЭВМ В и был принят ЭВМ В и соответственно
кодирован. Помехи исказили квитанцию,
и она не была принята ЭВМ А, которой
неизвестно, что случилось. ЭВМ А должна
ждать какого-то ответа в течение короткого
промежутка времени после передачи
последнего символа блока сообщения.
Так как квитанция получена, то ЭВМ А
может предположить, что произошло
искажение (или квитанция или блок , или
даже линия вышла из строя или ЭВМ).
Простым способом выясняется, что
случилось является выдача сигнала
«запрос передачи», запрашивающего от
ЭВМ В передать последний блок.
Н
а
рисунке показан запрос передачи после
тайм-аута. При его получении ЭВМ В
просматривает, что было отправлено
последним, и выясняет что была послана
ПК. Поэтому она повторно передает ПК,
который принимается ЭВМ А. Теперь ЭВМ
А знает, что Б1 был принят правильно, и
передает блок 2. На первый взгляд эта
процедура кажется хорошей, но оказывается,
что при определенных обстоятельствах
возможна потеря данных.
Например, рассмотрим ситуацию.
Б
лок
N-1 был передан и успешно принят и
подтвержден ЭВМ В. От ЭВМ А передается
следующий блок N, который при передаче
искажается так, что его полностью нельзя
распознать. Поэтому ЭВМ В не квитирует
сообщение. После тайм-аута ЭВМ А выдает
сигнал запроса повторной передачи. При
приеме этого сигнала просматривается,
что было послано последним, и повторно
посылается ПК. Фактически это была
квитанция на блок N -1. Если ЭВМ А получил
эту квитанцию, считает, что эта квитанция
на блок N, то передает блок N+1, и блок N
будет потерян.
Одним из подходов к решению этой проблемы является нумерация квитанций. Блоки и квитанции можно нумеровать так, чтобы конкретная относится к конкретному блоку. Блоки и квитанции нумеруются в соответствии с протоколами HDLC и SDLC, и получатель ожидает приема входящих блоков в правильной последовательности. Когда обнаруживается пропуск в последовательности номеров, как в случае приема блока N+1, получатель инициирует действия по восстановлению ситуации. В начале ситуация казалась сложной, но было найдено простое решение – использование неодинаковых квитанций для следующих друг за другом блоков. Вместо одной ПК-0 используются символы АР-0; а для передачи ПК-1 – АР-1. Первый полученный блок квитируется ПК-1, а второй ПК-0. Вслед за этим посылается чередующиеся квитанции.
Н
а
следующем рисунке показано, что
произойдет с чередующимися квитанциями
при искажении блока данных.
На следующем рисунке показана ситуация, когда искажена квитанция:
В каждом их этих примеров ситуация восстановления без потери данных.