В TCP протоколе на пакет с данными приходит пакет с подтверждением о его доставке (флаг ACK). Соответственно, замеряя время отправки пакета с данными и время получения подтверждения на этот пакет, мы можем определять узкое горлышко.
Время, которое необходимо для отправки пакета и получения на него подтверждения называется RTT (Round-Trip Time). Еще его называют время приема-передачи.
Если во время передачи данных RTT начинает расти, значит где-то по пути пакеты начинают копиться в буфере на отправку. А значит, нужно уменьшать скорость передачи данных.
Скорость передачи данных в TCP регулируется алгоритмом, который называется “Контроль переполнения”. По-английски это Congestion control. Иногда его переводят как контроль скопления.
Этот алгоритм оперирует следующими параметрами:
-
Скользящее окно
-
RTT
-
Потеря пакета
-
Окно переполнения (Congestion Window или сокращенно CWND)
Из всего перечисленного мы еще не знакомы только с Окном переполнения. Окно переполнения по сути и определяет скорость передачи данных по TCP. Этот параметр в алгоритме определяет, сколько пакетов с данными можно отправить в сеть до того, как получим подтверждение на них. Чем больше таких пакетов с данными мы отправим, тем больше будет скорость передачи.
CWND это такой параметр, который с одной стороны всегда хочет разогнаться еще, а с другой, смотрит, не нужно ли притормозить. Тормозами выступают значительное увеличение RTT, потеря пакета и ограничение скользящего окна. Ну а разгон определяется как противоположность тормозу. Если никто не тормозит, значит разгоняемся.
Таким образом, используя RTT, скользящее окно и обнаружение потери пакета, TCP адаптирует свою скорость передачи данных.
На сегодняшний день существует более 20 различных реализаций алгоритмов переполнения.
Они отличаются друг от друга начальным значением CWND, до какого уровня действует фаза низкий старт, при каком отклонении RTT начинать снижать скорость и так далее. А некоторые алгоритмы адаптированы под спутниковые каналы (Long Fat Pipes).
Сеть постоянно меняется, меняются каналы передачи данных, сервисы. Поэтому, появляются новые реализации алгоритма контроля переполнения.