Skip to content

Latest commit

 

History

History
39 lines (23 loc) · 4.34 KB

lecture.adoc

File metadata and controls

39 lines (23 loc) · 4.34 KB

Контроль переполнения (Congestion control)

В TCP протоколе на пакет с данными приходит пакет с подтверждением о его доставке (флаг ACK). Соответственно, замеряя время отправки пакета с данными и время получения подтверждения на этот пакет, мы можем определять узкое горлышко.

Время, которое необходимо для отправки пакета и получения на него подтверждения называется RTT (Round-Trip Time). Еще его называют время приема-передачи.

RTT - приема-передачи.
Figure 1. RTT - приема-передачи.

Если во время передачи данных RTT начинает расти, значит где-то по пути пакеты начинают копиться в буфере на отправку. А значит, нужно уменьшать скорость передачи данных.

Скорость передачи данных в TCP регулируется алгоритмом, который называется “Контроль переполнения”. По-английски это Congestion control. Иногда его переводят как контроль скопления.

Этот алгоритм оперирует следующими параметрами:

  • Скользящее окно

  • RTT

  • Потеря пакета

  • Окно переполнения (Congestion Window или сокращенно CWND)

Из всего перечисленного мы еще не знакомы только с Окном переполнения. Окно переполнения по сути и определяет скорость передачи данных по TCP. Этот параметр в алгоритме определяет, сколько пакетов с данными можно отправить в сеть до того, как получим подтверждение на них. Чем больше таких пакетов с данными мы отправим, тем больше будет скорость передачи.

Слева CWND = 1
Figure 2. Слева CWND = 1, справа CWND = 3.

CWND это такой параметр, который с одной стороны всегда хочет разогнаться еще, а с другой, смотрит, не нужно ли притормозить. Тормозами выступают значительное увеличение RTT, потеря пакета и ограничение скользящего окна. Ну а разгон определяется как противоположность тормозу. Если никто не тормозит, значит разгоняемся.

Таким образом, используя RTT, скользящее окно и обнаружение потери пакета, TCP адаптирует свою скорость передачи данных.

Алгоритмы контроля переполнения

На сегодняшний день существует более 20 различных реализаций алгоритмов переполнения.

Алгоритмы переполнения в TCP (https://en.wikipedia.org/wiki/TCP_congestion_control).
Figure 3. Алгоритмы переполнения в TCP (https://en.wikipedia.org/wiki/TCP_congestion_control).

Они отличаются друг от друга начальным значением CWND, до какого уровня действует фаза низкий старт, при каком отклонении RTT начинать снижать скорость и так далее. А некоторые алгоритмы адаптированы под спутниковые каналы (Long Fat Pipes).

Сеть постоянно меняется, меняются каналы передачи данных, сервисы. Поэтому, появляются новые реализации алгоритма контроля переполнения.