Evitando la congestión en la red: tamaños de ventana
- jogofus
- 28 jul 2024
- 4 Min. de lectura
TCP juega un papel fundamental en las conexiones de red, tanto locales como en Internet.
TCP (Transmission Control Protocol, por sus siglas en inglés) es el protocolo más utilizado entre distintos dispositivos a través de la red, manteniendo la conexión entre los dispositivos (emisor y receptor) durante toda la comunicación.

TCP opera en la capa 4 del modelo OSI, en la capa de transporte, descomponiendo los datos en paquetes y reenviandolos a la capa 2 (capa de red).
Funcionamiento de TCP: three-way handshake
El protocolo TCP está orientado a la conexión. Esto significa que, antes de enviar información, se debe generar una conexión entre emisor y receptor. ¿Cómo? Con el famoso "apretón de manos".
-Vale, creo que ninguno de por aquí lo llama así, pero es la traducción al español.
Para iniciar la conexión entre emisor y receptor (cliente y servidor) se realiza un proceso de 3 vías, conocido como three-way handshake, en el que primero se envía -desde el cliente, que inicia la conexión- un segmento TCP con el flag SYN activado, conteniendo un número de secuencia inicial (ISN). El receptor, entonces, recibe dicho SYN y responde con un segmento con el flag SYN y el ACK activados: el famoso SYN-ACK. Este segmento es el ISN del cliente + 1. A su vez, el servidor elige su propio ISN. Para finalizar este proceso y comenzar la comunicación, el emisor envía un segmento TCP con el flag ACK, siendo el ISN del servidor + 1.
De esta forma, garantizamos que la conexión entre cliente-servidor se establece correctamente.

Diferencias entre TCP y UDP
Las diferencias entre ambos protocolos son las siguientes:
TCP es orientado a conexión, mientras que UDP no.
En TCP la entrega del paquete está garantizada.
En TCP, si el paquete no llega a su destino puede retransmitirlo.
Al necesitar la comprobación constante (ACK) de la recepción de paquetes por parte del servidor, es más lenta en TCP que en UDP, pero mucho más fiable.

Congestiones en la red: qué son y como solventarlas
La congestión ocurre en sistemas de comunicación de datos cuando el volumen de tráfico inyectado en la red se aproxima o supera la capacidad de procesamiento de sus componentes (como routers, switches y enlaces). Se caracteriza por un aumento significativo en la latencia, pérdida de paquetes y reducción del throughput efectivo. Este estado compromete la calidad de servicio (QoS) y puede provocar una degradación en cascada del rendimiento de la red si no se gestiona adecuadamente. La congestión es un problema fundamental en el diseño y operación de redes, abordado mediante diversos mecanismos de control tanto a nivel de protocolo (como los algoritmos de control de congestión en TCP) como a nivel de infraestructura (por ejemplo, técnicas de QoS y balanceo de carga).
Para ello, disponemos de un mecanismo que nació en 1974, de la mano de Vinton Cerf y Robert Kahn, y añadido en la RFC 793 en septiembre de 1981: el tamaño de ventana.
El tamaño de ventana define la cantidad de datos que pueden estar en tránsito en un momento dado entre dos puntos de conexión, siendo la cantidad de bytes que el destino puede recibir y procesar al mismo tiempo antes de enviar un ACK.

Suponiendo un MTU de 1500 bytes, tendríamos un MSS de 1460 bytes.
MSS = MTU - (Tamaño cabecera IP + Tamaño cabecera TCP)Para hacerlo más sencillo, vamos a suponer un MSS de 1500.
En el three-way handshake, el servidor B habrá enviado su tamaño de ventana. Según el ejemplo superior, el tamaño de ventana es 10000. Esto significa que podrá procesar 10000 bytes sin necesidad de enviar un ACK.
El cliente A envia un primer segmento con numero de secuencia 1, de 1500 bytes. Luego envía otro de mismo tamaño pero con numero de secuencia 1501. El servidor entonces envía un ACK con numero de secuencia 3000. Posteriormente, el cliente mandará otros 1500 bytes con número de secuencia 3001.
Como se ve en la captura, se ven los paquetes SYN, SYN-ACK y ACK, con sus respectivos tamaños de ventana y el MSS utilizado. Como estamos en una red ethernet estandar, el MTU es 1500.
Si vemos en los paquetes posteriores, veremos como van variando los numeros de secuencia y los ACK.
Cálculo de tamaño de ventana óptimo
Para calcular el tamaño óptimo de ventana necesitaremos lo siguiente:
Producto de retardo de ancho de banda (BDP)
El BDP es el producto del ancho de banda y el tiempo de ida y vuelta (RTT) de la red.
Tamaño máximo del segmento (MSS).
Tamaño óptimo de ventana = BDP / MSS (expresado en bytes)Como podemos ver en la captura, tenemos un RTT de 0.00005 segundos, algo más que despreciable.
Pero volviendo a la fórmula, en un enlace de 1gbps con un retardo de 0.00005 segundos, nuestro BDP sería de 6250. Si aplicamos la fórmula del tamaño de ventana, nos salen 42 bytes (redondeando siempre a la baja). Si multiplicamos de nuevo por el MSS, nos dará el tamaño de ventana óptimo, siendo 61320. Como podemos ver, estamos usando un tamaño de ventana mayor (porque así lo anuncia el servidor, porque es capaz de "soportarlo"), por lo que tendremos una red optimizada.
Luego existe el concepto de tamaño de ventana deslizante, que permite negociar constantemente el tamaño de ventana según las necesidades del cliente-servidor.
Espero que os haya servido de ayuda.
¡Hasta pronto!







Comentarios