Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Элементы транспортных протоколов. Управление потоком и буферизация. Мультиплексирование. Восстановление после сбоев.



На рис. 6.13 показан пример управления динамическим окном в дейтаграмм-

ной подсети с 4-битными порядковыми номерами. Предположим, что запрос на

предоставление буферов пересылается в отдельных TPDU-модулях, а не добира-

ется «автостопом» на попутных модулях. Вначале хост А запрашивает 8 буфе-

ров, но ему выделяется только 4. Затем он посылает три TPDU-модуля, из кото-

рых последний теряется. На шаге 6 хост А получает подтверждение получения

посланных им TPDU-модулей О и 1, разрешает хосту А освободить буферы и по-

слать еще три модуля (с порядковыми номерами 2, 3 и 4). Хост А знает, что TPDU-

модуль номер 2 он уже посылал, поэтому он думает, что может послать модули 3

и 4, что он и делает. На этом шаге он блокируется, так как его счетчик буферов

достиг нуля, и ждет предоставления новых буферов. На шаге 9 наступает тайм-

аут хоста А, так как он до сих пор не получил подтверждения для TPDU-моду-

ля 2. Этот модуль посылается еще раз. В строке 10 хост В подтверждает получе-

ние всех TPDU-модулей, включая 4-й, но отказывается предоставлять буферы

хосту А. Такая ситуация невозможна в протоколах с фиксированным размером

окна, описанных в главе 3. Следующий TPDU-модуль, посланный хостом В, раз-

решает хосту А передать еще один TPDU-модуль.

 

Потенциальные проблемы при такой схеме выделения буферов в дейтаграмм-

ных сетях могут возникнуть при потере управляющего TPDU-модуля. Взгляни-

те на строку 16. Хост В выделил хосту А дополнительные буферы, но сообщение

об этом было потеряно. Поскольку получение управляющих TPDU-модулей не

подтверждается и, следовательно, управляющие TPDU-модули не посылаются

повторно по тайм-ауту, хост А теперь оказался блокированным всерьез и надол-

го. Для предотвращения такой тупиковой ситуации каждый хост должен перио-

дически посылать управляющий TPDU-модуль, содержащий подтверждение и

состояние буферов для каждого соединения. Это позволит в конце концов вы-

браться из тупика.

До сих пор мы по умолчанию предполагали, что единственное ограничение,

накладываемое на скорость передачи данных, состоит в количестве свободного

буферного пространства у получателя. По мере все продолжающегося снижения

цен на микросхемы памяти и винчестеры становится возможным оборудовать

хосты таким количеством памяти, что проблема нехватки буферов будет возни-

кать очень редко, если вообще будет возникать.

Если размер буферов перестанет ограничивать максимальный поток, возник-

нет другое узкое место: пропускная способность подсети. Если максимальная ско-

рость обмена кадрами между соседними маршрутизаторами будет х кадров в се-

кунду и между двумя хостами имеется k непересекающихся путей, то, сколько

бы ни было буферов у обоих хостов, они не смогут пересылать друг другу больше

чем kx TPDU-модулей в секунду. И если отправитель будет передавать с боль-

шей скоростью, то подсеть окажется перегружена.

Требуется механизм, основанный не столько на емкости буферов получателя,

сколько на пропускной способности подсети. Очевидно, управление потоком дол-

жен проводить отправитель, в противном случае у него будет слишком много не-

подтвержденных TPDU-модулей. В 1975 году Белснес (Belsnes) предложил ис-

пользовать схему управления потоком скользящего окна, в которой отправитель

динамически приводит размер окна в соответствие с пропускной способностью

сети. Если сеть может обработать с TPDU-модулей в секунду, а время цикла

(включая передачу, распространение, ожидание в очередях, обработку получате-

лем и возврат подтверждения) равно г, тогда размер окна отправителя должен

быть равен сг. При таком размере окна отправитель работает, максимально ис-

пользуя канал. Любое уменьшение производительности сети приведет к его бло-

кировке.

Для периодической настройки размера окна отправитель может отслеживать

оба параметра и вычислять требуемое значение. Пропускная способность может

быть определена простым подсчетом числа TPDU-модулей, получивших подтвер-

ждения за определенный период времени, и делением этого числа на тот же пе-

риод времени. Во время измерения отправитель должен посылать данные с мак-

симальной скоростью, чтобы удостовериться, что ограничивающим фактором

является пропускная способность сети, а не низкая скорость передачи. Время,

