Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 70
Текст из файла (страница 70)
Таким образом, эффективность работы несколько повьппается. На рис. 3.11, б кадры О и 1 снова принимаются корректно, а кадр 2 теряется, После получения кадра 3 уровень передачи данных приемника замечает, что один кадр выпал из последовательности. Для кадра 2 отправителю посылается )ч)АК, однако кадр 3 сохраняется в специальном буфере. Далее прибывают кадры 4 и 5, они также буферпзируются уровнем передачи данных вместо передачи на сетевой уровень. )ч)АК 2 приходит к отправителю, заставляя его переслать кадр 2 Когда последний оказывается у получателя, у уровня передачи данных уже имеются кадры 2, 3, 4 и 5, которые сразу же в нужном порядке отдаются сетевому уровню. Теперь уже можно выслать подтверждение получения всех кадров, включая пятый, что и показано на рисунке, Если )ч)АК вдруг потеряется, то отправитель по окончании времени ожидания 2 сам отправит кадр 2 (и только его(), однако это может произойти значительно позже, чем при помон(и )х(АК.
Короче говоря, тх)АК ускоряет процесс повторной пересылки испорченного кадра. Метод выборочного повтора соответствует приемному окну размером более 1. Любой кадр в пределах окна может быть принят, после чего он будет храниться в буфере до тех пор, пока все предыдущие кадры не будут переданы сетевому уровню. При большом окне данный способ может потребовать значительного размера буфера. Листинг 3.6. Протокол скользящего окна с возвратом на л у* Протокол 5 (конвейерный) попускает наличие нескольких неподтвержденных кадров. Отправитель кажет передать до МЯХ 5ЕО кадров, не ожидая подтверждения.
Кроме того, в отличие от предыдущих протоколов, не предполагается, что у сетевого уровня всегда есть новые пакеты. При появлении нового пакета сетевой уровень инициируе~ событие песыогк 1ауег геабу *! Йеттпе МЯХ 5ЕО 7 т* должна быть 2"п-1 *т' Гуребет епцщ (Глаже вггтчв). скяцщ егг, тшеоШ, пебетогд 1ауег геабу) екель 'суре; Фтпс1цбе "ргоСосо1.Ь" всат(с Ьоо1евп Ьетыееп(яец пг а, вец пг Ь, яец пг с) ( /* возвращает Ггце, если (а «=Ь < с циклично; иначе Га1яе *! 11 (((в <= Ь) Ы (Ь < с)) П ((с < а) Ы (а <= Ь)) П ((Ь < с) Ы (с < а))) геьцгп(тгце): е1ве гетцгп((в1яе); ятвстс чотб вепб бата(яер пг слаще пг, вец пг слаще ехрестеб. раснес Ьцттег[)) /* подготовить и послать инфориационный кадр *! глаже в; т* вреиеннвя переиенная *! Протоколы скользящего окна 261 з того = Ьоттег(тгаве пг): з.зец = тгаше пг; з.асх = (/гаже ехрессеб + МАХ 5ЕО) «верхом» на кадре данных */ Со рпузтса! 1ауег(ьз): 5(агС СтшегТ/гаже пг); чо(б рготосо15(нота) ( зец пг пехС тгаше Со зепб; /* */ зец пг аск ехрестеб; /* вец пг (гаже ехрессеб: /* багаже г; /* расйеС Ьо/тес[МАХ 5ЕО+1); /* зец пг пбиттегеб; /* количество */ вец пг т: /* еуейС Суре ечепС; индекс массива буферов */ /" разрешить события петыогй 1ауег геабу */ /* номер следующего ожидаемого входящего подтверждения /* попер следующего посылаеиото кадра */ /* копер следующего ожидаеиото входящего кадра */ /* вначале буфер пуст */ ыкп1е (Сгое) ( шатт тог ечепс(бечепС); /* четыре возможных события си, етепС суре выше */ зыттсЬ(етепС) ( сазе песыогй 1ауег геабу: /* у сетевого уровня есть пакет для передачи */ /* получить, сохранить и передать новый кадр */ Ггош песыогк 1ауег(абыттегЕпехС /гаже Со зепб)); /* получить новый пакет у сетевого уровня */ пбыттегеб = пбо(тегеб + 1; /* увеличи~ь окно отправителя */ зепб баса(пенс тгаще со зепб, тгаше ехрессеб.
ьыттег): /* передать кадр */ 1пс(пехС /гаже Со зепб); /* увеличить верхний край окна отправителя */ Ьгеак; сазе /гаже агг!ча1: /* прибыл кадр с данныии или с подтверждениеи */ тгош рдузтса1 1ауег(аг); /* получить пришедший кадр у физического уровня */ 1/ (г.зец =- /гаже ехрессеб) ( /* кадры принииаются только по порядку ноиеров */ со песыогй 1ауег(бг.тото): /* передать паке~ сетевоиу уровню */ 1пс(тгаше ехрессеб); /* передвинуть нижний край окна получателя /* подтверждение для кадра и подразумевает также кадры и - 1, п - 2 и т д, */ епаЬ)е пеСыогй 1ауег(); асй ехрессеб = 0; */ пехС тгаше Со зепб = 0; /гаже ехрестей = 0: пЬоттегеб = О. /* вставить пакет в кадр */ /* вставить порядковый непер в кадр */ Ж (МАХ 5ЕО + 1): /* подтверждение.
посылаеиое /* послать кадр по каналу */ /* запустить таймер ожидания подтверждения */ МАХ 5ЕО > 1: используется для исходящего потока саиый старый неподтвержденный кадр */ следующий кадр, ожидаеиый во входящеи потоке */ вреиенная переменная */ буферы для исходящего потока */ использующихся в данный иоиент выходных буферов 262 Глава 3.
уровень передачи данных ылт1е (Ьетыеещасх ехрестеб, г.асд. пенс (саше Со яепб)) ( /* отправить подтвершдение вместе с информационным кадром */ пьцтгегеб = пьцгтегеб - 1; /* в буфере на один кадр меньше */ ягор т(шег(асв ехрестеб); /* кадр прибыл в целости, остановить тайиер */ 1пс(асв ехресьеб): Ьгеау; /* уиеньшить окно отправителя */ /* плохие кадры просто игнорируются */ саяе скяап егг: Ьгеад; саяе 1)веонно: /* вреии ~стекло: передать повторно все неподтвершденные кадры */ повторно пенс тгаше то яепб = асд ехрестеб; /* копер первого посылаеиого кадра Я/ тот (т = 1: 1 <= поиттегеб; 1+и) ( яепб бага(пехт /саше то яепб, тгаие ехрестеб, Ьит/ег); /* переслать ,адр +/ 1пс(пехт тгаше Со яепб), /* поиготовитьсв и пересылке следующего повторно кадра */ 1/ (пбн/тегеб < ИАХ ЕЕО) епаЫ е песногх Тауег(): е1яе бтяаЫ е петногк 1ауег(): ) Выбор одной из двух приведенных ранее стратегий является вопросом компромисса между пропускной способностью и размером буфера уровня передачи данных.
В зависимости от того, что в конкретной ситуации является более критичным, может использоваться тот или иной метод. В листинге 3.6 показан конвейерный протокол, в котором приниматощпй уровень передачи данных принимает кадры по порядку. Все кадры, следующие за ошибочным, игнорируются. В данном протоколе мы впервые отказались от предположения, что у сетевого уровня всегда есть неограниченное количество пакетов для отсылки.
Когда у сетевого уровня появляется пакет, который он хочет отправить, уровень инициирует событие пеЬыогд 1ауег геабу. Однако чтобы ограничить количество неподтвержденных пакетов числом МАХ 5Е0 уровень передачи данных должен илтеть возможность отклточать на время сетевой уровень. Для атой цели служит пара библиотечных процедур — епаЫе петыогд 1ауег и йяаЫе педшогк 1ауег.
Обратите внимание на то, что в любой момент времени может быть МАХ 5ЕК а не МАХ ЕЕЦ + 1 неподтвержденных пакетов, хотя различаются МАХ ЗЕЯ+ 1 порядковых номеров; от О до МАХ ЬЕЯ. Чтобы понять, почему необходимо такое ограничение, рассмотрим сценарий с МАХ ЯЕО.= 7. 1. Отправитель посылает кадры с О по 7. 2. Подтверждение для кадра 7 наконец прибывает к отправителю.
Протоколы скользящего окна 263 3. Отправитель посылает следующие восемь кадров, снова с номерами с 0 по 7, 4, Еше одно подтверждение для калра 7 прибывает к отправителю. Но вот вопрос: все восемь кадров, входящих во второй набор, благополучно дошли до адресата или все они потерялись 1включая игнорированные кадры после ошибочного)7 В обоих случаях получатель отправит кадр 7 в качестве подтверждения. У отправителя нет способа отличить один случай от другого, По этой причине максимальное количество неподтвержденных кадров должно быть ограничено числом МАХ 3ЕЦ Хотя в протоколе 5 кадры, поступившие после ошибки, не буферизируются получателем, тем не менее, отправитель должен хранить отправленные кадры в своем буфере, пока не получит на них подтверждение.
Если поступает подтверждение на юдр л, кадры л — 1, и — 2 (то есть все предыдущие кадры) автоматически считаются подтвержденными. Эта особенность наиболее важна в случае потери или повреждения какого-либо кадра с подтверждением. Получив подтвержление, уровень передачи данных проверяет, не освободился ли у него какой-нибудь буфер. Если буфер освобождается, то заблокированному ранее сетевому уровню можно снова разрешить инипиировать события легиогк 1ауег геабу. Для этого протокола предполагается, что всегда есть обратный трафик, по которому можно отправлять подтверждение.
Если же это условие не выполняется, то никакие подтверждения отосланы не будут. Протокол 4 не нуждается в подобном допущении, поскольку за каждым принятым кадром следует обратный, даже если только что уже был отправлен какой-то кадр в сторону отправителя. В следующем протоколе проблема отсутствги обратного трафика будет решена гораздо элегантней. Поскольку протокол 5 хранит несколько неподтвержденных кадров, ему требуется несколько таймеров, по одному на кадр. Для каждого кадра время считается независимо от других. Все таймеры могут симулироваться программно, используй единственные аппаратные часы, вызывающие периодические прерывания.