Медленный старт

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Медленный старт — часть стратегии управления окном перегрузки (англ. congestion window), в TCP. Медленный старт используется совместно с другими алгоритмами для того чтобы избежать отправки большего количества данных, чем сеть способна передать. Алгоритм определяется RFC 5681

Алгоритм[править | править исходный текст]

Медленный старт — один из алгоритмов, который TCP использует для контроля над нагрузкой сети. Иногда его еще называют фазой экспоненциального роста.

Во время фазы экспоненциального роста, алгоритм медленного старта работает за счет увеличения окна TCP каждый раз когда получено подтверждение, то есть увеличивает размер окна в зависимости от количества подтвержденных сегментов. Это происходит до тех пор, пока для какого-то сегмента не будет получено подтверждение или будет достигнуто какое-то заданное пороговое значение. Если происходит потеря, TCP предполагает что это связано с перегрузкой сети и принимает меры по сокращению нагрузки на сеть. Как только порог достигнут, TCP входит в фазу линейного роста (предотвращения перегрузки). В эту фазу окно увеличивается на один сегмент для каждого RTT. Это происходит до тех пор, пока случаются потери.

Хотя алгоритм и называется «медленный старт», размер его окна перегрузки растет довольно энергично, гораздо энергичнее чем во время фазы линейного роста.[1] До того, как алгоритм медленного старта был добавлен в TCP, начальная фаза, направленная на предотвращение перегрузки, была намного быстрее.

Базовый медленный старт[править | править исходный текст]

Алгоритм начинается в экспоненциальной фазе роста, сначала с размером окна перегрузки (congestion window — CWND) 1, 2 или 10[2] сегментов и увеличивает его на один размер сегмента (segment size — SS) для каждого полученного ACK. Если приемник посылает ACK для каждого сегмента, такое поведение эффективно удваивает размер окна после каждого цикла сети. Если приемник поддерживает подтверждения с опозданием, темпы роста будут ниже, но все рост окна будет увеличивается, как минимум, на один MSS каждого времени приема-передачи. Такое поведение продолжается до тех пор, пока размер окна перегрузки (CWND) не достигнет размера объявленного окна приемника или пока не произойдет потеря.

Когда происходит потеря, половина текущего CWND сохраняется в виде порога медленного старта (SSThresh) и медленный старт начинается снова от своего первоначального CWND. Как только CWND достигает SSThresh, TCP переходит в режим предотвращения перегрузки, где каждый ACK увеличивает CWND на SS * SS / CWND. Это приводит к линейному увеличению CWND.

Быстрое восстановление[править | править исходный текст]

Существует вариация алгоритма медленного старта, известная как быстрое восстановление (Fast Recovery), которая использует быструю повторную передачу последующей фазой предотвращения перегрузки. В алгоритме быстрого восстановления, во избежании перегрузки, когда пакет (после 3 полученных подтверждений) не получен, размер окна перегрузки сводится к порогу медленного старта, а не к меньшему начальному значению.

Проблемы[править | править исходный текст]

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

Протокол медленного старта плохо подходит для короткоживущих соединений. Старые браузеры могут создавать много последовательных коротко живущих соединений с веб-сервером, и будет открывать и закрывать соединение для каждого запрашиваемого файла. Все это держало большинство подключений в режиме медленного старта, в результате которых было большое время отклика. Чтобы избежать этой проблемы, современные браузеры либо открывают несколько соединений одновременно или повторно используют одно соединение для всех файлов, запрошенных с конкретного веб-сервера. Тем не менее, соединения не могут быть повторно использованы для множества сторонних серверов, используемых веб-сайтами для реализации веб-рекламы, общих функций социальных сетей,[3] сценариев веб-аналитики.

Ссылки[править | править исходный текст]

  1. Jacobson, Van; Karels, MJ (1988). «Congestion avoidance and control». ACM SIGCOMM Computer Communication Review 18 (4): 314–329.
  2. Corbet, Jonathan Increasing the TCP initial congestion window. LWN. Проверено 10 октября 2012.
  3. Nick O'Neill. "What's Making Your Site Go Slow? Could Be The Like Button". AllFacebook, November 10, 2010. Retrieved on September 12, 2012.