Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 168
Текст из файла (страница 168)
При передаче сегмента запускается таймер, который измеряет время, требуемое для получения подтверждения, а также запускает повторную передачу, если подтверждение не приходит в срок. Если подтверждение успевает вернуться прежде чем истечет период ожидания, ТСР- сущность измеряет время, потребовавшееся для его получения (М). Затем значение переменной ЛГТ обновляется по следующей формуле: Гт7Т = ак7Т+ (1 — а)М, где а — весовой коэффициент, обычно равный 7/8.
628 Глава б. Транспортный уровень Даже при известном значении переменной 777Т выбор периода ожидания подтверждения оказывается задачей нетривиальной. Обычно в протоколе ТСР это значение вычисляется как р777Т. Остается только выбрать каким-нибудь хитрым образом соответствующее значение коэффициента (1. В ранних реализациях протокола использовалось 8 = 2, однако экспериментально было показано, что постоянное значение 9 является негибким и плохо учитывает ситуации, при которых разброс значений времени прибытия подтверждения увеличивается. В 1988 г.
Джекобсон предложил использовать значение 8, грубо пропорпиональное среднеквадратичному отклонению (дисперсии) функции плотности вероятности времени прибытия подтверждения. Таким образом, при увеличении разброса значений времени прибытия увеличивалось бы и значение 8, и наоборот. В частности, он предложил использовать среднее линейное отклонение в качестве легко вычисляемой оценки срвднвквидратичного отклонения. В его версии алгоритма для каждого соединения вводилась еще одна сглаженная переменная 77, отклонение.
При получении каждого подтверждения вычислялась абсолютная величина разности между ожидаемым и измеренным значениями ~777Т- М1. Сглаженное значение этой величины сохранялось в переменной 77, вычисляемой по формуле 7) = а77 + (1 — а) )777Т вЂ” М~, где р в общем случае могло выбираться отличным от значения, используемого в предыдущей формуле.
Хотя значение переменной .0 и отличается от среднеквадратичного отклонения, оно достаточно хорошо подходит для данного алгоритма. Кроме того, Джекобсон показал, как можно вычислить значение этой переменной, используя только целочисленные сложение, вычитание и сдвиг, что явилось большим плюсом. В настоящее время этот алгоритм применяется в большинстве реализаций протокола ТСР, а значение интервала ожидания устанавливается по формуле Время ожидания = 77ТТ + 4,0. Выбор множителя 4 является произвольным, однако это значение обладает двумя преимуществами. Во-первых, умножение целого числа на 4 может быть выполнено одной командой сдвига.
Во-вторых, относительное количество излишних повторных передач при таком значении времени ожидания не превысит одного процента. (Вначале Джекобсон предлагал умножать П на 2, но последующие исследования показали, что 4 дает лучшую производительность.) При динамической оценке величины 777Т возникает вопрос, что делать со значением 77ТТ при повторной передаче сегмента. Когда, наконец, прибывает подтверждение для такого сегмента, непонятно, относится это подтверждение к первой передаче пакета или же к последней. Неверная догадка может серьезно снизить точность оценки 77ТТ.
Эта проблема была обнаружена радиолюбителем Филом Карпом (РЬ11 Кагп). Его интересовал вопрос передачи ТСРгг1Р-пакетов с помощью коротковолновой любительской радиосвязи, известной своей ненадежностью (в лучшем случае до адресата доходит лишь половина пакетов). Предложение Ф. Кариа было очень простым: не обновлять значение 77ТТ для переданных Транспортные протоколы Интернета: ТСР 629 повторно пакетов. Вместо этого при каждой повторной передаче время ожидания можно удваивать до тех пор, пока сегменты не пройдут с первой попытки. Это исправление получило названис алгоритма Кариа. Он применяется в большинстве реализаций протокола ТСР.
В протоколе ТСР используется не только таймер повторной передачи, Еще один применяемый в этом протоколе таймер называется таймером настойчивости. Он предназначен для предотвращения следующей тупиковой ситуации. Получатель посылает подтверждение, в котором указывает окно нулевого размера, давая тем самым отправителю команду подождать. Через некоторое время получатель посылает пакет с новым размером окна, но этот пакет теряется, Теперь обе стороны ожидают действий противоположной стороны.
Когда срабатывает таймер настойчивости, отправитель посылает получателю пакет с вопросом, не изменилось ли текущее состояние. В ответ получатель сообщает текущий размер окна. Если он все еще равен нулю, таймер настойчивости запускается снова, и весь цикл повторяется. Если же окно увеличилось, отправитель может передавать данные, В некоторых реализациях протокола используется третий таймер, называемый дежурным таймером. Когда соелинение не используется в течение долгого времени, срабатывает дежурный таймер, заставляя одну сторону проверить, есть ли еще кто живой на том конце соединения. Если проверяющая сторона не получает ответа, соединение разрывается.
Эта особенность протокола довольно противоречива, поскольку она приносит дополнительные накладные расходы и может разорвать вполне жизнеспособное соединение из-за кратковременной потери связи. Последний таймер, используемый в каждом ТСР-соединении, — это таймер, запускаемый в состоянии ТАЙМЕР КЛУТ конечного автомата при закрытии соединения. Он отсчитывает двойное время жизни пакета, чтобы гарантировать, что после закрытия соединения в сети не останутся созданные им пакеты. Беспроводные протоколы ТСР и МОР Теоретически, транспортные протоколы не должны зависеть от технологии, применяемой на расположенном ниже сетевом уровне.
В частности, протоколу ТСР должно быть все равно, передаются его сегменты по радио или по оптоволоконному кабелю. На практике, тем не менее, это имеет значение, так как основная часть реализаций протокола ТСР подверглась детальной оптимизации, основанной на предположениях, справедливых для проводных сетей, но неверных для беспроводных. Игнорирование свойств беспроводной связи может привести к появлению реализации протокола ТСР, которая будет логически корректной, но в то же время будет характеризоваться ужасающе низкой производительностью.
Основным вопросом является алгоритм борьбы с перегрузкой. Почти все нынешние реализации протокола ТСР предполагают, что тайм-ауты вызываются заторами, а не потерей пакетов. Соответственно, когда время ожидания истекает, протокол ТСР снижает скорость передачи (например, по алгоритму затяжного 630 Глава б. Транспортный уровень пуска Джекобсона), чтобы ослабить нагрузку на сеть и тем самым способствовать устранению затора.
К сожалению, беспроводные линии передачи являются чрезвычайно ненадежными. Они постоянно теряют пакеты. Правильная реакция на потерю пакета должна состоять в его скорейшей повторной отправке. Снижение скорости может лишь ухудшить ситуацию. Если, к примеру, 20 % всех пакетов теряется, а отправитель передает по 100 пакетов в секунду, то до получателя доходит около 80 пакетов в секунду.
Если отправитель снизит скорость до 50 пакетов в секунду, на выходе скорость упадет до 40 пакетов в секунду. Таким образом, если пакет теряется в проводной сети, отправитель должен снизить скорость. Если же пакет теряется в беспроводной сети, отправитель должен не снижать скорость, а, возможно, даже увеличить ее (это напоминает разницу в способах вывода из заноса переднеприводных и заднеприводных автомобилей. — Примеч. перев.).
Если отправитель не знает, в какой сети он находится, ему трудно принять верное решение. Часто путь от отправителя до получателя оказывается неоднородным. Первые 1000 км могут проходить по проводной сети, но последний километр может оказаться беспроводным. В такой ситуации принять правильное решение в случае тайм-аута е|це сложнее, так как его причины могут быть различными. Предложенное решение, получившее название непрямого протокола ТСР (Ванне и Вадг1паСЬ, 1995), состояло в разбиении ТСР-соединения на два отдельных соединения, как показано на рнс.
8.32. Первое соединение тянется от отправителя до базовой станции, а второе — от базовой станции до получателя. Базовая станция просто копирует пакеты из одного соединения в другое в обоих направлениях. 32 бита Порт отправителя Порт получателя Длина опР Контрольная сумма 00Р Рис. 632. Разбиение ТОР-соединения надва Преимущество этой схемы состоит в том, что два соединения, на которые разбивается ТСР-соединение, оказываются однородными.
В ответ на тайм-ауты в первом соединении отправитель может снизить скорость, а на тайм-ауты во втором — увеличить. Друпзе параметры также могут настраиваться независимо для каждого соединения, Недостаток заключается в том, что такое решение нарушает семантику протокола ТСР, Поскольку каждая часть соединения представляет собой полноценное ТСР-соединение, базовая станция сама подтверждает получение каждого сегмента обычным способом.
Только теперь получение подтверждения отправителем означает не то, что сегмент успешно добрался до получателя, а только то, что его получила базовая станция. Другое решение, разработанное Балакришнаном (Ва1а1сг1зЬпап и др., 1995), не нарушает семантики протокола ТСР. В его основе лежат небольшие изменения Транспортные протоколы Интернета: ТСР БЗ1 в программе сетевого уровня, работающей на базовой станции. Одно из изменений состоит в добавлении специального следящего агента, просматривающего и кэширующего сегменты, направляемые мобильному хосту, и подтверждений, посылаемых им в ответ.
Если следящий агент замечает, что в ответ на ТСР-сегмент, пересылаемый им мобильному хосту, не поступает подтверждения, он просто передает этот сегмент еще раз, не информируя об этом отправителя. У следящего агента есть свой таймер для отслеживания подтверждений, устанавливаемый на относительно небольшой интервал времени.
Он также повторно передает сегменты, когда получает от мобильного хоста дубликаты подтверждений, означающие, что хосту чего-то не хватает для счастья. Дубликаты подтверждений уничтожаются на месте, чтобы отправитель на другом конце кабельной сети не принял их за сигнал о перегрузке. Недостаток такой прозрачности состоит в том, что прн частых потерях сегментов на беспроводном участке у отправителя может истечь интервал ожидания, и он может запустить механизм борьбы с перегрузкой. В предыдущем варианте составного ТСР-соединения, напротив, алгоритм борьбы с перегрузкой никогда бы не запустился, если только в сети действительно не образовался бы затор.