Литмир - Электронная Библиотека

Хотя данные протоколы предоставляют канальному уровню большую свободу в вопросе, касающемся порядка передачи и приема кадров, требование доставки пакетов сетевому уровню принимающей машины в том же порядке, в котором они были получены от сетевого уровня передающей машины, сохраняется. Также сохраняется аналогичное требование к физическому уровню, касающееся сохранения порядка доставки кадров. То есть физический уровень должен функционировать подобно проводу, доставляя все кадры в том порядке, в котором они были посланы.

Порядковые номера в окне отправителя соответствуют кадрам, которые уже отправлены, но на которые еще не получены подтверждения. Получаемому от сетевого уровня пакету дается наибольший порядковый номер, и верхняя граница окна увеличивается на единицу. Когда поступает подтверждение, на единицу возрастает нижняя граница окна. Таким образом, окно постоянно содержит список неподтвержденных кадров.

Так как кадры, находящиеся в окне отправителя, могут быть потеряны или повреждены во время передачи, отправитель должен хранить их в памяти на случай возможной повторной передачи. Таким образом, если максимальный размер окна равен п, то отправителю потребуется п буферов для хранения неподтвержденных кадров. Если окно достигает максимального размера, канальный уровень должен отключить сетевой уровень до тех пор, пока не освободится буфер.

Окно принимающего канального уровня соответствует кадрам, которые он может принять. Любой кадр, попадающий в окно, помещается в буфер получателя. Когда прибывает кадр с порядковым номером, соответствующим нижнему краю окна, он передается на сетевой уровень, и окно сдвигается на одну позицию. Любой кадр, не попадающий в окно, удаляется. В любом случае формируется подтверждение, для того чтобы отправитель мог понять, как ему действовать дальше. Обратите внимание, что окно единичного размера говорит о том, что канальный уровень может принимать кадры только в установленном порядке, однако при больших размерах окна это не так. Сетевому уровню, напротив, данные всегда предоставляются в строгом порядке, независимо от размера окна уровня передачи данных.

На рис. 3.11 показан пример для окна с максимальным размером 1. Вначале кадров в окне нет, поэтому само окно пустое и его верхний и нижний края совпадают, однако с течением времени ситуация меняется. В отличие от окна отправителя, окно получателя всегда сохраняет первоначальный размер, поворачиваясь по мере приема и передачи на сетевой уровень очередного кадра.

Компьютерные сети. 5-е издание - _135.jpg

Рис. 3.11. Скользящее окно размера 1 с 3-битовым порядковым номером: а — начальная ситуация; б — после отправки первого кадра; в — после приема первого кадра; г — после приема первого подтверждения

3.4.1. Протокол однобитового скользящего окна

Прежде чем рассматривать общий случай, изучим протокол скользящего окна с максимальным размером окна, равным 1. Такой протокол использует метод ожидания, поскольку, отослав кадр, отправитель, прежде чем послать следующий кадр, должен дождаться подтверждения.

Данный протокол приведен в листинге 3.5. Как и другие протоколы, он начинается с определения некоторых переменных. Переменная next_frame_to_send содержит номер кадра, который отправитель пытается послать. Аналогично переменная frame_expected хранит номер кадра, ожидаемого получателем. В обоих случаях, возможными значениями могут быть только 0 и 1.

Листинг 3.5. 1-битовый протокол скользящего окна

Компьютерные сети. 5-е издание - _136.jpg

Листинг 3.5 (продолжение)

Компьютерные сети. 5-е издание - _137.jpg

В нормальной ситуации только один канальный уровень может начинать передачу. Другими словами, только одна из программ должна содержать обращения к процедурам to_physical_layer и start_timer вне основного цикла. Начинающая машина получает первый пакет от своего сетевого уровня, создает из него кадр и посылает его.

Когда этот (или другой) кадр прибывает, получающий канальный уровень проверяет, не является ли этот кадр дубликатом, аналогично протоколу 3. Если это тот кадр, который ожидался, он передается сетевому уровню, и окно получателя сдвигается вверх.

Поле подтверждения содержит номер последнего полученного без ошибок кадра. Если этот номер совпадает с номером кадра, который пытается передать отправитель, последний понимает, что этот кадр успешно принят получателем и что он может пересылать следующий кадр. В противном случае он должен продолжать попытки переслать тот же кадр.

