TCP timeout and retransmission(libro TCP Illustrated vol 1, Stevens)

Iniciado por eternoneofito, 21 Agosto 2011, 09:35 AM

0 Miembros y 1 Visitante están viendo este tema.

eternoneofito

Buenas, resulta que estoy leyendo el gran libro "TCP Illustrated" (exelente por cierto), y llegue hasta el capitulo 21 donde me quede con muchisimas dudas. Lo que pasa es que no tengo un buen nivel de ingles, de hecho cuando empece no sabia casi nada... aprendi durante el transcurso de la lectura.

Estos son algunos de los conceptos que no me quedaron claros(los escribo en ingles):
Slow start
Congestion avoidance algorithm
Fast retransmit and fast recovery

Las cosas que no entendi bien fueron basicamente como se determinan los distintos "estimadores"(smoothed RTT estimator and smoothed mean deviation estimator), y como maneja TCP las "variables" cwnd(congestion window) y ssthresh(slow start threshold size).
Si alguien me pudiera brindar su entendimiento de estos conceptos(en castellano por favor  ;D) se lo agradeceria muchisimo. Aunque bueno se que mi pregunta tambien es un poco dificil de contestar, no porque no vayan a saberlo, sino porque es un poco larga  ;D.

madpitbull_99

#1
Intentaré explicarlo lo mejor que pueda y que sea muy breve, si al final sigues teniendo dudas, pregunta.

- Slow-start. Para no congestionar la red, se empieza enviando los paquetes por orden de tamaño, desde los pequeños a los más grandes, hasta que se llegue al límite, en cuyo caso se empezará a descartar paquetes. Simplemente trata de buscar una velocidad adecuada para enviar los paquetes.

- Congestion avoidance algorithm. Es la base básica para evitar las congestiones. En realidad es un conjunto de algoritmos que intenta remediar las congestiones, como el TCP Vegas, TCP New Reno, Cubic, Hybla, etc.

- Fast retransmit and fast recovery. Se podría decir que es una de las muchas mejoras que se ha aplicado, intenta reducir el tiempo que el cliente espera para enviar los paquetes "perdidos"

CitarInicialmente la cwnd será de 1 o 2 segmentos de datos. En cada ronda, a medida que se reciban los ACK, cwnd irá aumentando en igual número de ACK's que hayan llegado (1,2,4,8,16,...). Esta ventana de segmentos aumentará indefinidamente hasta que se alcance el umbral ssthresh que haya sido programado (64 k en el caso más extremo al ser el límite de ventana que impone TCP). Una vez llegado a su umbral, slow-start dejará de ser usado y la ventana cwnd dejará de crecer exponencialmente, se pasará a otro algoritmo más conservador, orientado a mantenerse sin congestionar la red, y que hará que la ventana de transmisión crezca linealmente. Si en algún punto de la comunicación se pierde algún paquete, TCP entenderá que es porque hay congestión de red, guardará el valor de cwnd como nuevo ssthresh e iniciará de nuevo el algoritmo volviendo a empezar con la ventana inicial.


De todas formas, en el libro que mencionas (dispongo de otra versión, algo más nueva - "TCP/IP Illustrated, Volume 2") a partir de la página 840 se empieza a explicar casi todo lo que preguntas, me refiero a la variable cwnd y demás.


Documentación:

_TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms.
_TCP Congestion Handling and Congestion Avoidance Algorithms .
_Slow Start and Congestion Avoidance Algorithms.
_Network congestion.
_RFC 2001 - TCP Slow Start, Congestion Avoidance, Fast Retransmit.
_A TCP Tutorial.


Siento decírtelo para toda la buena documentación está en Inglés.

Te dejo unos PDF's más (uno de ellos está en Castellano) enlazados a mi Google Docs:

_https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0Bz-v_6NnBKKdOWJlMzUzYWItMGZmMS00ZjYwLTgzNTgtZGU5MWZkYTEwNDdm&hl=en_US
_https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0Bz-v_6NnBKKdYzZhNTdiZGItNDVkYi00NDNhLTk3MDctMzk2YzhkZWM5MjAx&hl=en_US
_https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0Bz-v_6NnBKKdZDcwNTcyNDAtNDZhYi00M2FhLWJmZDgtYzczN2Y4M2VjMDBi&hl=en_US

La mayoría son bastante técnicos, llegando a explicar en profundidad los distintos algoritmos.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

eternoneofito

Uh... genial, gracias por la info y por responder a mis dudas.

En cuantos a los algoritmos, fast retransmit and fast recovery, hay un resumen final que dice los siguiente:

This algorithms are usually implemented together as follows:
1)When the third duplicate ACK arrives, set ssthresh to one-half of the minimum of the current congestion window (cwnd) and the reiver's advertised window.
Retransmit the missing segment.
Set cwnd to ssthresh plus 3 times the segment size.

2)Each time another duplicate ACK arrives, increment cwnd by the segment size and transmit a packet (if allowed by the new value of cwnd)

3)When the ACK arrives that acknowledges new data, set cwnd to ssthresh(the value set in step 1). This should be the ACK of the retransmission from step 1, one round-trip time after the retransmission. Additionally, this ACK should acknowledge all the intermediate segments sent between the lost packet and the receipt of the third duplicate ACK. This step is congestion avoidance, since we're slowing down to one-half the rate we were at when the packet was lost.

En el primer paso cuando se recive el tercer ACK duplicado, el umbral ssthresh se fija a la mitad de la cwnd o la ventana advertida por el receptor(segun cual sea menor). Se retransmite el segmento perdido y se fija la cwnd al valor de ssthresh mas 3 veces el tamaño del segmento.
En el paso dos se realizaria congestion avoidance.
Y en el paso tres? No entiendo que es lo que pasa, se vuelve a fijar el valor de la cwnd al del umbral ssthresh? Si no es que entendi todo mal los pasos anteriores jaja.

madpitbull_99

Citar3)When the ACK arrives that acknowledges new data, set cwnd to ssthresh(the value set in step 1). This should be the ACK of the retransmission from step 1, one round-trip time after the retransmission. Additionally, this ACK should acknowledge all the intermediate segments sent between the lost packet and the receipt of the third duplicate ACK. This step is congestion avoidance, since we're slowing down to one-half the rate we were at when the packet was lost.
El valor de cwnd será igual al valor asignado a ssthresh en el paso 1.





«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red