необходимое для получения подтверждения, может быть замерено аналогично.

Так как пропускная способность сети зависит от количества трафика в ней, раз-

мер окна должен настраиваться довольно часто, чтобы можно было отслеживать5 82 Глава 6. Транспортный уровень

изменения пропускной способности. Как будет показано далее, в Интернете ис-

пользуется похожая схема.

 

 

Мультиплексирование

Объединение нескольких разговоров в одном соединении, виртуальном канале

и по одной физической линии играет важную роль в нескольких уровнях сетевой

архитектуры. Потребность в подобном уплотнении возникает в ряде случаев и на

транспортном уровне. Например, если у хоста имеется только один сетевой адрес,

он используется всеми соединениями транспортного уровня. Нужен какой-то спо-

соб, с помощью которого можно было бы различать, какому процессу следует пере-

дать входящий TPDU-модуль. Такая ситуация, называемая восходящим мультип-

лексированием, показана на рис. 6.14, а. На рисунке четыре различных соединения

транспортного уровня используют одно сетевое соединение (например, один IP-

адрес) с удаленным хостом.

Уплотнение может играть важную роль на транспортном уровне и по другой

причине. Предположим, например, что подсеть построена на основе виртуаль-

ных каналов и на каждом из них данные передаются с максимальной скоростью.

Если пользователю требуется большая пропускная способность, нежели может

предоставить один виртуальный канал, то можно попробовать решить эту про-

блему путем открытия нескольких сетевых соединений и распределения трафи-

ка между ними, используя виртуальные каналы поочередно, как показано на

рис. 6.14, б. Такой метод называется нисходящим мультиплексированием. При к

открытых сетевых соединениях эффективная пропускная способность увеличи-

вается в k раз. В качестве примера можно привести нисходящее мультиплекси-

рование, осуществляемое при работе частных пользователей, имеющих доступ

к каналам ISDN. Такая линия обеспечивает установку двух отдельных соедине-ний по 64 Кбит/с. Использование обоих соединений для доступа в Интернет

и разделение трафика позволяют достигать эффективной пропускной способно-

сти 128 Кбит/с.

 

Восстановление после сбоев

Поскольку хосты и маршрутизаторы подвержены сбоям, следует рассмотреть во-

прос восстановления после сбоев. Если транспортная сущность целиком помеща-

ется в хостах, восстановление после отказов сети и маршрутизаторов не вызывает

затруднений. Если сетевой уровень поставляет дейтаграммные услуги, транс-

портные сущности постоянно ожидают потери TPDU-модулей и знают, как с

этим бороться. Если сетевой уровень предоставляет услуги, ориентированные на

соединение, тогда потеря виртуального канала обрабатывается при помощи уста-

новки нового виртуального канала с последующим запросом у удаленной транс-

портной сущности ее текущего состояния. При этом выясняется, какие TPDU-

модули были получены, а какие нет. Потерянные TPDU-модули передаются по-

вторно.

Более серьезную проблему представляет восстановление после сбоя хоста.

В частности, для клиентов может быть желательной возможность продолжать ра-

боту после отказа и быстрой перезагрузки сервера. Чтобы пояснить, в чем тут

сложность, предположим, что один хост — клиент — посылает длинный файл

другому хосту — файловому серверу — при помощи простого протокола с ожи-

данием. Транспортный уровень сервера просто передает приходящие TPDU-мо-

дули один за другим пользователю транспортного уровня. Получив половину

файла, сервер сбрасывается и перезагружается, после чего все его таблицы пере-

инициализируются, поэтому он уже не помнит, что с ним было раньше.

Пытаясь восстановить предыдущее состояние, сервер может разослать широ-

ковещательный TPDU-модуль всем хостам, объявляя им, что он только что пе-

резагрузился, и прося своих клиентов сообщить ему о состоянии всех открытых

соединений. Каждый клиент может находиться в одном из двух состояний: один

неподтвержденный TPDU-модуль (состояние S1) или ни одного неподтверж-

денного TPDU-модуля (состояние SO). Этой информации клиенту должно быть

достаточно, чтобы решить, передавать ему повторно последний TPDU-модуль

или нет.

На первый взгляд, здесь все очевидно: узнав о перезапуске сервера, клиент

должен передать повторно последний неподтвержденный TPDU-модуль. То есть

повторная передача требуется, если клиент находится в состоянии S1. Однако

при более детальном рассмотрении оказывается, что все не так просто, как мы

