Э. Таненбаум, Д. Уэзеролл - Компьютерные сети (1114668), страница 73
Текст из файла (страница 73)
Протоколы скользящего окна 251формируется подтверждение. Дубликаты и поврежденные кадры на сетевой уровень непередаются, но при их получении подтверждается прибытие последнего правильногокадра, благодаря чему отправитель понимает, что нужно перейти к следующему кадруили повторить пересылку поврежденного.3.4. Протоколы скользящего окнаВ предыдущих протоколах информационные кадры передавались только в однусторону. В большинстве практических ситуаций требуется передача данных в обоихнаправлениях. Один из способов получения дуплексной передачи — использованиедвух экземпляров описанных выше протоколов, каждый из которых передает данныепо отдельной симплексной связи (в противоположных направлениях).
При этом физический канал имеет прямой канал для данных и обратный канал для подтверждений.В обоих случаях пропускная способность обратных каналов почти не используется.Более прогрессивной идеей представляется использование одного канала для передачи данных в обоих направлениях. В конце концов, ведь в протоколах 2 и 3 кадры ужепередавались по каналу в двух направлениях, а обратный канал обладает той же пропускной способностью, что и прямой. В такой модели кадры с данными от машины A для машины B перемешиваются с кадрами подтверждений от A к B. Получатель может отличитькадр с данными от кадра с подтверждением по специальному полю kind заголовка кадра.Помимо чередования кадров с подтверждениями и информационных кадров, возможно и другое улучшение протокола. Приняв кадр с данными, получатель может непосылать сразу кадр с подтверждением, а подождать, пока сетевой уровень даст емуследующий пакет. Подтверждение добавляется к исходящему информационномукадру с помощью поля ack заголовка кадра.
В результате для передачи подтверждения почти не будет затрачено ресурсов. Подобная техника называется piggybacking(комбинированная или ярусная перевозка).Основное преимущество совмещения передачи прямых и обратных пакетов заключается в улучшенном использовании пропускной способности канала. Поле ackв заголовке кадра занимает всего несколько бит, тогда как отдельный кадр потребуетзаголовка и контрольной суммы.
Кроме того, чем меньше количество прибывающихкадров, тем меньше нагрузка на получателя. В следующем рассматриваемом намипротоколе расходы на совмещение передачи прямых и обратных пакетов составляютвсего 1 бит заголовка кадра. Эти расходы редко превышают несколько бит.Однако при совмещении передачи прямых и обратных пакетов в протоколе появляются новые проблемы. Как долго должен канальный уровень ждать пакета,с которым следует переслать подтверждение? Если канальный уровень будет ждатьдольше, чем отправитель, то последний пошлет кадр повторно, что неприемлемо. Еслибы канальный уровень мог предсказывать будущее, он бы знал, ждать ему пакета илиотправлять подтверждение отдельным кадром.
Это, конечно, невозможно, поэтомуследует установить еще один интервал ожидания (меньший, чем интервал ожиданияотправителя), по истечении которого подтверждение отправляется отдельным кадром.Если же сетевой уровень успеет передать уровню передачи данных пакет, то подтверждение будет отослано вместе с этим пакетом в одном кадре.252 Глава 3. Канальный уровеньСледующие три протокола являются двунаправленными и принадлежат к классупротоколов скользящего окна (sliding window). Как будет показано ниже, они отличаются друг от друга эффективностью, сложностью и требованиями к размерам буфера.Во всех протоколах скользящего окна каждый исходящий кадр содержит порядковыйномер (варьирующийся от 0 до некоего максимума). Поскольку на этот номер обычно отводится поле размером n бит, максимальное значение номера составляет 2n – 1.В протоколах скользящего окна с ожиданием обычно на это поле отводится всего одинбит, что ограничивает порядковый номер значениями 0 и 1, однако в более сложныхверсиях может использоваться произвольное значение n.Сущность всех протоколов скользящего окна заключается в том, что в любой момент времени отправитель работает с определенным набором порядковых номеров,соответствующих кадрам, которые ему разрешено посылать.
Про такие кадры говорят,что они попадают в посылающее окно. Аналогично получатель работает с принимающим окном, соответствующим набору кадров, которые ему позволяется принять.Окно получателя и окно отправителя не обязаны иметь одинаковые нижний и верхнийпределы и даже не обязаны быть одного размера. В одних протоколах размеры фиксируются, а в других размеры могут увеличиваться или уменьшаться по мере передачиили приема кадров.Хотя данные протоколы предоставляют канальному уровню большую свободув вопросе, касающемся порядка передачи и приема кадров, требование доставки пакетов сетевому уровню принимающей машины в том же порядке, в котором они былиполучены от сетевого уровня передающей машины, сохраняется.
Также сохраняетсяаналогичное требование к физическому уровню, касающееся сохранения порядкадоставки кадров. То есть физический уровень должен функционировать подобно проводу, доставляя все кадры в том порядке, в котором они были посланы.Порядковые номера в окне отправителя соответствуют кадрам, которые уже отправлены, но на которые еще не получены подтверждения. Получаемому от сетевого уровняпакету дается наибольший порядковый номер, и верхняя граница окна увеличиваетсяна единицу. Когда поступает подтверждение, на единицу возрастает нижняя границаокна. Таким образом, окно постоянно содержит список неподтвержденных кадров.Так как кадры, находящиеся в окне отправителя, могут быть потеряны или повреждены во время передачи, отправитель должен хранить их в памяти на случай возможной повторной передачи.
Таким образом, если максимальный размер окна равен n, тоотправителю потребуется n буферов для хранения неподтвержденных кадров. Еслиокно достигает максимального размера, канальный уровень должен отключить сетевойуровень до тех пор, пока не освободится буфер.Окно принимающего канального уровня соответствует кадрам, которые он можетпринять. Любой кадр, попадающий в окно, помещается в буфер получателя. Когдаприбывает кадр с порядковым номером, соответствующим нижнему краю окна, онпередается на сетевой уровень, и окно сдвигается на одну позицию. Любой кадр, непопадающий в окно, удаляется.
В любом случае формируется подтверждение, длятого чтобы отправитель мог понять, как ему действовать дальше. Обратите внимание,что окно единичного размера говорит о том, что канальный уровень может приниматькадры только в установленном порядке, однако при больших размерах окна это нетак. Сетевому уровню, напротив, данные всегда предоставляются в строгом порядке,независимо от размера окна уровня передачи данных.3.4. Протоколы скользящего окна 253На рис. 3.11 показан пример для окна с максимальным размером 1.
Вначале кадровв окне нет, поэтому само окно пустое и его верхний и нижний края совпадают, однакос течением времени ситуация меняется. В отличие от окна отправителя, окно получателя всегда сохраняет первоначальный размер, поворачиваясь по мере приема ипередачи на сетевой уровень очередного кадра.Рис. 3.11. Скользящее окно размера 1 с 3-битовым порядковым номером: а — начальнаяситуация; б — после отправки первого кадра; в — после приема первого кадра;г — после приема первого подтверждения3.4.1.
Протокол однобитового скользящего окнаПрежде чем рассматривать общий случай, изучим протокол скользящего окна с максимальным размером окна, равным 1. Такой протокол использует метод ожидания,поскольку, отослав кадр, отправитель, прежде чем послать следующий кадр, должендождаться подтверждения.Данный протокол приведен в листинге 3.5. Как и другие протоколы, он начинаетсяс определения некоторых переменных. Переменная next_frame_to_send содержит номеркадра, который отправитель пытается послать. Аналогично переменная frame_expectedхранит номер кадра, ожидаемого получателем. В обоих случаях, возможными значениями могут быть только 0 и 1.Листинг 3.5.