КУБИЧЕСКИЙ TCP

Алгоритм предотвращения перегрузки TCP

CUBIC — это алгоритм предотвращения перегрузки сети для TCP , который может достигать высокоскоростных соединений по сетям быстрее и надежнее в условиях высокой задержки, чем предыдущие алгоритмы. Он помогает оптимизировать длинные толстые сети . [1] [2]

В 2006 году первая реализация CUBIC была выпущена в ядре Linux 2.6.13 . [3] Начиная с версии ядра 2.6.19, [4] CUBIC заменяет BIC-TCP в качестве алгоритма управления перегрузкой TCP по умолчанию в ядре Linux. [3]

MacOS приняла TCP CUBIC с выпуском OS X Yosemite в 2014 году, [5] [6] в то время как предыдущая версия OS X Mavericks по-прежнему использовала TCP New Reno. [7] [8]

Microsoft приняла его по умолчанию в Windows 10.1709 Fall Creators Update (2017) и обновлении Windows Server 2016 1709. [9]

Характеристики

CUBIC — менее агрессивная и более систематическая производная BIC TCP , в которой размер окна является кубической функцией времени с момента последнего события перегрузки, а точка перегиба установлена ​​на размере окна до события. Поскольку это кубическая функция, есть два компонента для роста окна. Первый — вогнутая часть, где размер окна быстро увеличивается до размера до последнего события перегрузки. Следующий — выпуклый рост, где CUBIC проверяет большую пропускную способность, сначала медленно, а затем очень быстро. CUBIC проводит много времени на плато между вогнутой и выпуклой областью роста, что позволяет сети стабилизироваться, прежде чем CUBIC начнет искать большую пропускную способность. [10]

Еще одно важное отличие CUBIC от многих более ранних алгоритмов TCP заключается в том, что он не полагается на каденцию RTT для увеличения размера окна. [11] Размер окна CUBIC зависит только от последнего события перегрузки. В более ранних алгоритмах, таких как TCP New Reno, потоки с очень коротким временем задержки приема-передачи (RTT) будут получать ACK быстрее и, следовательно, их окна перегрузки будут расти быстрее, чем у других потоков с более длинными RTT. CUBIC обеспечивает большую справедливость между потоками, поскольку рост окна не зависит от RTT.

Алгоритм

CUBIC увеличивает свое окно, чтобы оно зависело от реального времени, а не от RTT, как BIC. Расчет для cwnd (окна перегрузки) также проще, чем у BIC.

Определите следующие переменные:

  • β : Мультипликативный коэффициент уменьшения
  • w max : Размер окна непосредственно перед последним уменьшением
  • T : Время, прошедшее с момента последнего сокращения окна
  • C : Константа масштабирования
  • cwnd : Окно перегрузки в текущий момент времени

RFC 8312 указывает следующее:

  • Единицей измерения всех размеров окон в этом документе являются сегменты максимального размера сегмента (MSS), а единицей измерения всех времен — секунды. (Раздел 4)
  • β ДОЛЖЕН быть установлен на 0,7 (Раздел 4.5)
  • C ДОЛЖЕН быть установлен на 0,4 (Раздел 5)

Тогда cwnd можно смоделировать следующим образом:

с ж н г   =   С ( Т К ) 3 + ж м а х где   К = ж м а х ( 1 β ) С 3 {\displaystyle {\begin{array}{lcr}cwnd\ =\ C(TK)^{3}+w_{max}\\{\textrm {где}}\ K={\sqrt[{3}]{\frac {w_{max}(1-\beta )}{C}}}\end{array}}}

Альтернативы

Помимо алгоритмов на основе окна, таких как Cubic, существуют алгоритмы на основе скорости (включая TCP BBR от Google), которые работают по-другому, используя «скорость отправки» вместо окна. [12]

Смотрите также

Ссылки

  1. ^ Sangtae Ha; Injong Rhee; Lisong Xu (июль 2008 г.). "CUBIC: новый высокоскоростной вариант TCP, дружественный TCP" (PDF) . Обзор операционных систем ACM SIGOPS . 42 (5): 64–74. doi :10.1145/1400097.1400105. S2CID  9391153. Архивировано из оригинала (PDF) 26 июля 2015 г. . Получено 29 сентября 2015 г. .
  2. ^ Сангтэ Ха; Инджонг Ри; Лисонг Сюй; Ларс Эггерт; Ричард Шеффенеггер (февраль 2018 г.). CUBIC для быстрых сетей дальней связи. дои : 10.17487/RFC8312 . РФК 8312.
  3. ^ ab Ha, Sangtae; Rhee, Injong; Xu, Lisong (2008). "CUBIC: новый дружественный TCP высокоскоростной вариант TCP". Обзор операционных систем ACM SIGOPS . 42. ACM New York, NY, USA: 11. doi :10.1145/1400097.1400105. S2CID  9391153.{{cite journal}}: CS1 maint: дата и год ( ссылка )
  4. ^ "[TCP]: Сделать cubic значением по умолчанию · torvalds/Linux@597811e". GitHub .
  5. ^ "apple-oss-distributions/distribution-macOS в os-x-1010". GitHub .Управление перегрузкой TCP реализовано в ядре XNU, этот коммит ссылается на ядро ​​XNU, используемое в Mac OS X Yosemite
  6. ^ "xnu/tcp_cc.h at a3bb9fcc43a00154884a30c9080595284c26cec9 · apple-oss-distributions/xnu". GitHub . 29 апреля 2022 г.Заголовочный файл реализации управления перегрузкой TCP ядра XNU, используемого в Mac OS X Yosemite, в котором по умолчанию указан CUBIC
  7. ^ "apple-oss-distributions/distribution-macOS в os-x-1095". GitHub .Ссылки XNU Kernel, используемые в Mac OS X Mavericks
  8. ^ "xnu/tcp_cc.h в d2a0abf2ede8152c5a107fe51e032c1193d2015b · apple-oss-distributions/xnu". GitHub . 29 апреля 2022 г.Заголовочный файл реализации управления перегрузкой TCP ядра XNU, используемого в Mac OS X Mavericks, в котором по умолчанию указан New Reno
  9. ^ Microsoft (15 ноября 2017 г.). «Обновления Windows TCP» (PDF) .
  10. ^ Tetcos Engineering (2014). "Сравнение алгоритмов управления перегрузкой TCP" (PDF) . Архивировано (PDF) из оригинала 31 марта 2017 г. . Получено 6 августа 2017 г. .
  11. ^ La Rosa, Alexander (10 июля 2019 г.). "Почему CUBIC возвращает нас к контролю перегрузки TCP?". Pandora FMS . Архивировано из оригинала (html) 12 июля 2019 г. Получено 12 июля 2019 г. Цель состоит в том, чтобы иметь алгоритм, который работает с окнами перегрузки, чьи инкрементные процессы более агрессивны, но ограничены от перегрузки сети. Чтобы добиться этого, предлагается, чтобы схема увеличения и уменьшения коэффициента передачи была установлена ​​в соответствии с кубической функцией.
  12. ^ "Контроль перегрузки, скорость модуля ядра PK3C на основе серверов потокового видео и данных". GitHub . Получено 1 августа 2021 г.
  • Домашняя страница BIC и CUBIC в Университете штата Северная Каролина.
Взято с "https://en.wikipedia.org/w/index.php?title=CUBIC_TCP&oldid=1250171850"