наивно предположили. Рассмотрим, например, ситуацию, в которой транспорт-

ная сущность сервера сначала посылает подтверждение, а уже затем передает па-

кет прикладному процессу. Запись TPDU-модуля в выходной поток и отправка

подтверждения являются двумя различными неделимыми событиями, которые

не могут быть выполнены одновременно. Если сбой произойдет после отправки

подтверждения, но до того как выполнена запись, клиент получит подтвержде-

ние, а при получении объявления о перезапуске сервера окажется в состоянии SO.

Таким образом, клиент не станет передавать TPDU-модуль повторно, так как бу-

дет считать, что TPDU-модуль уже получен, что в конечном итоге приведет к от-

сутствию TPDU-модуля.

В этом месте вы, должно быть, подумаете: «А что если поменять местами по-

следовательность действий, выполняемых транспортной сущностью сервера,

чтобы сначала осуществлялась запись, а потом высылалось подтверждение?»

Представим, что запись сделана, но сбой произошел до отправки подтверждения.

В этом случае клиент окажется в состоянии S1 и поэтому передаст TPDU-мо-

дуль повторно, и мы получим дубликат TPDU-модуля в выходном потоке.

Таким образом, независимо от того, как запрограммированы клиент и сервер,

всегда могут быть ситуации, в которых протокол не сможет правильно восстано-

виться. Сервер можно запрограммировать двумя способами: так, чтобы он снача-

ла передавал подтверждение, или так, чтобы сначала записывал TPDU-модуль.

Клиент может быть запрограммирован одним из четырех способов: всегда пере-

давать повторно последний TPDU-модуль, никогда не передавать повторно по-

следний TPDU-модуль, передавать повторно TPDU-модуль только в состоянии

SO и передавать повторно TPDU-модуль только в состоянии S1. Таким образом,

получаем восемь комбинаций, но, как будет показано, для каждой комбинации

имеется набор событий, заставляющий протокол ошибиться.

На сервере могут происходить три события: отправка подтверждения (Л), за-

пись TPDU-модуля в выходной процесс (W) и сбой (С). Они могут произойти в

виде шести возможных последовательностей: AC(W), A WC, C(AW), C(WA), WAC

и WC(A), где скобки означают, что после события С событие А или В может и не

произойти (то есть уж сломался — так сломался). На рис. 6.15 показаны все во-

семь комбинаций стратегий сервера и клиента, каждая со своими последователь-

ностями событий. Обратите внимание на то, что для каждой комбинации суще-

ствует последовательность событий, приводящая к ошибке протокола. Например,

если клиент всегда передает повторно неподтвержденный TPDU-модуль, собы-

тие A WC приведет к появлению неопознанного дубликата, хотя при двух других

последовательностях событий протокол будет работать правильно.

Усложнение протокола не помогает. Даже если клиент и сервер обменяются

несколькими TPDU-модулями, прежде чем сервер попытается записать полу-

ченный пакет, так что клиент будет точно знать, что происходит на сервере, у не-

го нет возможности определить, когда произошел сбой на сервере: до или после

записи. Отсюда следует неизбежный вывод: невозможно сделать отказ и восста-

новление хоста прозрачными для более высоких уровней.

В более общем виде это может быть сформулировано следующим образом:

восстановление от сбоя уровня N может быть осуществлено только уровнем N+ 1

и только при условии, что на более высоком уровне сохраняется достаточное ко-

личество информации о состоянии процесса. Как упоминалось ранее, транспорт-

ный уровень может обеспечить восстановление от сбоя на сетевом уровне, если

каждая сторона соединения отслеживает свое текущее состояние.

Эта проблема подводит нас к вопросу о значении так называемого сквозного

подтверждения. В принципе, транспортный протокол является сквозным, а не

цепным, как более низкие уровни. Теперь рассмотрим случай обращения пользо-

Простой транспортный протокол 5 85

вателя к удаленной базе данных. Предположим, что удаленная транспортная

сущность запрограммирована сначала передавать TPDU-модуль вышестоящему

уровню, а затем отправлять подтверждение. Даже в этом случае получение под-

тверждения машиной пользователя не означает, что удаленный хост успел обно-

вить базу данных. Настоящее сквозное подтверждение, получение которого

означает, что работа была сделана, и, соответственно, отсутствие которого озна-

чает обратное, вероятно, невозможно. Более подробно этот вопрос обсуждается в

(Saltzer и др., 1984)


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 176; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.055 с.)
Главная | Случайная страница | Обратная связь