Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ Control de congestión – El control de flujo permite al receptor controlar el ritmo de envío del transmisor en función de sus recursos (buffer de recepción). Cumple su cometido si ambos están en la misma red. – Si NO, los datagramas deben atravesar múltiples redes y uno o más routers con sus recursos (buffers) más o menos limitados. ¡¡Los routers también pueden ver agotado el espacio en sus buffers!!. ¡Los routers SOLO tienen un módulo IP y un módulo de protocolo de encaminamiento, NO tienen un módulo TCP (TCP es un protocolo extremo a extremo, y los dos extremos son las aplicaciones que residen en los hosts)!. Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ Control de congestión – Podría haber zonas congestionadas, con un router con los buffers muy llenos. A la larga, el control de flujo acomodaría el ritmo de envío a lo que permitiese la zona más congestionada, pero en el transitorio podrían perderse datagramas (time-outs, retransmisiones, etc) – Hay que controlar el flujo de envío del transmisor a Internet para reducir el ritmo cuando ésta está próxima a la congestión: Control de congestión. – Para llevarlo a cabo, primero hay que averiguar a qué ritmo podemos enviar datos a Internet: algorítmo slowstart. Cuando el ritmo comienza a ser alto para la situación de la red, hay que hacer actuar a un algorítmo de control de congestión: congestion avoidance. Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ Slow-start – El módulo TCP transmisor mantiene una nueva ventana: la de congestión (cwnd). Control impuesto por el transmisor (el de flujo era impuesto por el receptor). – Regla de transmisión: el receptor envía un número de segmentos igual al MINIMO de lo indicado por la ventana anunciada por el receptor y lo indicado por la ventana de congestión. Gestión de cwnd: _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ • Inicio de la conexión: UN segmento de tamaño máximo igual al anunciado por el receptor. La primera transmisión será pues de 1 segmento: • Valor inicial de cwnd: 1 segmento (en realidad 1xMSS bytes). Departamento Arquitectura Computadores UPC © J.C. Cruellas Juan Carlos Cruellas Ibarz. Grupo de Aplicaciones Telemáticas 1 Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ Slow-start _________________________________________ • Cuando recibe el ack correspondiente, cwnd se incrementa para permitir 2 segmentos (cwnd=2xMSS) (1+1). Si la ventana ofrecida es mayor o igual, el transmisor envía 2 segmentos. • Cada vez que recibe un ack, el transmisor incrementa en uno el número de segmentos transmitidos (incrementa la ventana de congestión). _________________________________________ _________________________________________ _________________________________________ ________________________________________ – Slow-start impone un ritmo inicial lento de envío de datos a la red, ritmo que se incrementa muy rápidamente si las redes lo permiten. – Un parámetro: Round-Trip -Time, período que va desde el momento en que se envía un segmento y aquel en el que se recibe su ack. Departamento Arquitectura Computadores UPC Grupo de Aplicaciones Telemáticas © J.C. Cruellas _________________________________________ Slow-start _________________________________________ _________________________________________ _________________________________________ _________________________________________ D D ato Da ato s Da tos s to s Da Da tos to s ________________________________________ ack ack ack ack ack ack ack Da to s TCP rec. TCP trans. Cwn: 1 Cwn: 2 Cwn: 5 Cwn: 3 Cwn: 4 Cwn: 6 Cwn: 7 Cwn: 8 Departamento Arquitectura Computadores UPC © J.C. Cruellas Grupo de Aplicaciones Telemáticas _________________________________________ Slow-start _________________________________________ _________________________________________ cwnd (en segmentos) _________________________________________ 16 _________________________________________ ________________________________________ 8 4 2 (RTT) Departamento Arquitectura Computadores UPC © J.C. Cruellas Juan Carlos Cruellas Ibarz. Grupo de Aplicaciones Telemáticas 2 Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ Congestion avoidance _________________________________________ – Suposición de partida: sólo el 1% de los datagramas que se pierden en Internet (es decir, que deben ser retransmitidos) lo son por sufrir alteraciones en sus contenidos. La inmensa mayoría de las pérdidas son provocadas por la congestión de determinadas redes. – Principios de actuación: _________________________________________ _________________________________________ _________________________________________ ________________________________________ • Cuando comienza a transmitir datos, un módulo TCP inicializa cwnd a 1 y sigue los dictados de Slow-Start. El ritmo crece exponencialmente por el incremento de cwnd en 1 por ack llegado (zona de Slow-Start -SS). • TCP sigue transmitiendo según las pautas de SS hasta que detecta congestión (se produce la primera retransmisión por time-out). Departamento Arquitectura Computadores UPC © J.C. Cruellas Grupo de Aplicaciones Telemáticas _________________________________________ Congestion avoidance _________________________________________ • Entonces se baja a nuevamente la cwnd a 1 y se vuelve a actuar según SS (incremento de cwnd en una unidad por ack recogido) • Cuando el ritmo de transmisión llega a un cierto umbral, se cambia a un crecimiento lineal del mismo, para evitar enviar demasiados datagramas a las redes (zona de Congestion Avoidance -CA) y congestionarlas. • Al mismo tiempo, si en algún momento el transmisor retransmite un segmento por time-out, se reinicializa el valor de la ventana cwnd a 1 segmento y comienza a transmitirse según SS partiendo de la situación inicial. Se hace así para disminuir drásticamente el ritmo en cuanto se detecta congestión. Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ Congestion avoidance _________________________________________ _________________________________________ _________________________________________ cwnd (en segmentos) _________________________________________ Congestion Avoidance ________________________________________ Slow-Start Congestión! t Departamento Arquitectura Computadores UPC © J.C. Cruellas Juan Carlos Cruellas Ibarz. Grupo de Aplicaciones Telemáticas 3 Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ Congestion avoidance en marcha _________________________________________ _________________________________________ • Fundamentos: – Se gestionan tres variables (todas en num. de bytes): • cwnd: ventana de congestión. • ssthresh: umbral de tamaño slow-start. Fija umbral a partir del cual se deja SS y se pasa a CA. • awnd: ventana anunciada por receptor. _________________________________________ _________________________________________ ________________________________________ – Algorítmo combinado control de flujo y de congestión: • Inicio: cwnd = MSS (1 segmento) ; ssthresh = 65535 bytes • Transmisor NUNCA envía más segmentos que el mínimo de cwnd y la ventana anunciada por el receptor. A ese mínimo le llamaremos ventana de transmisión actual (vta = min(cwnd,awnd)) Departamento Arquitectura Computadores UPC © J.C. Cruellas Grupo de Aplicaciones Telemáticas _________________________________________ Congestion avoidance en marcha • SI hay congestión (time-out de datos transmitidos O ack duplicados) – ssthresh = max(1/2 vta,2xMSS).Mitad de ventana de transmisión actual (2 segmentos como mínimo). – Y si la congestión se detecta por un time-out, cwnd=1 • SI llega un ACK – SI cwnd <= ssthresh ( se está en fase Slow Start -SS) cwnd=cwnd+MSS – SINO (se está en fase Congestion Avoidance -CA) cwnd = cwnd + (MSSxMSS)/cwnd • NOTA: implementaciones de algunas versiones de BSD en la fase CA hacen cwnd = cwnd + (MSSxMSS)/cwnd + MSS/8 Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ Congestion avoidance en marcha _________________________________________ • Comentarios: – ssthresh se inicializa a un valor alto. Cuando se detecta congestión se baja a la mitad de la ventana ACTUAL (así se comienza el control de congestión antes). – Cuando llega un ack, el comportamiento es distinto si se está en SS o en CA. El tamaño de ventana es mayor en el primer caso: la CA ralentiza el ritmo de envío de segmentos a Internet. Departamento Arquitectura Computadores UPC _________________________________________ © J.C. Cruellas Juan Carlos Cruellas Ibarz. _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas 4 Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ Congestion avoidance cwnd ssthresh 256 65535 _________________________________________ VALORES INICIALES - MSS=256;cwnd=256;ssthres=65535 _________________________________________ 256 512 2 Time-out SYN: ssthresh=512 (2MSS) _________________________________________ 512 768 885 512 512 4 7 SS: cwnd = 2 x 256 _________________________________________ 512 512 512 10 991 1089 SS: cwnd = 3 x 256 = 768 ________________________________________ CA (cwnd>ssthresh): cwnd = cwnd+(2562/885)+256/8 = 885 12 14 2 3 4 SYN Time out SYN NS:1-256 Ack 257 TCP 1 5 6 7 8 9 11 10 12 13 14 Departamento Arquitectura Computadores Ack 1281 NS:1537-1792 Ack 1025 NS:1281-1536 Ack 769 Grupo de Aplicaciones Telemáticas © J.C. Cruellas UPC NS:1025-1280 Ack 513 NS:769-1024 NS:513-768 NS:257-512 TCP Congestion avoidance: cwnd, ssthresh y números de secuencia _________________________________________ _________________________________________ _________________________________________ valor de cwnd _________________________________________ _________________________________________ Valor de ssthresh ________________________________________ CA Ventana anunciada > cwnd SS SS SS ¡Retransmisión por time-out! t Numeros de secuencia Departamento Arquitectura Computadores UPC © J.C. Cruellas Grupo de Aplicaciones Telemáticas _________________________________________ “Time out” y retransmisión en TCP • Envío de ack para notificar recepción correcta de segmentos: mecanismo para conseguir fiabilidad. • Para contrarrestar la pérdida de los segmentos y de los ack, se implanta un mecanismo de “time out” y retransmisión. _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ – TCP activa un temporizador cuando envía un segmento. Si al expirar el período marcado no ha recibido un ack, retransmite el segmento. – Elementos a fijar: • Cómo se determina el valor del “time-out” • Frecuencia de retransmisión. Departamento Arquitectura Computadores UPC © J.C. Cruellas Juan Carlos Cruellas Ibarz. Grupo de Aplicaciones Telemáticas 5 Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ “Time out” y retransmisión en TCP _________________________________________ • Política de retransmisión: – Fijar un valor inicial para el “timeout” de retransmisión (notación: RTO), a partir de valores medidos de RTT (notación: M). – Si se da un “timeout”, el nuevo RTO se dobla (“exponential backoff”): eso ralentiza las retransmisiones. – Cada nuevo “timeout” dobla el valor del RTO. Así hasta llegar a un límite o hasta que TCP decide abandonar la conexión. Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ “Time out” y retransmisión en TCP • Notación. Retransmission Timeout: RTO. • Para calcular el valor del RTO inicial,se mide el valor del RTT (M), y se calcula un estimador a partir de lo medido (R) que interviene en el valor del nuevo RTO. Cada vez que se realice una nueva medición del RTT, se actualizará el valor de R y por tanto de RTO. • Medición del RTT: tiempo que pasa desde el momento en que se envía un segmento que contiene un byte con un número de secuencia determinado y el instante en el que se recibe el ack correspondiente a dicho número (entre otros, puesto que en TCP el ack es de grupo). Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ “Time out” y retransmisión en TCP • Cálculo del estimador (notación: R) – Estimador básico (especificado como ejemplo en RFC 793): • R <--- alfa * R + (1 -alfa) * M (alfa 0.9 aproximadamente). • Cada vez que se realiza una nueva medición de RTT (M), se actualiza el valor del estimador: el 90% del nuevo valor corresponde al valor anterior, y el 10% corresponde a la aportación del nuevo valor medido. _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ • Cálculo del valor de “timeout” (RTO). – Ejemplo simple: • RTO = beta * R Departamento Arquitectura Computadores UPC © J.C. Cruellas Juan Carlos Cruellas Ibarz. Grupo de Aplicaciones Telemáticas 6 Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ “Timeout” y retransmisión en TCP • Factor beta: para tener en cuenta la variación de M (recomendado en RFC, alrededor de 2). • Problema: cuando las redes están muy cargadas, las variaciones de M pueden ser muy grandes (un factor de hasta 16), y el valor de beta no se adecúa a lo que sucede. El tiempo de retransmisión entonces queda demasiado pequeño: en una situación de carga se retransmitirán datagramas no perdidos (algunos que todavía están en tránsito todavía hacia su destino; otros cuyos acks tardan más en llegar), lo cual no hace otra cosa que agravar la situación. • Necesarios nuevos algoritmos de cálculo de RTO. Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ “Timeout” y retransmisión en TCP • Cálculo del RTO modificado (Van Jacobson) – RTO se calcula teniendo en cuenta la media y la desviación media de RTT. • A: estimador derivado a partir de la media de RTT. • D: estimador derivado a partir de la desviación media. • Expresiones: – Err = M - A (diferencia entre lo medido y lo que valía el estimador de la media) – A <-- A + g Err (el nuevo valor del estimador de la media se iguala al valor anterior más el producto de la diferencia anterior y un factor de ganancia (0.125) Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ “Timeout” y retransmisión en TCP – D <-- D + h(|Err| -D) El nuevo valor del estimador de la desviación media se obtiene de la suma de su valor anterior y el resultado de multiplicar la diferencia entre Err y el estimador anterior por un factor de ganancia (0.25). De esa forma, si Err tiene un valor muy alto (M ha cambiado mucho respecto a A), D ve alterado notablemente su valor. – RTO <-- A + 4 D. • Con este algoritmo, cuando se esté en situación de congestion, los valores de M crecerán, crecerá el valor de |Err| y además de actualizar la A, D también cambiará notablemente, aumentando RTO e incrementando el valor del “timeout” de retransmisión. Departamento Arquitectura Computadores UPC © J.C. Cruellas Juan Carlos Cruellas Ibarz. _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas 7 Sistemas de Transportes de Datos (STD) Tema III: UDP Y TCP (Entrega 3) _________________________________________ “Timeout” y retransmisión en TCP _________________________________________ • Un problema final: – Cuando llega un ack de un segmento que fue retransmitido, no se está en condiciones de afirmar si lo que llega es el ack del primero o de la retransmisión (ambigüedad de retransmisión). – En estas condiciones, no puede medirse el valor del RTT (M) y en consecuencia NO DEBE ACTUALIZARSE EL VALOR DEL RTO (Algoritmo de Karn). El RTO utilizado será el que hay en este momento. Departamento Arquitectura Computadores UPC © J.C. Cruellas _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas _________________________________________ “Timeout” y retransmisión en TCP – Una nueva medición válida de RTT (M), es decir, una realizada sobre un segmento que no ha tenido que ser retransmitido, permitirá calcular un nuevo valor de RTO. – ¿Cada cuanto se mide el RTT?. Dependiente de la implementación. Departamento Arquitectura Computadores UPC © J.C. Cruellas Juan Carlos Cruellas Ibarz. _________________________________________ _________________________________________ _________________________________________ _________________________________________ ________________________________________ Grupo de Aplicaciones Telemáticas 8