Slow-start
# Slow-start

Slow-start es un algoritmo de control de congestión del protocolo TCP.

Ni el emisor ni el receptor tienen forma de saber cual es el máximo volumen de datos que puede transmitir la red, ninguno tiene información sobre los elementos de red que transmitirán la información. Si la red se satura comenzará a descartar paquetes, que tendrán que ser retransmitidos, lo cual puede incrementar aún más la saturación de la red. La solución que plantea este algoritmo, consiste en comenzar enviando un volumen de datos pequeño, que se irá aumentando hasta que la red se sature, en cuyo caso se reducirá la tasa de envío para reducir la saturación.

## Componentes del algoritmo

### Ventana de congestión

Es el valor límite de la ventana del emisor. El objetivo de los mecanismos de control de congestión será lograr una buena estimación de ese valor, de manera que en todo momento tenga un valor óptimo. Es decir, sea lo más grande posible (de manera que no sea una merma para la velocidad real a la que se transmite), pero sin llegar a provocar congestiones en la red (que también redundarán en una merma de la velocidad real o efectiva).

El valor de la ventana de emisión, es decir, el número de bytes que el emisor puede llegar a emitir sin esperar a recibir un ACK, será siempre el mínimo entre la ventana de congestión y el valor de ventana indicado por el receptor.

### Umbral de congestión

Se establece un valor llamado umbral de congestión ("congestion threshold") que trata de ser una estimación del tamaño de la ventana del emisor a partir del cual existe riesgo de congestión. Hasta que la ventana de congestión alcance el valor del umbral, se emplea el algoritmo slow-start para su crecimiento. A partir de haberse alcanzado el valor umbral, se aplica el algoritmo de "evitación de congestión" (congestion avoidance).

El valor inicial del umbral es el del máximo segmento admitido por TCP: 65.535 bytes. Es actualizado a la mitad del valor de la ventana de congestión cuando el transmisor detecta una congestión en la red, pero nunca será inferior a dos segmentos.

### Slow-start

Algoritmo para el cálculo de la ventana de congestión aplicado al principio de la conexión, y hasta que se alcanza el umbral de congestión. Consiste en lo siguiente:

* La ventana de congestión se inicia con el valor de un segmento de tamaño máximo (MSS).
* Cada vez que se recibe un ACK, la ventana de congestión se incrementa en tantos bytes como hayan sido reconocidos en el ACK recibido. En la práctica, esto supone que el tamaño de la ventana de congestión será el doble por cada RTT, lo que da lugar a un crecimiento exponencial de la ventana.
* Cuando un ACK no llega al transmisor:
   * Se toma como una señal de congestión en la red y se reinicia la ventana de congestión a un MSS.
   * Se aplica el algoritmo de congestion avoidance.

### Congestion Avoidance

Cada vez que se recibe un ACK la ventana de congestión se incrementa un número de bytes igual al MSS. En la práctica, esto supone que la ventana crece de manera lineal.

* Datos: Q2630516
