Расчёт скорости потока TCP в зависимости от RTT

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

На стадии установления соединения рабочая станция и сервер обмениваются значениями максимального размера TCP окна (TCP Window Size). Размер TCP окна (TCP Window Size) – количество октетов (начиная с номера подтверждения), которое принимающая сторона готова принять в настоящий момент без подтверждения. Например, если размер окна получателя равен 16384 байта, то отправитель может отправить 16384 байта без остановки. Принимая во внимание, что максимальная длина сегмента (MSS) может быть 1460 байт, то отправитель сможет передать данный объем в 12 фреймах, и затем будет ждать подтверждение доставки от получателя и информации по обновлению размера окна. Если процесс прошел без ошибок, то размер окна может быть увеличен, если процент ошибок данных в окнах растёт, то размер окна может быть уменьшен.
Максимальный размер окна равен наибольшему 16-ти битному числу (65535 байт) без использования расширения, позволяющего анонсировать размер окна гораздо большего размера.

Дополнительно можно почитать, например, здесь: https://en.wikipedia.org/wiki/TCP_tuning

Итак, можно рассчитать максимальную скорость передачи данных в один поток (без учёта потерь):

Где RWIN – размер окна TCP (TCP Receive Window), RTT – время, которое проходит с момента отправления сообщение до момента получения ответа (ping показывает RTT).

Стоит учесть, что (внезапно!) в телекоме 1 megabit = 106bits = 1000000bits = 1000 kilobits (пруф: https://en.wikipedia.org/wiki/Megabit), это не степень двойки, а математическое понятие кило-, мега- и т.д.

Формула для самостоятельного вычисления скорости одного потока (Мбит/с) в Excel (в данном случае для для задержки 5 мс):

=((65535*8)/(5*0,001)/1000)/1000

Для удобства приведу готовую таблицу для некоторых значений задержек: