# CUBIC TCP

CUBIC és un algorisme d'evitació de congestió de xarxa per a TCP que pot aconseguir connexions d'ample de banda elevat a les xarxes amb més rapidesa i fiabilitat davant d'una latència elevada que els algorismes anteriors. Ajuda a optimitzar les xarxes llargues de greix.
L'any 2006, es va publicar la primera implementació CUBIC al nucli Linux 2.6.13. Des de la versió 2.6.19 del nucli, CUBIC substitueix BIC-TCP com a algorisme de control de congestió TCP predeterminat al nucli Linux.
MacOS va adoptar TCP CUBIC amb la versió OS X Yosemite el 2014, mentre que la versió anterior OS X Mavericks encara utilitzava TCP New Reno.
Microsoft el va adoptar per defecte a l'actualització de Windows 10.1709 Fall Creators (2017) i a l'actualització de Windows Server 2016 1709.

## Característiques

CUBIC és una derivada menys agressiva i més sistemàtica de BIC TCP, en què la mida de la finestra és una funció cúbica del temps des de l'últim esdeveniment de congestió, amb el punt d'inflexió establert a la mida de la finestra anterior a l'esdeveniment. Com que és una funció cúbica, hi ha dos components per al creixement de la finestra. La primera és una part còncava on la mida de la finestra augmenta ràpidament fins a la mida abans de l'últim esdeveniment de congestió. El següent és el creixement convex on CUBIC busca més amplada de banda, lentament al principi i després molt ràpidament. CUBIC passa molt de temps en un altiplà entre la regió de creixement còncava i convexa que permet que la xarxa s'estabilitzi abans que CUBIC comenci a buscar més amplada de banda.
Una altra diferència important entre CUBIC i molts algorismes TCP anteriors és que no es basa en la cadència dels RTT per augmentar la mida de la finestra. La mida de la finestra de CUBIC només depèn de l'últim esdeveniment de congestió. Amb algorismes anteriors com TCP New Reno, els fluxos amb temps de retard d'anada i tornada (RTT) molt curts rebran ACK més ràpidament i, per tant, les seves finestres de congestió creixen més ràpidament que altres fluxos amb RTT més llargs. CUBIC permet més equitat entre els fluxos, ja que el creixement de la finestra és independent de RTT.

## Algoritme

CUBIC augmenta la seva finestra perquè sigui dependent del temps real, no depenent de RTT com BIC. El càlcul per a cwnd (finestra de congestió) també és més senzill que el BIC.
Definiu les variables següents:
* β : Factor de disminució multiplicativa
* w $_{max}$ : mida de la finestra just abans de l'última reducció
* T : Temps transcorregut des de l'última reducció de la finestra
* C : una constant d'escala
* cwnd : la finestra de congestió en el moment actual
RFC 8312 indica el següent:
* La unitat de totes les mides de finestra d'aquest document són els segments de la mida màxima del segment (MSS) i la unitat de tots els temps són els segons. (Secció 4)
* β HA d'estar configurat en 0,7 (secció 4.5)
* C HA d'estar configurat a 0,4 (secció 5)
Aleshores, cwnd es pot modelar per:${\begin{array}{lcr}cwnd\ =\ C(T-K)^{3}+w_{max}\\{\textrm {on}}\ K={\sqrt[{3}]{\frac {w_{max}(1-\beta )}{C}}}\end{array}}$

## Referències

* 1 2 Ha, Sangtae; Rhee, Injong; Xu, Lisong ACM SIGOPS Operating Systems Review, 42, 2008, pàg. 11. DOI: 10.1145/1400097.1400105.
* ↑ «[TCP]: Make cubic the default · torvalds/Linux@597811e» (en anglès). GitHub.
* ↑ «apple-oss-distributions/distribution-macOS at os-x-1010» (en anglès). GitHub.
* ↑ «xnu/tcp_cc.h at a3bb9fcc43a00154884a30c9080595284c26cec9 · apple-oss-distributions/xnu» (en anglès). GitHub, 29-04-2022.
* ↑ «apple-oss-distributions/distribution-macOS at os-x-1095» (en anglès). GitHub.
* ↑ «xnu/tcp_cc.h at d2a0abf2ede8152c5a107fe51e032c1193d2015b · apple-oss-distributions/xnu» (en anglès). GitHub, 29-04-2022.