Теперь давайте изучим протокол 4 и посмотрим, насколько он устойчив к нестандартным ситуациям. Предположим, что машина A пытается послать кадр 0 машине B, а машина B пытается послать кадр 0 машине A. Предположим также, что на машине установлен слишком короткий период ожидания подтверждения. Соответственно, машина A посылает серию одинаковых кадров со значениями полей seq=0 и ack=1.

Когда первый неповрежденный кадр прибудет на машину B, он будет принят, и значение переменной frame_expected будет установлено равным 1. Все последующие входящие кадры будут проигнорированы, поскольку машина B будет теперь ожидать кадр с порядковым номером 1, а не 0. Более того, поскольку у всех кадров дубликатов значение поля ack=1, а машина B продолжает ожидать подтверждения для кадра 0, то и не станет запрашивать новый пакет у своего сетевого уровня.

В ответ на каждый отвергнутый дубликат, присылаемый машиной A, машина B посылает кадр, содержащий поля seq=0 и ack=0. Наконец, один из этих кадров принимается машиной A, в результате чего машина A переходит к передаче следующего пакета. Никакая комбинация потерянных кадров или преждевременно истекших интервалов ожидания не может заставить этот протокол ни выдать сетевому уровню дубликат пакета, ни пропустить пакет, ни зависнуть. Протокол работает корректно.

Компьютерные сети. 5-е издание - _138.jpg

Рис. 3.12. Два сценария для протокола 4: а — нормальная ситуация; б — нештатная ситуация. Нотация: (seq, ack, номер пакета). Звездочка означает, что сетевой уровень принял пакет

Однако отношения между протоколами могут быть довольно непростыми. Если обе стороны одновременно вышлют друг другу начальный пакет, возникает запутанная ситуация, проиллюстрированная на рис. 3.12. В левой части рисунка показано нормальное функционирование протокола. Правая часть рисунка демонстрирует аномальную ситуацию. Если машина B ожидает первого кадра от машины A, прежде чем послать свой первый кадр, то последовательность будет такой, как показана в левой части рисунка. При этом принимается каждый кадр.

Однако если машины A и B одновременно начнут передачу, их первые кадры пересекутся, и канальные уровни попадут в ситуацию б. В ситуации а с каждым кадром прибывал новый пакет, и дубликатов нет. В ситуации б половина кадров содержит дубликаты, несмотря на то что ошибок в канале связи не было. Подобные ситуации могут возникнуть в результате преждевременного истечения периода ожидания, даже если одна сторона начнет диалог первой. В самом деле, если время ожидания истечет слишком быстро, кадр может быть послан три и более раз, приводя к ненужной трате ценных ресурсов.

3.4.2. Протокол с возвратом на n

До сих пор мы по умолчанию подразумевали, что время, необходимое на передачу кадра от отправителя к получателю, и время, необходимое на передачу подтверждения от получателя к отправителю, пренебрежимо мало. Иногда это предположение является совершенно неверным. В таких ситуациях большое время прохождения кадров по сети может значительно снижать эффективность использования пропускной способности канала. В качестве примера рассмотрим спутниковый канал связи с пропускной способностью 50 Кбит/с и временем, требуемым для прохождения сигнала в оба конца, равным 500 мс. Попытаемся использовать протокол 4 для пересылки кадров размером в 1000 бит через спутник. В момент времени t = 0 отправитель начинает посылать первый кадр. В момент времени t = 20 мс кадр полностью послан. В момент времени t = 270 мс получатель принял кадр полностью и отправил обратно подтверждение. В итоге в лучшем случае только через 520 мс после начала передачи кадра подтверждение будет получено отправителем. В данном случае еще предполагается, что приемник не тратит времени на обработку принятого кадра и подтверждение такое короткое, что временем его передачи и приема можно пренебречь. Это означает, что передающая машина была заблокирована в течение 500/520, или 96 % времени. Другими словами, использовалось только 4 % доступной пропускной способности. Очевидно, что сочетание большого времени прохождения сигнала, высокой пропускной способности и коротких кадров совершенно неприемлемо с точки зрения эффективности.

83
{"b":"639789","o":1}