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

Далее рассмотрим четыре основных алгоритма управления перегрузкой, определенных в документах IETF: «медленный старт» (slow start), «предотвращение перегрузки» (congestion avoidance), «быстрая повторная передача» (fast retransmit) и «быстрое восстановление» (fast; recovery). Все эти алгоритмы были разработаны в конце 80-х - начале 90-х годов XX века американским ученым Van Jacobson [Jacobson88, Jacobson90] из всемирно известной группы Network Research Group, Information and Computing Sciences Division (ICSD), Lawrence Berkeley National Laboratory (LBNL) в Беркли, Калифорния [NRG02], Подход к управлению перегрузками, используемый в протоколе TCP, базируется на возможности адаптивного, т.е. в зависимости от размера текущей нагрузки в сети, изменения скорости передачи информации источником. Если источник TCP располагает информацией, что нагрузка на маршруте до приемника невелика, то он увеличивает скорость передачи. Если же на маршруте до приемника источником обнаружена перегрузка, или состояние близкое к перегрузке, то источник снижает скорость. Возникает три справедливых вопроса:

• Каким образом источник TCP ограничивает скорость, с которой данные поступают в сеть?

• Каким образом источник TCP определяет состояние нагрузки на маршруте до приемника?

• В соответствии с каким алгоритмом источник должен устанавливать (варьировать) скорость передачи данных в сеть?

Прежде чем перейти непосредственно к поиску ответов, необходимо отметить, что на данный момент существует целое семейство протоколов TCP. Эти протоколы обладают определенными одинаковыми свойствами, а их различие, зачастую, сводится к различию алгоритмов управления перегрузкой, и этот факт будет подробно рассмотрен в этой главе ниже. Далее дискуссия будет строиться на базе алгоритма управления перегрузками TCP Reno Jacobson90] - именно этот алгоритм сегодня используется большинством операционных систем [PadhyeOl], Для исторической справки необходимо упомянуть также протокол TCP Tahoe [Jacobson88, Fall96], который фактически являлся первой реализацией протокола TCP.

Сначала рассмотрим каким образом источник TCP ограничивает скорость, с которой данные поступают в сеть. Ранее было определено, что на каждой из сторон для соединения TCP определяются буфер приема, буфер посылки и несколько переменных. Посредством изменения размера «окно перегрузки» cwnd соединение TCP управляет количеством данных, переданных источником в сеть, но еще не подтвержденных приемником. Очевидно, что количество неподтвержденных сегментов в передатчике не может превысить минимальное из значений переменных cwnd и rwnd, т.е.:

LastByteSe.it - Last.3yteAck.ed < min {cwnd, rw.nd} .

Для того, чтобы далее понять отличие «управления потоком» от «управления перегрузками», сосредоточимся на последнем и предположим, что размер буфера ресивера достаточно большой, в связи с чем можно пренебречь случаем рассмотренным выше, когда rwnd = О, т.е. количество неподтвержденных сегментов в передатчике полностью зависит только от значения cwnd. Подобное предположение в результате ограничивает, с одной стороны, количество неподтверж денных пакетов, а с другой - скорость передачи передатчика. Рассмотрим, почему это происходит. Пусть существует соединение TCP, для которого значения задержки сегмента и вероятности потери сегмента незначительны. Также пусть в некоторый момент времени передатчик посылает сегменты с данными, количество посланных байт равно значению размера окна перегрузки cwnd. Тогда, примерно в конце промежутка времени RTT посылки последнего сегмента данных, в передатчик поступает сегмент подтверждения.

Важным моментом при оценке функционирования любого теле-коммуникацонного соединения является оценка его эффективности. В случае протокола TCP эффективность можно оценить посредством вычисления обеспечиваемой им «пропускной способности» соединения (throughput) - скорости, с которой данные передаются от передатчика к приемнику. Поэтому, пропускную способность рассматриваемого соединения TCP можно приблизительно оценить следующим образом:

Throughput - cwnd / RTT [байт/'с] .

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

Управление потоком в протоколе tcp | Управление трафиком и качество обслужевания в сети | Алгоритм управления перегрузкой