Definición


El enfoque tomado por TCP entonces es que cada remitente limite la tasa a la cual envía tráfico a través de sus conexiones en función de la congestión recibida

Este mecanismo mantiene una variable adicional llamada congestion window denotada cwnd. La cantidad de datos sin confirmar no debe ser mayor el mínimo entre la congestion window y receiver window

Definiremos un loss event en un TCP sender como la ocurrencia de un timeout o la recepción de tres ACK duplicados. Cuando hay excesiva congestión, entonces se perderán paquetes a lo largo de la ruta y ocasionarán loss events. Debido a que TCP utiliza ACK (o un timer) para configurar su ventana de congestión, se dice de ser self-clocking

Para decidir como exactamente se modificará la ventana de congestión, se seguirán los siguientes principios

  • Un segmento perdido implica congestión, y el remitente deberá reducir su tasa de transmisión cuando esto ocurre
  • La confirmación de un paquete indica que la red está entregando los segmentos, y el remitente deberá aumentar su tasa de transmisión

La estrategia de TCP entonces será la de bandwidth probing. La tasa de transmisión se aumentará lentamente en respuesta a los ACK recibidos y disminuirá al encontrarse con una perdida. El objetivo es alcanzar una velocidad estable que no cause perdida de paquetes

Ahora podremos definir el algoritmo de congestión de control de TCP, el cual tiene tres componentes principales

  1. Se inicia
    • Se inicializa el cwnd a lwnd (loss window)
    • Se establece el ssthresh
    • La cantidad de ACK duplicados es
  2. Si se recibe un ACK que ya se recibió
    • Se aumenta en uno el contador de ACK duplicados
  3. En el caso de que cwnd ssthresh
  4. Se recibe un nuevo ACK *
* Se reinicia los ACK duplicados a $0$
* Si se puede, se transmite un nuevo segmento

5. Si se recibe un ACK que ya se recibió * Se aumenta en uno el contador de ACK duplicados 6. Si la cantidad de ACK duplicados llega a *

* Si se puede, se transmite un nuevo segmento

7. Si se recibe un ACK que ya se recibió *

* Si se puede, se transmite un nuevo segmento

8. Si ocurre un timeout *

* Se reinicia los ACK duplicados a $0$
* Si se puede, se retransmite el segmento perdido

9. Se recibe un nuevo ACK *

* Se reinicia los ACK duplicados a $0$
* Si se puede, se transmite un nuevo segmento

10. Si ocurre un timeout *

* Se reinicia los ACK duplicados a $0$
* Si se puede, se retransmite el segmento perdido

11. Si la cantidad de ACK duplicados llega a *

* Si se puede, se transmite un nuevo segmento

12. Se recibe un nuevo ACK *

* Se reinicia los ACK duplicados a $0$

13. Si ocurre un timeout *

* Se reinicia los ACK duplicados a $0$
* Si se puede, se retransmite el segmento perdido

Manejo del bandwidth


Para obtener altas velocidad de transmisión utilizando TCP, debemos conseguir una muy baja probabilidad de perdida de paquetes. Debido a esto, hoy en día se están investigando nuevas versiones de TCP específicas para ambientes de alta velocidad