Медленный запуск и предотвращение перегрузки

Другие особенности ТСР – это механизмы медленного запуска (slow start) и предотвращения перегрузок (congestion avoidance). Первые версии ТСР начинали работу с соединением с передачи от отправителя в сеть нескольких сегментов, заполняющих окно, определенное приемником (в процессе трехэтапного установления связи). На локальные подсети такое соединение не оказывает такого влияния, как на взаимодействия между подсетями. Если между отправителем и получателем имеются маршрутизаторы и более медленные каналы, то не исключено, что возникнут проблемы. В первый момент может быть послано огромное количество информации. Метод, позволяющий избежать этого, называется медленным запуском. При возникновении перегрузки ТСР должен уменьшить скорость передачи пакетов в сеть, а затем с помощью механизма медленного запуска и/или управления нагрузкой восстановить ее. На практике эти механизмы используются совместно.

Алгоритм медленного запуска при работе постоянно следит, чтобы скорость передачи пакетов в сеть была равна скорости возвращения подтверждений. Механизм медленного запуска добавляет к окну ТСР отправителя окно перегрузки (congestion). Оно не указывается в заголовке ТСР, но предполагается. Когда устанавливается новое соединение, инициализируется окно перегрузки, равное одному сегменту.

Размеры сегментов варьируются в зависимости от типа компьютера или локальной сети, но возможно применение стандартного значения, обычно составляющего 536 (536 – это размер сегмента уровня ТСР, с которым мы работаем) или 512. Каждый раз, когда приходит подтверждение, окно перегрузки увеличивается на один сегмент. Максимальное количество сегментов, которые может передать отправитель, равно минимуму из окна перегрузки и окна передачи. Отличие здесь заключается в том, что окном перегрузки, как механизмом управления потоком, пользуется отправитель, а передаваемым окном – получатель.

Отправитель начинает с передачи одного сегмента и ожидания его подтверждения. При получении подтверждения окно перегрузки увеличивается с 1 до 2, и теперь могут быть посланы два сегмента. После подтверждения каждого из этих двух сегментов окно перегрузки возрастает до 4. Это значение продолжает расти по экспоненте, пока не будет достигнут размер окна передачи. Как только окно перегрузки и передаваемое окно сравняются по размеру, размер окна станет инструментом для управления нагрузкой на рабочие станции (так, как будто медленный запуск никогда не использовался), а сегменты будут продолжать передаваться.

Однако при перегрузке (что можно определить по дублированию подтверждений или большим задержкам, тайм-аутам) алгоритм прекращает работу, но начинает действовать другой алгоритм (известный как алгоритм управления перегрузкой). Как уже отмечалось ранее, в условиях перегрузки размеры окна перегрузки и окна передачи ТСР совпадают. Меньшее значение затем делится пополам и сохраняется в переменной, называемой порогом медленного запуска. Это значение должно быть равно, по крайней мере, двум сегментам, если только перегрузка не была причиной тайм-аута тогда размер окна перегрузки устанавливается в 1 (медленный запуск). Отправитель ТСР дальше может реализовать механизм либо медленного запуска, либо предотвращения перегрузок. Разу после получения подтверждения увеличивается размер окна перегрузок. Как только размер окна перегрузок сравняется со значением порога медленного запуска, алгоритм медленного запуска останавливается, и начинает работу алгоритм предотвращения перегрузок. Последний позволяет более гибко управлять (в отличие от алгоритма медленного запуска, линейно, а не экспоненциально) увеличением объемов передачи. В соответствии с этим алгоритмом размер сегмента умножается на 2, полученное значение делится на размер окна перегрузок, а затем постоянно увеличивается скорость каждый раз. Когда приходит подтверждение. Это дает возможность увеличивать размер передаваемых данных и лучше управлять скоростью передачи.

В Internet такие алгоритмы оказались весьма эффективными. Все версии программного обеспечения на базе TCP/IP теперь включают их, и они успешно работают не только на удаленных соединениях, но и между двумя станциями локальной подсети.