Full transcript
0:01Hola, hoy vamos a hablar sobre control de congestión y control de flujo en redes.
0:05Partamos hablando de congestión.
0:07Cuando hablamos de congestión, usualmente nos imaginamos un taco de automóviles y sus consecuencias:
0:12Como tiempos de espera muy largos para avanzar relativamente poco.
0:15O incapacidad para llegar de un lugar a otro a tiempo.
0:18Cuando hablamos de redes, el concepto de congestión no es tan diferente.
0:22Decimos que una red se congestiona cuando ‘intenta’ pasar más información de lo que la red soporta.
0:28Las limitaciones de la cantidad de información que puede soportar la red pueden deberse a limitaciones de memoria,
0:33capacidad del medio físico de transmisión
0:35y la velocidad a la que el sistema es capaz de procesar los segmentos.
0:38Una congestión alta ralentiza la conexión haciendo que se les peguen los juegos o los videos.
0:44Para evitar estas cosas existe el control de congestión.
0:48Antes de continuar, hagamos un pequeño paréntesis.
0:51Al principio dijimos que íbamos a hablar de control de congestión y control de flujo
0:55El control de congestión y el control de flujo no son iguales, pero en TCP trabajan juntos.
1:00A grandes rasgos, el control de congestión se encarga del tráfico de la red a través de la ventana de congestión,
1:05mientras que el control de flujo se encarga del tráfico al receptor a través de la ventana de recepción.
1:10En nuestra versión simplificada de TCP controlaremos el flujo usando control de congestión de TCP real.
1:17Por lo que nos enfocaremos en control de congestión (más adelante vamos a ver control de flujo por si acaso).
1:22En TCP control de congestión tiene 3 partes
1:24Slow Start o partida lenta.
1:27Congestion Avoidance, evitar la congestión.
1:29Y fast recovery, recuperación rápida.
1:32Antes de explicar en qué consiste cada uno de estos pasos necesitamos las siguientes definiciones:
1:37Ventana de congestión: Corresponde a la cantidad de información que dejamos pasar en un determinado momento.
1:42La ventana de congestión es lo que vamos a ir modificando para controlar la congestión.
1:46El Maximum Segment Size o MSS:
1:50Corresponde a la cantidad más grande de datos que se le permite enviar a un segmento TCP.
1:54Finalmente el Slow Start Threshold o ssthresh:
1:58Corresponde al tamaño máximo que puede tener la ventana de congestión dentro de Slow Start.
2:02Si la ventana de congestión pasa este límite, entonces pasamos a Congestion Avoidance.
2:07De esta forma, el ciclo de control de congestión se ve así:
2:12Veamos cómo funciona Slow Start:
2:14Slow Start hace que la ventana de congestión aumente en 1 MSS cada vez que un segmento recibe su ACK correspondiente.
2:22Veamos un ejemplo.
2:22Partimos con una ventana de congestión de tamaño 1 MSS.
2:26Cómo actualmente la ventana mide 1, mando un segmento, me llega el ACK,
2:30y se aumenta el tamaño de la ventana de congestión en 1, por lo que ahora esta es de tamaño 2.
2:36Como la ventana es de tamaño 2, mando 2 segmentos, me llegan 2 ACKs,
2:40así que se aumenta el tamaño de la ventana de congestión en 2, por lo que ahora esta es de tamaño 4.
2:45Si repetimos esto una vez más, nos van a llegar 4 ACKs y, por lo tanto, ahora la ventana de congestión tiene tamaño 8.
2:53Slow Start no es precisamente lento, de hecho la ventana de congestión crece de forma exponencial.
3:00Una ventana de congestión grande eventualmente va a resultar en pérdida de segmentos por congestión.
3:05Cuando ocurre un timeout por primera vez seteamos el ssthresh como la mitad del tamaño de la ventana de congestión que provocó el timeout.
3:13y bajamos el tamaño de la ventana de congestión a 1 MSS.
3:17Así, si la ventana es de tamaño 8 al ocurrir el primer timeout,
3:20vamos a quedar con un ssthresh de tamaño 4 y una ventana de tamaño 1.
3:25Luego retomamos Slow Start hasta que la ventana de congestión pase el tamaño ssthresh.
3:30Cuando esto ocurre pasamos a Congestion Avoidance.
3:34Congestion Avoidance usa una estrategia de incrementos aditivos al tamaño de la ventana de congestión (additive increase)
3:40y disminuciones multiplicativas del tamaño de la ventana (multiplicative decrease).
3:44Esto es AIMD.
3:47En este estado, cada vez que llega un ACK vamos a aumentar el tamaño de la ventana de congestión
3:51en una fracción del tamaño máximo de segmento MSS.
3:55De esta forma se aumenta el tamaño de la ventana en 1 MSS cada vez que TODA LA VENTANA llega bien.
4:01Es decir, si la ventana es de tamaño 4, deben llegar 4 ACKs para aumentar el tamaño de la ventana en 1 MSS
4:09Con esto el tamaño de la ventana aumenta de forma lineal.
4:13Si durante Congestion Avoidance ocurre un timeout volvemos a Slow Start con estas condiciones.
4:18El comportamiento de AIMD hace que la ventana de congestión se comporte de esta forma.
4:24Este gráfico se puede ver si van a ver el tráfico de la red cuando están haciendo una descarga.
4:29Finalmente, si recibimos 3 ACKs duplicados, pasamos a Fast Recovery.
4:34¿A qué nos referimos cuando hablamos de 3 ACKs duplicados? Veamos.
4:38Acá tenemos un emisor y un receptor.
4:40El emisor va a tratar de mandar 4 segmentos, pero vemos que el segundo no llega.
4:45El primer ACK llega tal como el emisor espera.
4:48Pero luego el receptor reenvía el ACK asociado al primer segmento cada vez que no llega el segundo segmento.
4:55De esta forma avisa que no le ha llegado el segundo segmento.
4:58Así, termina repitiendo 3 veces el ACK asociado al segundo segmento.
5:03Como esto pasa antes del timeout el emisor asume que hubo pérdida y pasamos a Fast Recovery.
5:08Detectar pérdidas de esta manera es conocido como Fast Retransmit.
5:13En Fast Recovery vamos a aumentar en 1 el tamaño de la ventana de congestión por cada uno de los ACKS que nos hizo entrar a este estado.
5:21Si ocurre timeout, igual que antes, volvemos a slow start.
5:25Y si se recibe un ACK distinto al ACK duplicado, se pasa a Congestion Avoidance
5:30Debemos notar que fast Recovery NO es obligatorio y, por lo tanto, no todas las implementaciones de TCP lo usan.
5:37En esta clase hemos visto:
5:39Cómo funciona control de congestión en TCP.
5:41Slow Start.
5:42Congestion Avoidance.
5:44Y Fast recovery.
5:45Cualquier duda o consulta, ¡no duden en contactar al equipo docente!