Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 68
Текст из файла (страница 68)
Если бы уровень передачи данных мог предсказывать будущее, он бы знал, ждать ему пакета или отправлять подтверждение отдельным кадром. Это, конечно, невозможно, поэтому следует установить еще один интервал ожидания (меньший, чем интервал ожидания отправителя), по истечении котоРого подтверждение отправляется отдельным кадром. Если же сетевой уровень Протоколы скользящего окна 263 успеет передать уровню передачи данных пакет, то подтверждение будет отослано вместе с этим пакетом в одном кадре. Следующие три протокола являются двунаправленными и принадлежат к классу протоколов скользящего окна (з!Ы|щ чг|пг)оч'). Как будет показано далее, они отличаются друг от друга эффективностью, сложностью и требованиями к размерам буфера.
Во всех протоколах скользящего окна каждый исходящий кадр содержит порядковый номер (варьирующийся от О до некоего максимума) Поскольку на этот номер обычно отводится поле размером и бит, максимальное значение номера составляет 2" — 1. В протоколах скользящего окна с ожиданием обычно на это поле отводится всего один бит, что ограничивает порядковый номер значениями О и 1, однако в более сложных персиях может использоваться произвольное значение л. Сущность всех протоколов скользящего окна заключается в том, что в любой момент времени отправитель работает с определенным набором порядковых номеров, соответствующих кадрам, которые ему разрешено посылать. Про такие кадры говорят, что они попадают в посылающее окно.
Аналогично получатель работает с принимающим окном, соответствующим набору кадров, которые ему позволяется принять. Окно получателя и окно отправителя не обязаны иметь одинаковые нижний и верхний пределы и даже не обязаны быть одного размера. Размеры одних протоколов фиксируются, а размеры других могут увеличиваю; ся или уменьшаться по мере передачи цли приема кадров. Хотя данные протоколы предоставляют уровню передачи данных большую свободу в вопросе, касающемся порядка передачи и приема кадров, требование доставки пакетов сетевому уровню принимающей машины в том же прядке, в котором они были получены от сетевого уровня передающей машины, сохраняется.
Также сохраняется аналогичное требование к физическому уровню, касающееся сохранения порядка доставки кадров, То есть физический уровень должен функционировать подобно проводу, доставляя все кадры в том порядке, в котором они были посланы. Порядковые номера в окне отправителя соответствуют кадрам, которые уже отправлены, но на которые еще не получены подтверждения. Получаемому от сетевого уровня пакету дается наибольший порядковый номер, и верхняя граница окна увеличивается на единицу. Когда поступает подтверждение, на единицу возрастает нижняя граница окна.
Таким образом, окно постоянно содержит список неподтвержденных кадров. Так как кадры, находящиеся в окне отправителя, могут быть потеряны или повреждены во время передачи, отправитель должен хранить их в памяти на случай возможной повторной передачи. Таким образом, если максимальный размер кадра равен л, то отправителю потребуется л буферов для хранения неподтвержденных кадров. Если окно достигает максимзльного размера, уровень передачи данных должен отключить сетевой уровень до тех пор, пока не освободится буфер. Окно принимающего уровня передачи данных соответствует кадрам, которые он может принять. Любой кадр, не попадающий в окно, игнорируется без каких- либо комментариев. Когда прибывает кадр с порядковым номером, соответствующим нижнему краю окна, он передается на сетевой уровень, формируется под- 254 Глава 3.
Уровень передачи данных тверждение и окно сдвигается на одну позицию. В отличие от окна отправителя, окно получателя всегда сохраняет свой изначальный размер. Окно единичного размера говорит о том, что уровень передачи данных может принимать кадры только в установленном порядке, однако при больших размерах окна это не так.
Сетевому уровню, напротив, данные всегда предоставляются в строгом порядке, независимо от размера окна уровня передачи данных. Па рис. 3.9 показан пример для окна с максимальным размером 1. Вначале кадров в окне нет, поэтому само окно пустое и его верхний и нижний края совпадают. Отправитель 4 3 4 3 Получатель 7 0 Рис. 3.9. Скользящее окно размера т с 3-битовым порядковым номером; начальная ситуация (а); после отправки первого кадра (б); после приема первого кадра (е); после приема первого подтверждения (г) Протокол однобитового скользящего окна Прежде чем рассматривать общий случай, изучим протокол скользящего окна с максимальным размером окна, равным 1. Такой протокол использует метод ожидания, поскольку, отослав кадр, отправитель, прежде чем послать следующий кадр, должен дождаться подтверждения.
Данный протокол приведен в листинге 3.5. Как и другис протоколы, он начинается с определения некоторых переменных. Переменная пех1 1гзве Го зепб содержит номер кадра, который отправитель пытается послать. Аналогично переменная 1гаае ехрес1еб хранит номер кадра, ожидаемого получателем. В обоих случаях возможными значениями могут быть только 0 и 1. В нормальной ситуации только один уровень передачи данных может начинать передачу.
Другими словами, только одна из программ должна содержать обРащения к процедурам 1о р)туз(се) ) ауег и зсзгт ттвег вне основного цикла. Если оба уровня передачи данных начинают одновременно передавать, возникает не- Протоколы скользящего окна 255 простая ситуация.
Начинающая машина получает первый пакет от своего сетевого уровня, создает из него кадр и посылает его. Когда этот (или другой) кадр прибывает, получающий уровень передачи данных проверяет, не является ли этот кадр дубликатом, аналогично протоколу 3. Если это тот кадр, который ожидался, он передается сетевому уровню и окно получателя сдвигается вверх. Листинг 3.5. 1-битовый протокол скользящего окна /* Протокол 4 (скользящее окно) является дуплексным и более надежныи, чен протокол 3, *! Обет)пе НАХ БЕО 1 /* в протоколе 4 должно быть равно 1 */ Суребет епыю (/гаже агп ча1, свзыю егг, Стжеоис) ечепС Суре; ())пс)нбе "ргоСосо1.Ь" /* только О или 1 *! /* только О или 1 */ /* вреиенная переиенная *! /* текущий посланный пакет *! ыЬМ е (Сгибе) ( ыазд тог ечепс(аечепс); егг нли стюеоыс *! )т (ечепС =- тгаюе аггзча)) ( /* кадр прибыл в целости */ тгою рлузтса1 Гауег(дг); /* получить кадр */ (г.зе() =- /гаже ехрессеб) ( /" обработать входящий поток кадров */ Со петыогк 1ауег(дг.зпто): /* передать пакет сетевону уровню */ )пс(тгаще ехрессеб); /* инвертировать порядковый попер кадра.
следующий раз */ ожидаеиото в зт (г.асс = пенс /гаже со зепб) ( /* обработать исходящий поток кадров */ тгощ песыогх 1ауег(або/тес), /* получить следующий пакет у сетевого уровня *! зпс(пехс !гаже со зепд): /* инвертировать порядковый ноиер посылаемого кадра */ чо)О ргососо14 (чозб) зед пг пехС тгаюе Со вепд: зее пг тгаще ехрессеб: тгаще г. з. расйеС Ьыттег; ечепС Суре ечепС: пехС !гаже Со вело = О; т"гаюе ехрессеБ = О, Слою йесыогк )ауег($Ьитсег): з.)пто = Ьот7ег; з.зеп = пехс тгаюе Со зепб: з.аск = 1 - /гаже ехрессеб: данных */ Со рлуззса1 1ауег(дз); згагС С)юег(з.зед); /* непер следуюдего кадра в нсходящеи потоке */ /* ноиер ожидаеного кадра */ /* получить первый пакет у сетевого уровня *! /* подготовить первый кадр для передачк */ /* вставить порядковый номер в кадр */ /* подтверждение, посылаеиое «верхои» на кадре /* послать кадр по каналу */ /* запустить таймер ожидания подтверждения */ /* ждать возможного события: !гаже аггтча), скьыю 256 Глава 3.
Уровень передачи данных /* подготовить кадр дпя передачи */ /* вставить порядковый ноиер в кадр */ /* порядковый номер последнего полученного кадра З.тото = Ьыттег; з.зее = пехг тгаее Со зепб; в.аск = 1 - Ггаже ехресгеб; */ /* передат~ кадр */ /* запустить тайиер ожидания подтверждения */ ГО рдузтса1 1ауег(аз); зтагг Стпег(з зей): А втправпяет (О, 1, АО) в ) (о, 1, Ао)* В отправляет (О, О, ВО) Яп у е (о,о,воГ Я отп равняет (1, О.
А1) ~~ В попучвет (1, О, А1) — В стп равняет'(1 1 В1) Я п пу (1,1, втп Я стправпяет (О. 1, А2) Ь.В попучавт (О, 1, А2)' В отправпяет(О О В2) Я пспучает (О, О. В2)' Я отправляет (1, О, АЗ) ~В поручает (1, О, АЗ)' В отправпяет (1, 1, ВЗ) Я отправпяет (О, 1, АО) Я пспучает (О, 1, ВО)' Я отправпяет (О, О, 40) Я попу ает(О,О, ВО) Я отправляет (1, О, А1) В отпрввпяет (О, 1, ВО) В приучает (О, 1, АО)* В атправпяет (О, О, ВО) Впо у ет(О,О,АО) В отправпяет (1, О, В1) В получает (1, О, А1 )* В отправпяет (1, 1, В1) Я пспучает (1, О, В1)' Я отпра ваяет (1, 1, А1 ) В попучает (1, 1, А1) В отправпяетрж 1, В2) Время )тис.