tanenbaum_seti_all.pages (525408), страница 69
Текст из файла (страница 69)
3.11, а изображен возврат на л для случая большого окна приемника, Кадры О и 1 корректно принимаются, и высылается подтверждение этого факта. 0днако кадр 2 потерялся или был испорчен. Ничего не подозревающий отправитель продолжает посылать кадры, пока не выйдет время ожидания кадра 2. Только после этого он возвращается к месту сбоя и заново передает все кадры, начиная с кадра 2 (отправляя 2, 3, 4 и т, д.) Интервал ожидания †~ 2 ЯВЛЯЙ ~~~ Ф~~ь ,)в Ошибка Кадры, отвергнутые уровнем передачи данных Время — В Интервал ожидания — ф~ ЯВ (~~ ~~ Ц2 ЯВ ~~~ ~~ Д2 13 (ф ~~~'~ыЬ~~ь тг, Буферизироввны уровнем Пакеты 2-В переданы Ошибка сетевому уровнго передачи данных Рис. 3.11.
Конвейеризация и коррекция ошибок: эффект при размере окна 1 (а); эффект при размере акнв > 1 (б) Другая общая стратсгия обработки опщбок при конвейерной псредачс кадров, называемая выборочным повтором, заключается в том, что получатель хранит в буфере все правильные кадры, принятые пм после нсвсрного или потерянного кадра. При этом неверный кадр отбрасывается. Когда отправитель наконец замечает, что что-то случилось (то есть заканчивается время ожидания подтверлтдения), он просто отправляет еще раз только потерянный или испорченный кадр, не повторяя отправку всех последующих, как это продемонстрировано на Рис.
3.11, б. Если вторая попытка будет успспгной, получающий уровень переда. чи данных сможет быстро передать накопивпщеся пакеты сетевому уровню, после чего выслать полтверждение получения кадра с наибольшим номером. ВыбоРочный повтор часто комбинируется с отправкой получателем «отрнцательного 260 Глава 3. Уровень передачи данных подтверждсттия» ()ч)АК вЂ” тчейас!че Ас)споуи1ст(дсшепс) при обнаружспии ошибки, например, при неверной контрольной сумме или при измененном порядке следования кадров. )чАК стимулируют повторную отправку еше ло того, как закончится время ожидания подтвержления от отправителя, Таким образом, эффективность работы несколько повышается. Па рис. 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ве */ 1Г (((а <= Ь) Ы (Ь < с)) П ((с < а) Ы (а <= Ь)) П ((Ь < с) дд (с < а))) ге(огп((гце); е1ве ге2цгп(Га15е): вСашс чотб вепб бата(вец пг Ггаве пг, вец пг главе ехрестеб. расхе( Ьы((его) /* подготовить и послать инфорнационный кадр */ Ггаве в: /* вреиенная переменная */ Протоколы скользящего окна 26 в з.(п(о Ьи(тес[/гале пг): 5.вес = тгдше пг: з.асй = ([гаже ехрессеб « МАХ 5ЕО) «вернои» на кадре данных */ Со рпувзса1 1ауег(дз): зСагС Стшег(бгаше пг); чозб рготосо15(чо1б) ( вес пг пехС /гаже Со зепб; */ вец пг асХ ехрес[еб; зее пг [гаже ехрессеб; тгаше г; расйеС Ьы(/ег[МАХ 5ЕО+13; вец пг пбиттегеб: /* количест */ вей пг т; ечейС Суре ечепС: /* индекс массива буферов */ /* разрешить собьтия пе[ногд 1ауег геабу */ /* ноиер следующего ожидаеиого входящего подтверждения /* нокер следующего посылаемого кадра */ /* номер следующего ожидаеиого входящего надра */ /* вначале буфер пуст */ ыл(1е (Сгые) ( ыа(С /ог ечепС(дечепС); /* четыре возиожных события.
си. ечепС Суре выше */ вшзссп(ечепс) ( сазе петыогХ )ауег геабу: /* у сетевого уровня есть пакет для передачи */ /* получи~ь. сохранить и передать новый кадр */ (гош петшогх !ауег(дбыттег[пехС /гаже Со зепб)); /* получить новый паке~ у сетевого уровня щ/ обит"тегеб = пбп/уегеб + 1: /* увеличить окно отправителя */ вепб баса(пехс /гаже со зепб, тгаше ехрессеб, ьы(тег): /" передать кадр */ (пс(пехС тгаше Со вепб); /* увеличить верхний край окна отправителя */ Ьгеай; сазе [гаже агг)ча1: /* прибыл кадр с данными нли с подтверждениен */ Ггош рлуз)са1 1ауег(йг); /* получить пришедший кадр у физического уровня */ т( (г.вец =- (гаже ехрессеб) ( /* кадры принимаются только по порядку ноиеров */ Со петыогй 1ауег(йг.тото); /* передать пакет сетевону уровню */ тпс(тгаше ехрессеб); /* передвинуть нижний край окна получателя /* подтверждение для кадра и подразуиевает также кадры п - 1, п - 2 и т.
д, */ епаЬ1е петшогд 1ауег(); асй ехресСеб = О: */ пехС тгаше Со зепб = О; (гаже ехрес(еб = О: пбы(тегеб = О: /* вставить пакет в кадр */ /* вставить порядковый нонер в кадр */ Ф (МАХ 5ЕО + 1); /* подтверждение, посылаеное /* поспа~ь кадр по каналу */ /' запустить таймер ожидания подтверждения */ /* МАХ 5ЕО > 1: используется для исходящего потока l* саный старый неподтвержденный кадр "/ /* следующий кадр. ожидаемый во входящем потоке */ /* временная переменная */ /* буферы дпя исходящего потока */ во использующихся в данный ионент выходных буферов 262 Глава 3. уровень передачи данных нпт1е (Ьетиееп(асд ехрестес, г.асд, пехт /гаюе то вепб)) 1 /* отправить подтверидение виесте с инфориационным кадром */ пооттегеб = пооттегеб - 1; /* в буфере на один кадр неньще */ асор 1)щег(асх ехрестеб): /* кадр прибыл в целости; остановить тайнер *! /* уиеньиить окно отправителя */ шс<асд ехрестеб); ) Ьгеад; /* плохие кадры просто игнорируются *! саве схвищ егг: Ьгеах.
саве 11юеоит: /* время истекло: передать повторно все неподтверщденные кадры */ повторно пехт тгаще то вепб = ас)т ехрестеб: /* номер ~ервого посылаемого кадра *l тог (т = 1: ! <= пбнттегеа; т++) ) вепс бата(пех1 'гаюе то вепб. /гаге ехрестеб, Ьоттег); /* перестать 1 кадр */ тпс(пехт /гаще:о вепб), /* приготови~ься к пересылке следующего повторно кадра */ тт (пбиттегеб < МАХ ЕЕ)) епаЬ)е петногк Тауег(): е1ве б)ваЬ)е пеСногк 1ауег(): Выбор одной из двух привсдснпых ранее стратегий является вопросом компромисса между пропускной способностью и размером буфера уровня передачи данных.
В зависимости от того, что в конкретной ситуации является более критичным, может использоваться тот нли иной метод. В листинге 3.6 показан конвейерный протокол, в котором припимаюгций уровень передачи данных принимает кадры по порядку. Все кадры, слелуюгдне за ошибочным, игнорируются. В данном протоколе мы впервые отказались от предположения, что у сетевого уровня всегда сеть неограниченное количество пакетов для отсылки.
Когда у сетевого уровня появляется пакет, который он хочет отправить, уровень инициирует событие пе1иогк 1ауег геабу. Однако чтобы ограничить количество неподтвержденных пакетов числом МАХ БЕЯ, уровень передачи данных должен иметь возможность отключать на время сетевой уровень, Для этой цели служит пара библиотечных процедур — епаЬ)е пе1иогй 1ауег и баваЬ1е пебиогх 1ауег. Обратите внимание на то, что в любой люмент времени может быть МАХ ЕЕЯ, а не МАХ ЕЕЯ + 1 неподтвержденных пакетов, хотя различаются МАХ 5Етс+ 1 порядковых номеров: от О до МАХ УЕЯ. Чтобы понять, тючему необходимо такое ограничение, рассмотрим сценарий с МАХ БЕ0 = 7.