Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 167
Текст из файла (страница 167)
Протокол ТСР пытается достичь этой цели с помощью динамического управления размером окна. Первый шаг в борьбе с перегрузкой состоит в том, чтобы обнаружить ее. Пару десятилетий назад обнаружить перегрузку в сети было сложно. Трудно было понять, почему пакет не доставлен вовремя.
Помимо возможности перегрузки сети имелась также большая вероятность потерять пакет вследствие высокого уровня помех на линии. В настоящее время потери пакетов при передаче случаются относительно редко, так как большинство междугородных линий связи являются оптоволоконными (хотя в беспроводных сетях процент пакетов, теряемых из-за помех, довольно высок). Соответственно, большинство потерянных пакетов в Интернете вызвано заторами.
Все ТСР-алгоритмы Интернета предполагают, что потери пакетов вызываются перегрузкой сети, и следят за тайм-аутами как за предвестниками проблем, подобно шахтерам, наблюдающим за своими канарейками, Прежде чем перейти к обсуждению того, как ТСР реагирует на перегрузку, опишем сначала способы ее предотвращения, применяемые протоколом. При обнаружении перегрузки должен быть выбран подходящий размер окна. Получатель может указать размер окна, исходя из количества свободного места в буфере. Если отправитель будет иметь в виду размер отведенного ему окна, переполнение буфера у получателя не сможет стать причиной проблемы, однако она все равно может возникнуть из-за перегрузки на каком-либо участке сети между отправителем и получателем.
На рис. 6.29 эта проблема проиллюстрирована на примере водопровода. На рис. 6.29, а мы видим толстую трубу, ведущую к получателю с небольшой емкостью. До тех пор, пока отправитель не посылает воды больше, чем может поместиться в ведро, вода не будет проливаться. На рис. 6.29, б ограничительным фак- Гэ24 Глава б, Транспортный уровень тором является не емкость ведра, а пропускная способность сети. Если из крана в воронку вода будет литься слишком быстро, то уровень воды в воронке начнет подниматься и, в конце концов, часть воды может перелиться через край воронки.
Регулирование скорости передачи 4 Получатель малой емкости ® Получатель большой емкос Рис. 6.29. Быстрая сеть и получатель малой емкости (ай медленная сеть и получатель большой емкости (б) Решение, применяемое в Интернете, состоит в признании существования двух потенциальных проблем: низкой пропускной способности сети и низкой емкости получателя — и в раздельном решении обеих проблем.
Для этого у каждого отправителя есть два окна; окно, предоставленное получателем, и окно пеРегрузки. Размер каждого из ннх соответствует количеству байтов, которое отпРавитель имеет право передать. Отправитель руководствуется минимальным нз этих двух значений. Например, получатель говорит: «Посылайте 8 Кбайте, но отправитель знает, что если он пошлет более 4 Кбайт, то в сети образуется затор, поэтому он посылает все же 4 Кбайт. Если же отправитель знает, что сеть способна пропустить и большее количество данных, например 32 Кбайт, он передаст столько, сколько просит получатель (то есть 8 Кбайт). При установке соединения отправитель устанавливает размер окна перегрузки Равным размеру максимального используемого в данном соединении сегмента.
Затем он передаст один максимальный сегмент. Если подтверждение получения этого сегмента прибывает прежде, чем истекает период ожидания, к размеру окна добавляется размер сегмента, то есть размер окна перегрузки удваивается, и посылаются уже два сегмента. В ответ на подтверждение получения каждого из сегментов производится расширение окна перегрузки на величину одного мак- Транспортные протоколы Интернета; ТСР 625 симального сегмента. Допустим, размер окна равен п сегментам.
Если подтверждения для всех сегментов приходят вовремя, окно увеличивается на число байтов, соответствующее и сегментам. По сути, подтверждение каждой последовательности сегментов приводит к удвоению окна перегрузки. Этот процесс экспоненциального роста продолжается до тех пор, пока не будет достигнут размер окна получателя или не будет выработан признак тайм-аута, сигнализируюший о перегрузке в сети. Например, если пакеты размером 1024, 2048 и 4096 байт дошли до получателя успешно, а в ответ на передачу пакета размером 8192 байта подтверждение не пришло в установленный срок, окно перегрузки устанавливается равным 4096 байтам. Пока размер окна перегрузки остается равным 4096 байтам, более длинные пакеты не посылаются, независимо от размера окна, предоставляемого получателем.
Этот алгоритм называется затяжным пуском, или медленным пуском. Однако он не такой уж и медленный ()асоЪзоп, 1988). Он экспоненциальный. Все реализации протокола ТСР обязаны его поддерживать. Рассмотрим теперь механизм борьбы с перегрузкой, применяемый в Интернете.
Помимо окон получателя и перегрузки, в качестве третьего параметра в нем используется пороговое значение, которое изначально устанавливается равным 64 Кбайт. Когда возникает ситуация тайм-аута (подтверждение не возвращается в срок), новое значение порога устанавливается равным половине текущего размера окна перегрузки, а окно перегрузки уменьшается до размера одного максимального сегмента Затем, так же как и в предыдущем случае, используется алгоритм затяжного пуска, позволяющий быстро обнаружить предел пропускной способности сети. Однако на этот раз экспоненциальный рост размера окна останавливается по достижении им порогового значения, после чего окно увеличивается линейно, на один сегмент для каждой следующей передачи. В сущности, предполагается, что можно спокойно урезать вдвое размер окна перегрузки, после чего постепенно наращивать его.
Иллюстрация работы данного алгоритма борьбы с перегрузкой приведена на рис. 6.30. Максимальный размер сегмента в данном примере равен 1024 байт. Сначала окно перегрузки было установлено равным 64 Кбайт, но затем произошел тайм-аут, и порог стал равным 32 Кбайт, а окно перегрузки — 1 Кбайт (передача О). Затем размер окна перегрузки удваивается на каждом шаге, пока не достигает порога (32 Кбайт). Начиная с этого момента, размер окна увеличивается линейно.
Передача 13 оказывается несчастливой (как и положено), так как срабатывает тайм-аут. При этом пороговое значение устанавливается равным половине текущего размера окна (40 Кбайт пополам, то есть 20 Кбайт), и опять происходит затяжной пуск. После достижения порогового значения экспоненциальный рост размера окна сменяется линейным.
Если тайм-аутов больше не возникает, окно перегрузки может продолжать расти до размера окна получателя. Затем рост прекратится, и размер окна останется постоянным, пока не произойдет тайм-аут или не изменится размер окна получателя. Прибытие 1СМР-пакета 500КЕЕ 00ЕйЕн (гашение источника) обрабатывается таким же образом, как и тайм-аут.
Альтернативный (и более современный) подход описан в ВРС 3168. 626 Глава 8. Транспортный уровень 40 82 $28 ~ 24 Я 20 ~ 18 12 0 2 4 8 8 10 12 14 16 18 20 22 24 Номер передачи Рис. 6.30. Пример алгоритма борьбы с перегрузкой, применяемого е Интернете Управление таймерами в ТСР В протоколе ТСР используется много различных таймеров (по крайней мере, такова концепция). Наиболее важным из них является таймер повторной передачи. Когда посылается сегмент, запускается таймер повторной передачи. Если подтверждение получения сегмента прибывает раньше, чем истекает период таймера, таймер останавливается.
Если же, наоборот, период ожидания истечет раньше, чем прибудет подтверждение, сегмент передается еще раз (а таймер запускается снова). Соответственно возникает вопрос: каким должен быть интервал времени ожидания? На транспортном уровне Интернета эта проблема оказывается значительно сложнее, чем на уровне передачи данных, описанном в главе 3. На уровне передачи данных величину ожидаемой задержки довольно легко предсказать (ее разбРас невелик), поэтому таймер можно установить на момент времени чуть позднее ожидаемого прибытия подтверждения (рис, 6.31, а).
Поскольку на уровне передачи данных подтверждения редко запаздывают на больший срок (благодаРя тому, что нет заторов), отсутствие подтверждения в течение установленного временного интервала с большой вероятностью означает потерю кадра или подтверждения. Протокол ТСР вынужден работать в совершенно иных условиях. Функция распределения плотности вероятности времени прибытия подтверждения на этом Транспортные протоколы Интернета: ТСР б27 уровне выглядит значительно более полого (рис. 6.31, б), Поэтому предсказать, сколько потребуется времени для прохождения данных от отправителя до получателя и обратно, весьма непросто, Если выбрать значение интервала ожидания слишком малым (например, Т, на рис.
6.31, б), возникнут излишние повторные передачи, забивающие Интернет бесполезными пакетами. Если же установить значение этого интервала слишком большим (Г;), то из-за увеличения времени ожидания в случае потери пакета пострадает производительность. Более того, среднее значение и величина дисперсии времени прибытия подтверждений может изменяться всею за несколько секунд при возникновении и устранении перегрузки. О,З 0,3 с 0,2 о о. ю 0,1 0,1 10 20 ЗО 40 00 Время прохождения данных в оба конца, мс б 10 20 ЗО 40 50 Время прохождения данных в оба конца, мс Рно.
0.31. Плотность вероятности времени прибытия подтверждения на уровне передачи данных (а); плотность вероятности времени прибытия подтверждения на транспортном уровне (б) Решение заключается в использовании крайне динамичного алгоритма, постоянно изменяющего величину периода ожидания, основываясь на измерениях производительности сети. Алгоритм, применяемый в ТСР, разработан Джекобсоном ()асоЪзоп) в 1988 году и работает следующим образом. Для каждого соединения в протоколе ТСР предусмотрена переменная кГГ (Коппс(-Тг(р Т)лев время перемещения в оба конца), в которой хранится наименьшее время получения подтверждения для данного соединения.