Ограничены ли мы по-прежнему размером окна TCP, когда хотим полностью использовать пропускную способность удаленных серверов?
Согласно этому веб-сайту , как только время прохождения туда и обратно увеличивается, мы теряем часть пропускной способности в реальном времени для удаленных серверов, использующих размер окна TCP по умолчанию 64 КБ.
Пропускная способность моей сети составляет 240 МБ/60 МБ вниз/вверх. Я живу в стране третьего мира, где все доступные серверы CDN находятся на расстоянии 2000-4000 км от меня, а мое время в пути до ближайшего сервера CDN составляет 82 мс, что означает, что моя максимально достижимая скорость из-за расстояния составляет всего около ~6 Мбит / с. при условии, что сервер использует размер окна TCP по умолчанию 64 КБ.
Я понимаю, что открытие нескольких потоков загрузки на определенный сервер может помочь достичь максимальной пропускной способности, но, к сожалению, даже при одновременном наличии 32 потоков моя скорость загрузки все еще не может достичь максимальной потенциальной скорости на удаленном сервере.
Итак, что я могу сделать в этом случае, чтобы добиться полной скорости этих серверов, если локальный сервер недоступен?
2 ответа
TCP использует размер окна и встроенный процесс нарастания, а увеличение размера окна — это первый шаг к отправке пакетов большего размера по одному и тому же пути и, таким образом, к передаче все большего и большего количества пакетов «по сети» без необходимости ждать. чтобы они были получены и затем подтверждены. Еще один способ не беспокоиться о нарастании и других механизмах TCP — это туннелировать трафик по более эффективному протоколу, такому как UDP (при условии, что вы не страдаете от ошибок передачи, таких как падения и т. д.), и, таким образом, оптимизировать трафик. используя туннель, который уже работает «оптимально» с полной производительностью и не требует подтверждения связи.
В Linux вы можете увеличить память для буферов отправки, начните с просмотра net.core.rmem_max/wmem. Возможно, стоит посмотреть другие руководства по оптимизации производительности, если вы действительно используете Linux: разумное значение для net.ipv4.tcp_max_syn_backlog в sysctl.conf или выполните поиск по запросу «настроить Linux для соединений с высокой задержкой».
У меня нет большого опыта работы с Windows, поэтому, если вы используете именно это, то вы сами, но я предполагаю, что там также есть много информации об оптимизации сетевого стека, я просто не могу указать на них. .
Максимальный размер окна TCP по умолчанию составляет 64 килобайта. Однако уже давно стало понятно, что этого недостаточно для сегодняшних сетевых требований.
Поэтому масштабирование окна TCP было изобретено и задокументировано в RFC 1323. Он определяет коэффициент масштабирования, начиная с 1 и заканчивая 16384. Это означает, что максимальный эффективный размер окна TCP может составлять 16384 * 65535 байт = 1073725440 байт, то есть один гигабайт.
Фактический коэффициент масштабирования окна определяется при подтверждении TCP, и коэффициент масштабирования используется через соединение.
Вы можете использовать WireShark, чтобы проверить, каков истинный размер окна TCP в ваших TCP-соединениях.