tanenbaum_seti_all.pages (525408), страница 67
Текст из файла (страница 67)
Приняв кадр с данными, получатель может не посылать сразу кадр с подтверждением, а подождать, пока сетевой уровень даст ему следующий пакет. Подтверждение добавляется к исходящему информационному кадру с помощью поля ас~ заголовка кадра. В результате для передачи подтверждения почти не будет затрачено ресурсов. Подобная техника называется р)дйуЬас)с)пй (комбинированная, или ярусная, перевозка). Основное преимушество совмещения псрсдачи прямых и обратных пакетов заключается в улучшенном использовании пропускной способности канала. Поле зс1 в заголовке кадра занимает всего несколько бит, тогда как отдельный кадр потребует заголовка и контрольной суммы. Кроме того, чем меньше количество прибывающих кадров, тем меньше прерываний работы программы, связанных с этим событием, и, возможно, меныпс буферов у получателя (в зависимости от способа организации программного обеспечения получателя).
В слечующем рассматриваемом нами протоколе расходы на совмещение передачи прямых и обратных пакетов составляют всего 1 бит заголовка кадра. Эти расходы редко превышак>т несколько бит. Однако при совмещении передачи прямых и обратных пакетов в протоколе появляются новые проблемы. Как долго должен уровень передачи данных ждать пакета, с которым следует переслать подтверждение? Если уровень передачи данных будет ждать дольше, чем отправитель, то последний пошлет кадр повторно, что неприемлемо.
Если бы уровень передачи данных мог предсказывать будущее, он бы знал, ждать ему пакета или отправлять полтверждение отдельным кадром. Это, конечно, невозможно, поэтому следует установить еще один интервал ожидания (мецьший, чем интервал ожидания отправителя), по истечении котоРого подтверждение отправляется отдельным кадром. Если же сетевой уровень Протоколы скользящего окна 25З успеет перелать уровню передачи гшиных пакет, то подтверждение будет отослано вместе с этим пакетом в одном кадре. Следующие три протокола являются двунаправлшшыми и принадлежат к классу протоколов скользящего окна (з!!Йпй жпп!оч').
Как будет показано далее, они отличаются друг от прута эффектшиостью, сложностью и требованиями к размерам буфера. Во всех протоколах скользящего окна каждый исходящий кадр содержит порядковый номер 1варьирующийся от 0 ло некоего максимума). Поскольку на этот номер обычно отводится поле размером и бит, максимальное значение номера составляет 2" — 1. В протоколах скользящего окна с ожиланисм обычно на это поле отводится всего олин бит, что ограничивает порядковый номер значениями О и 1, ол~ако в более сложных версиях может использоваться произвольное значение и. Сущность всех протоколов скользящего окна заключается в том, что в любой момент времени отправитель работает с определенным набором порядковых номеров, соответствующих калрам, которые ему разрешено посылать. Про такие кадры говорят, что они попалают в посылающее окно, Аналогично получатсль работает с принимающим окном, соотвстствуюпшм набору кадров, которые ему позволяется принять.
Окно получателя и окно отправителя нс обязаны иметь одинаковые нижний и верхний пределы и лаже нс обязаны бьггь одного размера. Размеры опних протоколов фиксируются, а размеры других могут увеличиваться или уменьшаться по мере передачи илн приема кадров. Хотя данные протоколы предоставляют уровню передачи данных большую свободу в вопросе, касающемся порядка передачи и приема кадров, требование доставки пакетов сетевому уровню принимающей машины в том же прядке, в котором они были получены от сетевого уровня передах>щей маппшы, сохраняется. Также сохраняется аналогичное требование к физическому уровню, касающееся сохранения порядка доставки кадров.
То сеть физический уровеш, должен функционировать подобно проводу, доставляя все кадры в том порядке, в котором опи были посланы. . Порядковые номера в окне отправителя соответствуют кадрам, которые уже отправлены, цо на которые сще нс получены подтверждения. Получаемому от сетевого уровня пакету дается наибольший порядковый ~амер, и верхняя граница окна увеличивается на единицу.
Когда поступает полтвсржлепие, на единицу возрастает нижняя граница окна. Таким образом, окно постоянно содержит список неподтвержденных кадров. Так как кадры, нахолящисся в окне отправителя, могут быть потеряны или повреждены во время перелачи, отправитель должен хранить их в памяти на случай возможной повторной передачи. Таком образом, если максимальный размер напра равен п, то отправителю потребуется и буферов для хранения неподтвержденных кадров. Если окно достигает максимального размера, уровень передачи данных должен отключить сетевой уровень ло тех пор, пока не освободится буфер Окно принимающего уровня передачи ланных соответствует калрам, которые он может принять.
Любой кадр, не попадающий в окно, игнорируешься без каких- либо комментариев. Когда прибывает кадр с порядковым номером, соответствующим нижнему краю окна, он передастся на сетевой уровень, формируется под- 254 Глава 3. Уровень передачи данных тверждение и окно сдвигается на одну позицию. В отличие ат окна отправителя, окно получателя всегда сохраняет свой изначальный размер. Окно единичного размера говорит о том, что уровень передачи данных может принимать калры только в установленном порядке, однако при больших размерах окна это не так.
Сетевому уровню, напротив, данные всегда пРедоставляются в строгом порядке, независимо от размера окна уровня передачи данных. На рис. 3.9 показан пример для окна с максимальным размером 1. Вначале кадров в окне нет, поэтому само окно пустое и его верхний и нижний края совпадают. Отправитель 4 3 4 3 4 3 4 3 Получатель т о Рис. 3.9. Скользящее окно размера! с 3-битовым порядковым номером: начальная ситуация (е); после отправки первого кадра (б), после приема первого кадра (в); после приема первого подтверждения (г) Протокол однобитового скользящего окна Прежде чем рассматривать общий случай, изучим протокол скользящего окна с максимальным размером окна, равным 1.
Такой протокол использует метод ожидания, поскольку, отослав кадр, отправитель, прежде чем послать следующий кадр, должен дождаться подтверждения. Данный протокол приведен в листинге 3.5. Как н лругие протоколы, оп начинается с определения некоторых переменных. Переменная сект Ггзае 1о зепб содержит номер кадра, который отправитель пытается послать. Аналогично переменная ггаае екрестеб хранит номер кадра, ожидаемого получателем. В обоих случаях возможными значениями могут быть только О и 1. В нормальной ситуации только один уровень передачи данных может начинать перелачу.
Другими словами, только олна из программ должна содержать обРащения к процедурам 1о рбуз)св! ) ауег и эта гт ттаег впе основного цикла. Если оба уровня передачи данных начинают одновременно передаватгч возникает не- Протоколы скользящего окна 265 простая ситуация. Начинающая машина получает первый пакет от своего сетевого уровня, создаст из него кадр и посылает его. Когда этот (или другой) кадр прибывает, получающий уровень передачи данных проверяет, пе является ли этот кадр дубликатом, аналогично протоколу 3. Если это тот кадр, который ожидался, он передается сетевому уровню и окно получателя сдвигается вверх, Листинг 3.6. 1-битовый протокол скользящего окна /* Протокол 4 (скользящее окно) является дуплексным и более нгдежчын, чен протокол 3, */ дое/1пе МАХ 5ЕО 1 /* в протоколе 4 должно быть равно 1 */ Суребет епнв (/гаже агг(ча1.
с«зов егг, С1веосС) ечепС Суре, Ф1пс)обе "ргоСосо1.Р /* только О или 1 */ /* только 0 или 1 */ /* временная лесеиенная */ /* текудин посланный т~акет */ ып(1е (Сгие) ( ыазС (ог ечептйечепт): егг или С1веоиС */ 1/ (ечепС == (гаже аггтча)) ( /* кадр прибыл в целости */ тгов рлуззса1 1ауегйг): /* голучить кадр */ (г.зещ =- (гаже ехрессеб) ( /* обработать входящий поток кадров */ Со песыогй 1ауегйг.!пто); /* передать пакет сетевсну уровню */ 1пс(/гаже ехрестеб); /* инвертировать порядковый комер кадра.
следующий раз */ ожидаемогс в 1т (г.аск = пехс тгаве со зепс) ( /* обработать исходящий по~он кадров */ (гов песыогй 1ауег(аьы(тег), /* получить следующий пакет у сетевого уровня */ кадра */ 1пс(пехс (гаже со зепб): /* инвертировать порядковый попер лосылаеиого чо(б рготосо14 (чо(с) ( вец пг пехС (гаже Со зепб: зещ пг Ггаве ехресСеб; /гаже г, з; расйеС Ьсттег; ечепС Суре ечеп(: пехС /гаже Со зепб = 0; (гадю ехрестес( = 0; Ггов песыогк 1ауегйси/тег); З 1пТО = Ьс((ег: з.зещ = пехС (гаже Со зепб; в.аск = 1 - багаже ехресСеб, данных */ Со рпузтса1 )ауегйз); всагС С!вег(з.зещ): /* номер следующего чадра в исходящеи потоке */ /* нонер ожидаемого кадра */ /* ~случить первый па~в~ у сетевого уровня */ /* подготовить гервых кадр для пеэедачи */ /* вставить порядковый попер в кадр */ /* подтверждение, пссылаеное «верхон» на кадре /* послать кадр по каналу */ /* запустить таймер ожидания подтверждения */ /* ждать возможного события: (гаже аггтча1, сизов 256 Глаза 3.
Уровень передачи данных 5.1пто = ьцгтег: 5.5ей = пех( угаее СО зепб; 5.ась = 1 - Ггаее ехресьеб; *! Со рйу51са) )ауег(ьз); згагг СтаегТз,зец): !* подготовить кадр для передачи *! у* вставить порядковый непер в кадр *! г* ПОРЯДКОВЫЙ НОЯЕР ПОСЛЕДНЕГО ПОЛУЧЕННОГО КаДРа у* передать кадр *! у* запустить тайкер свидания псдтяерядення *! А атпрввпяет (О, 1, АО) В и у т (О, 1, АО). В пр яву (О,' О, ВО) А папучвет (О, О, ВО)' А атпрввляет (1, О, А1) Е В алу (1,ОЛМ)* В атпрввляет (1, 1, 81) А палучввт (1, 1, 81) 'а А атпрввляет (О, 1, А2) МВ папучвет (О, 1, А2)* 8 атпрввляет (О, О, 82) Анапу (О,О, В2)* 'Д А атпрввляет (1, О, АЗ)- ЯьВ получает (1, О, АЗ)" В атпрввляет (1, 1, 83) А атпрввлявт (О, 1, АО) 4 папучввт (О, 1, 80)' А атпрввпявт (О, О.