Шрифт:
вне последовательности.
доставке данных.
некоторые данные при повторной отправке были перепакетированы для включения дополнительных байт.
включены в сообщения зондирования.
отправки.
времени цикла, поскольку ACK не успел прийти до завершения тайм-аута,
повторной отправки, что указывает на потерянное соединение.
нулевого окна.
неработающего соединения.
10.14 Соответствие требованиям разработчика
Текущий стандарт TCP требует, чтобы реализации твердо придерживались процедуры медленного старта при инициализации соединения и использовали алгоритмы Керна и Джекобсона для оценки тайм-аута повторной отправки данных и управления нагрузкой. Тесты показали, что эти механизмы приводят к значительному повышению производительности.
Что произойдет при установке системы, которая не придерживается твердо этих стандартов? Она не сможет обеспечить должную производительность для собственных пользователей, и будет плохим соседом для других систем сети, препятствуя восстановлению нормальной работы после временной перегрузки и создавая чрезмерный трафик, приводящий к отбрасыванию датаграмм.
10.15 Барьеры для производительности
TCP доказал свою гибкость, работая в сетях со скоростью обмена в сотни или миллионы бит за секунду. Этот протокол позволил достичь хороших результатов в современных локальных сетях с топологиями Ethernet, Token-Ring и Fiber Distributed Data Interface (FDDI), а также для низкоскоростных линий связи или соединений на дальние расстояния (подобных спутниковым связям).
TCP разработан так, чтобы реагировать на экстремальные условия, например на перегрузки в сети. Однако в текущей версии протокола имеются особенности, ограничивающие производительность в перспективных технологиях, которые предлагают полосу пропускания в сотни и тысячи мегабайт. Чтобы понять возникающие проблемы, рассмотрим простой (хотя и нереалистичный) пример.
Предположим, что при перемещении файла между двумя системами необходимо выполнять обмен непрерывным потоком настолько эффективно, насколько это возможно. Допустим, что:
■ Максимальный размер сегмента приемника — 1 Кбайт.
■ Приемное окно — 4 Кбайт.
■ Полоса пропускания позволяет пересылать по два сегмента за 1 с.
■ Принимающее приложение поглощает данные по мере их поступления.
■ Сообщения ACK прибывают через 2 с.
Отправитель способен посылать данные непрерывно. Ведь когда выделенный для окна объем будет заполнен, прибывает ACK, разрешающий отправку другого сегмента:
Через 2 с: