tanenbaum_seti_all.pages (525408), страница 66
Текст из файла (страница 66)
собьпиен */ ыв<1е (Сгие) ( на>с (ог еуеп((вечен(); (событие (гаво агпва1)*/ <гою рьув>са1 1ауег(аг); Со пегыогк )ауег(аг.)п(о): Со рпув>саТ 1ауег(ав): отправителя */ ) буферы для кадров */ (гая>е агг>ва) является едимс<веннын возноиныи /* единс>венное во>полное событие — прибытие кадра Элементарные протоколы передачи данных 249 Чтобы осознать, чем плох данный вариант протокола, вспомните, что задача уровня передачи данных закл>очается в предоставлении безошибочной прозрачной связи между двумя процессами сетевого уровня.
Сетевой ур<шснь машины А передает серию пакетов своему уровню передачи данных, которьш лол>кен гарантировать доставку идентичной серии пакетов сетевому уровню мапшны В сс уровнем передачи данных. В частности, сетевой уровень машины В цс ма>кот распознать недостачу пакета илн дублирование пакета, поэтому уровень псредачп данных должен гарантировать, что дублироваш<я пакетов нс произойдет ни при каких обстоятельствах. Рассмотрим следукпций сценарий. 1. Сетевой уровень машины Л передает пакет 1 своему уровню передачи данных. Пакет доставляется в целости на манн>пу В и передастся сс сетевому уровню, Машина В посылает кадр подтверждения назад па маппшу Л.
2, Кадр подтверждения полностью теряется в канале связи. Он просто пе попа- даст на машину А. Все было бы намного проще, если Г>ы терялись только информационные — по не управляющие — кадры, однако канал связи, к сожалению, нс делает между пимп большой разниць>. 3. У уровня передачи данных машины А внезапно истекает отведенный интервал времени.
Не получив подтверждения, он предполагает, что посланный им кадр с данными был поврежден или потерян, я посылает этот кадр еще раз. 4. Дубликат кадра прибывает па уровень передачи данных машины В и передается на сетевой уровень. Если машина Л посылала ца машину В файл, то часть этого файла продублировалась, таким образом, копия файла па машппс В будет неверной.
Другими словами, протокол допустил ошибку. 5. Понятно, что необходим некий механизм, с помощью которого получатель смог бы отличать новый кадр от переданного повторно. Наиболее очевидным способом решения данной проблемы является помещение огцранителем >юрядкового номера кадра в заголовке кадра. Тогда по номеру калра получатель сможет понять, новый это кадр или дубликат. Поскольку отводить в кадре много места под ааголовок нежелательно, возникает вопрос: каково минимальное количество бит, достаточное лля порядкового номера кадрау Единственная неопределенность в данном протоколе может возникнуть между кш<ром л> и следующим за ним кадром и -ь 1. Если кадр >л потерян или поврежден, получатель не подтвердит сто и отправитель пошлет его еще Раз.
Когда он будет успепшо принят, получатель пошлет отправителю подтверждение. Именно здесь находится источник потенциальной проблемы. В зависимости от того, будет получено подтверждение или цет, отправитель может послать кадр т или кадр т + 1. Отправитель может начать посылать кадр >л + 2 только когда получит подтверждение получения кадра т + 1. Но это означает, что кадр т уже был отправлен и полтверждецие его получения было отправлено и получено. Следовательно, неопределенность может возникнуть только между двумя соседними калрами.
Таким образом, должно быть достаточно всего одного бита информации (со значением О или 1). В каждый момент времени получатель будет ожидать при- 260 Глава 3. Уровень передачи данных бытия кадра с определенным порядковым номером. Кадр с неверным номером будет отбрасываться как дубликат. Кадр с верным номером принимается, передается сетевому уровню, после чего номер следующею ожидаемого кадра увеличивается по модулю 2 (то есть О становится 1, а 1 — О), Пример подобного протокола приведен в листинге 3.4.
Протоколы, в которых отправитель ожидает положительного подтверждения, прежде чем перейти к пересылке следующего кадра, часто называются РАК (Роз)с(че Ас)свозы)ебяетпепс чбС)т Кеггапвппвсйоп — положительное подтверждение с повторной передачей) или АК(4 (Аи(оглаг)с Кереаг герцев( — автоматический запрос повторной передачи). Подобно протоколу 2, он также передает данные только в одном направлении.
Листинг 3.4. Протокол с положительным подтверждением и повторной передачей /* Протокол 3 (РЯП) обеспечивает синплексную передачу данных по ненадежноиу каналу. */ в(бет)пе МЯХ 5ЕО 1 /* в протоколе 3 должно быть равно 1 */ Суребет епца (тгаае агг!ча1, сдвив егг, С!аеоыС) ечепС Суре; (1)пс)цбе "ргоСосо1.Ь" /* врененная переиенная */ /* бубер для исходящего паке~а */ пехС /гаже Со вепб = 0; ноиероа */ Ггоп песыогд 1ауег(дбцттег): /* получить первый пакет у сетевого уровня */ ыЬ))е (Сгые) ( З.(ПГО Ьц/ГЕг: /* сФориировать кадр для передачи */ в.вец лЕхС /гаже Со вепб: /* вставить порядковый нокер а кадр */ Со рлувзса1 Тауег(аз): /* послать кадр по каналу */ зСагС С1аег(в.вес); /* запустить таймер ожидания подтверждения */ ыатС тог ечепС(аечепС); /* ждать события (гаже агю ча1. сдана егг или С(аеацС */ )Г (ечепС = /гаже агг1ча1) ( Ггаарпувтса1 1ауег(аз): /* получить подтверждение */ 1т (з.аск =- пехС (гаже Со вепб) ( тгоа песногс )ауег(йьцТ/ег); /* получить следующий пакет у сетевого /* инициализация исходящих последовательных уровня */ зпс(пехС /гаже Со зепб); /* инвертировать значение перененной пехС /гане Со вепб */ ) ) ) чотб гесезчегЗ(чо1б) зец пг Ггаае ехрестеб: /гаже г.
з; чо1б вепбегЗ(чотб) ( вец пг пехС агаве Со вепб: */ ггаае в: расйеС Ьыттег; ечепС Суре ечепС: /* порядковый попер следующего исходящего кадра Элементарные протоколы передачи данных 251 ечепс суре ечепс; тгаюе ехресаег) = Ог ыат1е гггые) 1 ыа1с тог ечепсгаечепс)г /* ожидание возможных событий: тгаяе агю ча1, сазов егг */ ту <ечепт = Глаже аггтча1) 1 /* прибыл неповрежденный кадр */ тгою рпуз1са1 1ауег(ьг)г т! (г.зед =- 7гаюе ехресзес) 1 Со петногк 1ауеггьг.тп/о); тпсгтгаже ехресгеб)г порядковым ноиером */ ) з.аск = ) — тгаюе ехрессещ подтверждение */ Со рпузтса! )ауегйз); /* полу ить лрибьвюий кадр */ /* именно этот кадр и ожидался */ /* передать данные сетевому уровню */ /* в следуюдий раз ожидать кадр с другин /* попер кадра.
дпя которого посылается /* ни одно из попей не используется */ Протокол 3 отличается от своих предшественников тем, что и отправитель, и получатель запоминают номера кадров. Отправитель запоминает номер следующего кадра в переменной пень Главе ьс зепг), а получатель запоминает порялковый номер следующего ожидаемого кадра в переменной 1гаюе ехрессег). Перед бесконечным циклом в каждой процедуре размещена короткая фаза инициализации. Передав кадр, отправитель запускает тай:нер. Если он уже был запущен, он настраивается на отсчет нового полного интервала времени.
Период выбирается достаточно большим, чтобы даже в худшей ситуации кадр успел дойти до получателя, получатель успел его обработать и подтверждение успело вернуться к отправителю. Только по истечении отведенного времени можно утверждать, что потерялся кадр или его подтверждение, а значит, необходимо послать дубликат. Если время, после которого наступает тайм-аут, сделать слишком коротким, то передающая машина будет повторно посылать слишком много кадров, в которых нет необходимости. Хотя лишние кадры в дашюм случае не повлияют на правильность приема данных, они повлияют на производительность системы.
После передачи кадра отправитель запускает таймер и ждет какого-либо события. Возможны три ситуации: либо придет неповрежденный кадр подтверждения, либо будет получен поврежденный кадр подтверждения, либо просто истечет интервал времени. В первом случае отправитель возьмет у сетевого уровня следующий пакет и положит его в буфер поверх старого пакета. Кроме того, он Увеличит порядковый номер кадра. Если же прибудет поврежденный кадр подтверждения или подтверждение нс прилет вовсе, то ни буфер, ни номер не будут изменены и будет послан дубликат кадра. Когда неповрежденный кадр прибывает к получателю, проверяется его номер. Если зто не дубликат, то кадр принимается и передается сетевому уровню, после чего формируется подтверждение. Дубликаты и поврежденные кадры на сетевой уровень не передакттся.
252 Глава 3. Уровень передачи данных Протоколы скользящего окна В предыдущих протоколах информациопныс кадры передавалпсь только в одну сторону. В большинстве практических ситуаций требуется передача ланных в обоих направленьщх. Одни из способов получения дуплексной перелачи ланных заключается в создании двух отдельных симплексных каналов связи, по которым данные передаются в противоположных направлениях.
При этом получается два отдельных физических канала, каждый пз которых имеет прямой канал для данных и обратный канал для подтверждений. В обоих случаях пропускная способность обратных каналов почти не используется. В результате пользователь платит за два канала, но использует емкость одного. Более прогрессивной ипесй представляется использование одного канала для передачи данных в обоих направлениях. В конце копцов, ведь в протоколах 2 и 3 кадры уже передавались по каналу в двух направлениях, а обратный канал обладает той жс пропускной способностью, что и прямой.
В такой людели кадры с данными от машины А для машины В перемешиваются с кадрами подтверждений от А к В. Получатель может отличить кадр с данными от калра с подтверждением по специальному полю Й1по заголовка калра. Помимо чередования кадров с подтверждениями и информационных кадров, возможно и другое улучшение протокола.