Оптимальность интервальной маршрутизации: специальные топологии. 1 глава
End
L p: {< pack,w,i>ÎQ p } begin Qp:= Qp \ {< pack, w,i > } end
Алгоритм 3.1 Протокол скользящего окна (для p). Инвариант протокола. Подсистема связи представляется двумя очередями, Qp для пакетов с адресатом p и Qq, для пакетов с адресатом q. Заметим, что перевычисление sp в R p никогда не дает значение меньше предыдущего, поэтому sp никогда не уменьшается. Чтобы показать, что этот алгоритм удовлетворяет данным ранее требованиям, сначала покажем, что утверждение P - инвариант. (В этом и других утверждениях i - натуральное число.) P º " i < s p: outp[i] ¹ udef (0p) /\ " i < s q,: outq[i] ¹ udef (0q) /\ < pack, w, i > Î Qp Þ w = inq[i] /\ (i < sq + lq) (lp) /\ < pack, w, i > Î Qq Þ w = inp[i] /\ (i < sp + lp) (lq) /\ outp[i] ¹ udef Þ outp[i] = inq[i] /\ (ap > i— lq) (2p) /\ outq[i] ¹ udef Þ outq[i] = inp[i] /\ (aq > i— lp) (2q) /\ ap £ sq, (3p) /\ aq £ sp (3q)
Лемма 3.1 P - инвариант Алгоритма 3.1. Доказательство. В любой начальной конфигурации Qp и Qq - пустые, для всех i, outp[i] и outq[i] равны udef, и ap,ap, sp и sq равны нулю 0; из этого следует, что P=true. Перемещения протокола рассмотрим с точки зрения сохранения значения P. Во-первых, заметим, что значения inp и inq, никогда не меняются. S p: Чтобы показать, что S p сохраняет (0p), заметим, что S p не увеличивает sp и не делает ни один из outp[i] равным udef. Чтобы показать, что S p сохраняет (0q), заметим, что S p не увеличивает sq, и не делает ни один из outq[i] равным udef. Чтобы показать, что S p сохраняет (1p), заметим, что S p не добавляет пакеты в Qp и не уменьшает sp. Чтобы показать, что S p сохраняет (lq), заметим S p добавляет < pack, w, i > в Qp с w = inp[i] и i < sp + lp, и не изменяет значение sp.
Чтобы показать, что S p сохраняет (2p) и (2q), заметим, что S p не изменяет значения outp, outq, ap, или aq. Чтобы показать, что S p сохраняет (3p) и (3q), заметим, что S p не меняет значения ap , ap , sq , или sp. R p: Чтобы показать, что R p сохраняет (0p), заметим, что R p не делает ни одно outp[i] равным udef, и если он перевычисляет sp, то оно впоследствии также удовлетворяет (0p). Чтобы показать, что R p сохраняет (0q), заметим, что R p не меняет outq или sq. Чтобы показать, что R p сохраняет (lp), заметим, что R p не добавляет пакеты в Qp и не уменьшает sq. Чтобы показать, что R p сохраняет (lq), заметим, что R p не добавляет пакеты в Qq и не уменьшает sp. Чтобы показать, что R p сохраняет (2p), заметим, что R p изменяет значение outp[i] на w при принятии < pack, w,i>. Т.к. Qp содержала этот пакет до того, как выполнился R p, из (1p) следует, что w = inp[i]. Присваивание ap:= max (ap, i— lq+1) гарантирует, что ap > i— lq сохраняется после выполнения. Чтобы показать, что R p сохраняет (2q), заметим, что R p не меняет значения outq или aq. Чтобы показать, что R p сохраняет (3p), заметим, что когда R p присваивает L p: Чтобы показать, что L p сохраняет (0p), (0q), (2p), (2q), (3p), и (3q), достаточно заметить, что L p не меняет состояния процессов. (lp) и (lq) сохраняются потому, что L p только удаляет пакеты (а не порождает или искажает их). Процессы S q, R q, и L q сохраняют P, что следует из симметрии. ð 3.1.2 Доказательство правильности протокола Сейчас будет продемонстрировано, что Алгоритм 3.1 гарантирует безопасную и окончательную доставку. Безопасность следует из инварианта, как показано в Теореме 3.2, а живость продемонстрировать труднее. Теорема 3.2 Алгоритм 3.1 удовлетворяет требованию безопасной доставки.
Доказательство. Из (0p) и (2p) следует, что outp[0..sp —1] =inq[0..sp—1], а из (0q) и (2q) следует outp[0..Sq -1] = inp[0..Sq -1].ð
Чтобы доказать живость протокола, необходимо сделать справедливых предположений и предположение относительно l p и l q. Без этих предположений протокол не удовлетворяет свойству живости, что может быть показано следующим образом. Неотрицательные константы l p и l q еще не определены; если их выбрать равными нулю, начальная конфигурация протокола окажется тупиковой. Поэтому предполагается, что l p + l q > 0. Конфигурация протокола может быть обозначена g = (c p, c q, Q p, Q q), где c p и c q - состояния p и q. Пусть g будет конфигурацией, в которой применим S p (для некоторого i). Пусть d = S p (g) = (c p, c q, Q p, (Q q È { m } )), Протокол удовлетворяет требованию «окончательной доставки», если удовлетворяются два следующих справедливых предположения. Fl. Если посылка пакета возможна в течение бесконечно долгого временно, пакет посылается бесконечно часто. F2. Если один и тот же пакет посылается бесконечно часто, то он принимается бесконечно часто.
Предположение Fl гарантирует, что пакет посылается снова и снова, если не получено подтверждение; F2 исключает вычисления, подобные описанному выше, когда повторная передача никогда не принимается. Ни один из двух процессов не может быть намного впереди другого: разница между s p и s q остается ограниченной. Поэтому протокол называется сбалансированным, а также из этого следует, что если требование окончательной доставки удовлетворяется для s p, тогда оно также удовлетворяется для s q, и наоборот. Понятно, что протокол не следует использовать в ситуации, когда один процесс имеет намного больше слов для пересылки, чем другой. Ëåììà 3.3 Из P следует s p— l q £ a p £ s q £ a q + l p £ s p + l p. Äîêàçàòåëüñòâî. Из (0p) и (2p) следует s p — l q £ a p, из (3p) следует a p £ s p. Из (0q) и (2q) следует s p £ a p + l p. Из (3q) следует a p + l p £ s p + l p. ð
Òåîðåìà 3.4 Àëãîðèòì 3.1 удовлетворяет требованию окончательной доставки. Äîêàçàòåëüñòâî. Сначала будет продемонстрировано, что в протоколе невозможны тупики. Из инварианта следует, что один из двух процессов может послать пакет, содержащий слово с номером, меньшим, чем ожидается другим процессом. Утверждение 3.5 Из P следует, что посылка < pack, in[s q], s q> процессом p или посылка Äîêàçàòåëüñòâî. Т.к. l p + l q > 0, хотя бы одно из неравенств Ëåììы 3.3 строгое, т.е., s q < s p + l p \/ s p < s q+l q. Из P также следует a p £ s q (3p) и a q £ s p (3q), а также следует, что (a p £ s q<s p+l p) \/ (a q £ s p<s q+l q) это значит, что S p применим с i = s q или S q применим с i = s p. ð Теперь мы можем показать, что в каждом из вычислений s p и s q увеличиваются бесконечно часто. Согласно Утверждению 3.5 протокол не имеет терминальных конфигураций, следовательно каждое вычисление неограниченно. Пусть C - вычисление, в котором s p и s q увеличиваются ограниченное число раз, и пусть sp and sq - максимальные значения, которые эти переменные принимают в C. Согласно утверждению, посылка < pack, in p [ sq ], sq > процессом p или посылка < pack, in q [ sp ], sp > процессом q применима всегда после того, как sp, sq, ap и aq достигли своих окончательных значений. Таким образом, согласно Fl, один из этих пакетов посылается бесконечно часто, и согласно F2, он принимается бесконечно часто. Но, т.к. принятие пакета с порядковым номером s p процессом p приводит к увеличению s p (и наоборот для q), это противоречит допущению, что ни sp, ни sq не увеличиваются более. Таким образом Òåîðåìà 3.4 доказана. ð Мы завершаем этот подраздел кратким обсуждением предположений Fl и F2. F2-ìèíèìàëüíîå требование, которому должен удовлетворять канал, соединяющий p и q, для того, чтобы он мог передавать данные. Очевидно, если некоторое слово in p[i] никогда не проходит через канал, то невозможно достичь окончательной доставки слова. Предположение Fl обычно реализуется в протоколе с помощью условия превышения времени: если a p не увеличилось в течение определенного промежутка времени, in p[a p] передается опять. Как уже было отмечено во введении в эту главу, для этого протокола безопасная доставка может быть доказана без принятия во внимания проблем времени (тайминга).
3.1.3 Обсуждение протокола Ограничение памяти в процессах. Àëãîðèòì 3.1 не годится для реализации в компьютерной сети, т.к. в каждом процессе хранится бесконечное количество информации (массивы in и out) и т.к. он использует неограниченные порядковые номера. Сейчас будет показано, что достаточно хранить только ограниченное число слов в каждый момент времени. Пусть L = l p + l q. Ëåììà 3.6 Из P следует, что отправление < pack, w,i> процессом p применимо только для i < a p+L. Äîêàçàòåëüñòâî. Сторож S p требует i < s p+l p, значит согласно Ëåììе 3.3 i < a p+L. ð Ëåììà 3.7 Из P следует, что если out p[i] ¹ udef, то i < s p + L. Äîêàçàòåëüñòâî. Из (2p), a p > i— l q, значит i < a p + l q, и i < s p + L (из Ëåììы 3.3). ð
Ðèñóíîê 3.2 Скользящие окна протокола.
Последствия этих двух лемм отображены на Ðèñóíêе 3.2. Процессу p необходимо хранить только слова in p[a p..s p + l p — 1] потому, что это слова, которые p может послать. Назовем их как посылаемое окно p (представлено как S на Ðèñóíêе 3.2). Каждый раз, когда a p увеличивается, p отбрасывает слова, которые больше не попадают в посылаемое окно (они представлены как A на Ðèñóíêе 3.2). Каждый раз, когда s p увеличивается, p считывает следующее слово из посылаемого окна от источника, который производит слова. Согласно Ëåììе 3.6, посылаемое окно процесса p содержит не более L слов. Подобным же образом можно ограничить память для хранения процессом p массива out p. Т.к. out p[i] не меняется для i < s p, можно предположить, что p выводит эти слова окончательно и более не хранит их (они представлены как W на Ðèñóíêе 3.2). Т.к. out p[i] = udef для всех i ³ s p + L, эти значения out p[i] также не нужно хранить. Подмассив out p[s p..s p +L— 1 ] назовем принимаемое окно p. Принимаемое окно представлено на Ðèñóíêе 3.2 как u для неозначенных слов и R для слов, которые были приняты. Только слова, которые попадают в это окно, хранятся процессом. Леммы 3.6 и 3.7 показывают, что не более 2L слов хранятся процессом в любой момент времени.
Ограничение чисел последовательности. В заключение будет показано, что числа последовательности могут быть ограничены, если используются fifo-каналы. При использовании fifo предположения можно показать, что номер порядковый номер пакета, который получен процессом p всегда внутри 2L-окрестности sp. Обратите внимание, что fifo предположение используется первый раз.
Ëåììà 3.8 Утверждение P', определяемое как P' º P /\ < pack, w, i> is behind < pack, w', i'> in Q p Þ i > i' - L (4p) /\ < pack, w, i> is behind < pack, w', i'> in Q q Þ i > i' - L (4q) /\ < pack ,w,i> Î Q p Þ i ³ a p - l p (5p) /\ < pack ,w,i> Î Q q Þ i ³ a q - l q (5q)
является инвариантом Àëãîðèòìа 3.1. Äîêàçàòåëüñòâî. Т.к. уже было показано, что P - инвариант, мы можем ограничиться доказательством того, что (4p), (4q), (5p) и (5q) выполняются изначально и сохраняются при любом перемещении. Заметим, что в начальном состоянии очереди пусты, следовательно (4p), (4q), (5p) и (5q) очевидно выполняются. Сейчас покажем, что перемещения сохраняют истинность этих утверждений. S p: Чтобы показать, что S p сохраняет (4p) и (5p), заметим, что S p не добавляет пакетов в Q p и не меняет a p. Чтобы показать, что S p сохраняет (5q), заметим, что если S p добавляет пакет < pack, w, i> в Qq, то i ³ a p, откуда следует, что i ³ a q - l q (из Ëåììы 3.3). Чтобы показать, что S p сохраняет (4q), заметим, что если < pack, w', i'> в Qq,тогда из (lq) R p: Чтобы показать, что R p сохраняет (4p) and (4q), заметим, что Rp не добавляет пакеты в Q p или Q q. Чтобы показать, что R p сохраняет (5p), заметим, что когда a p увеличивается (при принятии < pack, w', i'>) до i' - l q + 1, тогда для любого из оставшихся пакетов < pack, w, i> в Q p мы имеем i > i' - L (из 4р). Значит неравенство i ³ a p - l p сохраняется после увеличения a p. Чтобы показать, что R p сохраняет (5q), заметим, что R p не меняет Q q и a q. L p: Действие L p не добавляет пакетов в Q p или Q q, и не меняет значения a p или a q; значит оно сохраняет (4p), (4q), (5p) и (5q). Из симметрии протокола следует, что S q, R q и L q тоже сохраняет P'. ð
Ëåììà 3.9 Из P' следует, что <pack, w,i> Î Q p Þ s p -L £ i< s p +L и <pack, w,i> Î Q q Þ s q -L £ i< s q +L. Äîêàçàòåëüñòâî. Пусть <pack, w,i > Î Q p. Из (lp), i < s q + l q, и из Ëåììы 3.3 i < s p + L. Из (5p), i ³ a p — l p, и из Ëåììы 3.3 i ³ s p— L. Утверждение относительно пакетов в Q q доказывается так же. ð Согласно Ëåììе достаточно посылать пакеты с порядковыми номерами modulo k, где Выбор параметров. Значения констант l p и l q сильно влияют на эффективность протокола. Их влияние на пропускную способность протокола анализируется в [Sch91, Chapter 2]. Оптимальные значения зависят от числа системно зависимых параметров, таких как время связи, т.е., время между двумя последовательными операциями процесса, время задержки на обмен, т.е., среднее время на передачу пакета от p к q и получение ответа от q к p, вероятность ошибки, вероятность того, что конкретный пакет потерян.
Протокол, чередующий бит. Интересный случай протокола скользящего окна получается, когда L = 1, ò.å., l p = 1 и l q = 0 (или наоборот). Переменные a p и a q, инициализируется значениями -l p и -l q, а не 0. Можно показать, что a p + l q = s p и a q + l p = s q всегда выполняется, значит только одно a p и s p (и a q и s q) нужно хранить в протоколе. Хорошо известный протокол, чередующий бит [Lyn68] получается, если использование таймеров дополнительно ограничивается, чтобы гарантировать, что станции посылают сообщения в ответ.
3.2 Протокол, основанный на таймере Теперь мы изучим роль таймеров в проектировании и проверке протоколов связи, анализируя упрощенную форму Dt-протокола Флэтчера и Уотсона (Fletcher и Watson) для сквозной передачи сообщений. Этот протокол был предложен в [FW78], но (несколько упрощенный) подход этого раздела взят из [Tel91b, Раздел 3.2]. Этот протокол обеспечивает не только механизм для передачи данных (как сбалансированный протокол скользящего окна Раздела 3.1), но также открытие и закрытие соединений. Он устойчив к потерям, дублированию и переупорядочению сообщений. Информация о состоянии (передачи данных) протокола хранится в структуре данных, называемой запись соединения. (В Подразделе 3.2.1 будет показано, какая информация хранится в записи соединения). Запись соединения может быть создана и удалена для открытия и открытия соединения. Òàêèì îáðàçîì, ãîâîðÿò, ÷òî ñîåäèíåíèå îòêðûòî (на одной из станций), если существует запись соединения. Чтобы сконцентрироваться на релевантных аспектах протокола (а именно, на механизме управления соединением и роли таймеров в этом механизме), будем рассматривать упрощенную версию протокола. Более практические и эффективные расширения протокола могут быть найдены [FW78] и [Tel91b, Раздел 3.2]. В протоколе, описанном здесь, сделаны следующие упрощения. One direction. Подразумевается, что данные передаются в одном направлении, скажем от p к q. Иногда будем называть p отправителем, а q - адресатом (приемником). Однако, следует отметить, что протокол использует сообщения подтверждения, которые посылаются в обратном направлении, т.е. от q к p. Обычно данные нужно передавать в двух направлениях. Чтобы предусмотреть подобную ситуацию, дополнительно выполняется второй протокол, в котором p и q поменяны ролями. Тогда можно ввести комбинированные data/ack (данные/подтверждения) сообщения, содержащие как данные (с соответствующим порядковым номером), так и информацию, содержащуюся в пакете подтверждения протокола, основанного на таймере. Окно приема из одного слова. Приемник не хранит пакеты данных с номером, более высоким, чем тот, который он ожидает. Только если следующий пакет, который прибудет - ожидаемый, он принимается во внимание и немедленно принимается. Более интеллектуальные версии протокола хранили бы прибывающие пакеты с более высоким порядковым номером и принимали бы их после того, как прибыли и были приняты пакеты с меньшими порядковыми номерами. Предположения, упрощающие синхронизацию. Протокол рассмотрен с использованием минимального числа таймеров. Например, предполагается, что подтверждение может быть послано процессом-получателем в любое время, пока соединение открыто со стороны приемника. Также возможен случай, когда подтверждение может быть послано только в течение определенного интервала времени, но это сделало бы протокол более сложным. Также, из описания протокола были опущены, как в Разделе 3.1, таймерные механизмы, используемые для повторной передачи пакетов данных. Включен только механизм, гарантирующий безопасность протокола. Однословные пакеты. Отправитель может помещать только одиночное слово в каждый пакет данных. Протокол был бы более эффективным, если бы пакеты данных могли содержать блоки последовательных слов. Протокол основан на таймере, то есть процессы имеют доступ к физическим часовым устройствам. По отношению ко времени и таймерам в системе сделаны следующие предположения. Глобальное время. Глобальная мера времени простирается над всеми процессами системы, то есть каждое событие происходит в некоторое время. Предполагается, что каждое событие имеет продолжительность 0, и время, в которое происходит событие, не доступно процессам. Ограниченное время жизни пакета. Время жизни пакета ограничено константой m (максимальное время жизни пакета). Òàêèì îáðàçîì, если пакет посылается во время s и принимается во время t, то s < t < s + m. Если пакет дублируется в канале, каждая копия должна быть принята в течение промежутка времени m после отправления оригинала (или стать потерянной). Таймеры. Процессы не могут наблюдать абсолютное время своих действий, но они имеют доступ к таймерам. Таймер - действительная переменная процесса, чье значение непрерывно уменьшается со временем (если только ей явно не присваивают значение). Точнее, если Xt - таймер, мы обозначаем его значение в момент времени t как Xt(t) и если Xt между t1 and t2 не присвоено иное значение, то Xt(t 1)-Xt(t 2)=t2-t1. Заметим, что эти таймеры работают так: в течение времени d они уменьшаются точно на d. В Подразделе 3.2.3 мы обсудим случай, когда таймеры страдают отклонением. Входные слова для отправителя моделируются, как в Разделе 3.1, неограниченным массивом inp. Снова этот массив не полностью хранится в p; p в каждый момент времени имеет доступ только к его части. Часть inp, к которой p имеет доступ расширяется (в сторону увеличения индексов), êîãäà p получает следующее слово от процесса, который их генерирует. Эту операцию будем называть как принятие слова отправителем.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|