На данный момент ядро linux поддерживает более десятка алгоритмов. Есть чем поиграться кроме параметров ядра.
Был бы счастлив, если бы подсказали как конкретно с ними работать: включать, выключать и т.д.
Ну для полноты можно упомянуть, что конкретные реализации могут быть включены/выключены при сборке ядра и соответственно может статься, что конкретный алгоритм отсутствует и включить его указанным способом нельзя.
А посмотреть список доступных алгоритмов можно так: ls /lib/modules/ВЕРСИЯ_ВАШЕГО_ЯДРА/kernel/net/ipv4/tcp_*.ko
На месте звёздочки как раз получается имя алгоритма для использования в команде sysctl
Да, так точнее. В другом месте у меня — «модели поведения». Это немного извиняет. Базис-то у TCP в смысле установки соединения, отслеживания номеров последовательностей и т.д. более-менее устаканившийся. А о чем еще можно сказать в смысле поведения — только о том, как с перегрузками/заторами бороться. Тут большой простор.
Когда говорят «размер окна TCP», подразумевают TCP receive window, который регулируется получателем. Его же максимальное значение конфигурируется как maximum window size.
Выше перечислены congestion avoidance алгоритмы, задача которых определить размер другого окна — congestion window, который регулируется отправителем и получателю неизвестен.
А окно на отправку с окном получателя никак не связано? Когда отправитель увеличивает cwnd верхней планкой для него будет окно, объявленное получателем — то самое receive window. И даже если не начнутся потери из-за перегрузки, cwnd не превысит rwnd. Таким образом утилизация канала нормальная rwnd может быть ограничена и очень серьезно.
Таким образом уменьшению эффективности может служить высокий RTT канала, низкая планка для роста cwnd — то бишь объявленное получателем rwnd и неэффективное поведение при потерях (как от перегрузок, т.е. достижения объективного потолка так и случайных). Заметка — об устранении/уменьшении последней причины (в смысле не самих потерь, а реакции на них протокола).
Модели TCP