Многие TCP-соединения между исходной и конечной точками пересекают несколько сетей. Когда некоторые из сетей являются более медленными, чем другие, входному маршрутизатору для самой медленной сети часто передается больше данных, чем он может обработать. Он может буферировать некоторые из входных пакетов, чтобы избежать их удаления из-за внезапных изменений потока, но в конечном счете его буферы заполнятся, и он должен будет начать удалять пакеты. Когда TCP-соединение начинает сначала отправлять данные через быструю сеть маршрутизатору, пересылающему через более медленные сети, оно может обнаружить, что очереди маршрутизатора уже почти полностью заполнены. В первоначальной политике отправки, использованной в BSD, передачи большого количества данных начинались бы после установки соединения с отправки полного окна пакетов. Эти пакеты могли бы быть отправлены на полной скорости сети на маршрутизатор узкого места, но этот маршрутизатор мог бы передавать их лишь со значительно меньшей скоростью.
В результате начальный взрыв пакетов, весьма вероятно, переполнил бы очередь маршрутизатора, и некоторые из пакетов были бы потеряны. Если бы такое соединение использовало расширенный размер окна в попытке обеспечить производительность - например, при пересечении спутниковой линии связи с длительным временем обращения, - эта проблема была бы даже еще более серьезной. Однако, если соединение смогло однажды достичь стабильного состояния, сеть часто могла бы принять полное окно данных, если пакеты были бы равномерно распределены по всему пути. В устойчивом состоянии новые пакеты вводились бы в сеть лишь тогда, когда предыдущие пакеты были подтверждены и число пакетов в сети было бы постоянным.
В это стабильное состояние TCP-соединение приводится алгоритмом медленного старта [Jacobson, 1988]. Он называется медленным, поскольку при пересечении медленной сети передачу данных нужно начинать медленно.
Схема проста: соединение А начинает с ограничения в один ожидающий пакет. Каждый раз при получении подтверждения предел увеличивается на один пакет. Если подтверждение содержит также обновление окна, в ответ могут быть отправлены два пакета. Этот процесс продолжается до тех пор, пока окно не будет полностью открыто. В ходе фазы медленного старта соединения, если каждый пакет подтверждался бы отдельно, ограничение удваивалось бы в ходе каждого обмена, приводя к экспоненциальному открытию окна. Отложенные подтверждения могли бы вызвать объединение подтверждений, если к получателю могло бы поступать более одного пакета в течение 200 миллисекунд, слегка замедляя открытие окна. Однако отправитель никогда не посылает в ходе фазы открытия наборы из более чем двух или трех пакетов, а когда окно открыто, отправляет лишь один или два пакета.
- 17/05/2010 12:52 - Реализация работы в сети
- 17/05/2010 04:38 - Сетевая коммуникация
- 16/05/2010 02:44 - Сетевая файловая система
- 21/03/2010 19:43 - Обработка сдерживания источника
- 21/03/2010 19:36 - Задание размеров буфера и окна
- 31/01/2010 15:39 - Отложенные подтверждения и обновления окон
- 31/01/2010 15:30 - Избежание небольших пакетов
- 30/01/2010 12:15 - Избегание синдрома незначительного окна