1. El protocol TCP a fons


1.1. Protocol de Control de la Transmissió (repàs)(Aquest apartat no es penja)
1.2. Timeouts i retransmissions
1.3. Resposta a la congestió
1.4. Finestres menguants
1.5. Millores de TCP i rendiment



1.2.TIMEOUTS I RETRANSMISSIONS

()

La idea principal del TCP radica en las variables de timeout i en los algoritmos de retransmisiones que se usan en sus comunicaciones. Este protocolo es diferente de los otros protocolos de redes debido a su origen. TCP es un protocolo creado para la Internet, y es por ello que a de tener unas características muy especiales. Estas características se deben principalmente a que Internet es un medio muy hostil, en donde puede haber pérdidas de paquetes, maquinas caídas, congestiones u otros impedimentos que no dejen llegar los paquetes a su destino.

La idea del timeout es algo muy sencillo: TCP envía un timer cada vez que envía un segmento y si no recibe confirmación de que ese segmento a llegado a su destino, antes de que ese timer se agote, se vuelve a enviar el mismo segmento. Si por el contrario se recibe la confirmación de que el segmento a llegado con éxito antes de que se acabe su timer, se pasa a enviar el siguiente segmento.

Pero cómo calcular que timeout se ha de aplicar a cada comunicación? De esto se encarga un algoritmo de retransmisión adaptativo. Esto quiere decir que TCP ajusta constantemente el valor del timeout en función del feedback que obtiene de sus comunicaciones. Este feedback se hace para cada conexión que se establece, de modo que según el estado de cada conexión, el timeout aplicado a esta cambiará. Para crear el valor de este timeout, se calcula cual es la diferencia de tiempo entre el momento en que se envía un segmento, y el momento en que recibe su confirmación (ACK). A este valor se le llamará roundtrip (RTT --> Round Trip Time). A medida que la comunicación vaya sucediendo, este valor podrá ir cambiando según cómo se encuentre la red en ese momento. Este cambio dinámico se consigue haciendo una media ponderada de los diferentes RTT que se van obteniendo. Así, si una comunicación comienza a perder paquetes (no recibe confirmación por parte del receptor), se irá incrementando el RTT para ver si es un problema de congestión de la red.

Para obtener el RTT se empezó usando una sencilla formula:

En esta formula, alfa esta comprendida entre cero y uno. Así, según el valor que le diéramos a alfa, el RTT calculado cambiaría más o menos según los RTT puntuales de la comunicación. Con un alfa cercano a uno el RTTcalculado sería poco propenso a los nuevos cambios, mientras que con un alfa cercano a cero, cambiaría mucho con los nuevos RTT recibidos.

Pero una vez tenemos el RTT hay que calcular el timeout, y para ello tenemos la formula:

en donde Beta ha de ser mayor que uno. En este caso si Beta es cercano a uno, se detectaran rápidamente las perdidas de paquetes, pero por el contrario se retransmitirían muchos paquetes (por el reenvío) y se ampliaría rápidamente el ancho de banda usado.

Cómo calcular las muestras de RTT?

Hasta aquí parece todo muy sencillo, pero es ahora cuando empiezan los problemas. Como ya se ha comentado en cursos anteriores, TCP utiliza un esquema de confirmación acumulativo de flujo de datos, no de datagramas específicos, lo que nos lleva al problema de la ambigüedad de la confirmación. Este problema se da cuando el emisor no ha obtenido confirmación de la recepción de un paquete, y lo vuelve a enviar. Entonces si que recibe la confirmación del receptor, pero no sabe si es la confirmación al primer paquete que ha enviado, o del segundo, que es una copia exacta del primero. Cualquiera de las dos suposiciones que puede tomar, son perjudiciales para la comunicación:

Así pues, cual es la medida que debemos tomar ante un caso como el de la ambiguidad de la confirmación? La respuesta es el algoritmo de Karn.

ALGORITMO DE KARN

El algoritmo de Karn se rige por una regla muy sencilla: solo permite actualizar el RTT con las confirmaciones no ambiguas. Esto nos permitirá poder superar con éxito el problema arriba expuesto, pero nos generará otro de nuevo. Si siempre hay confirmaciones ambiguas, el RTT no se actualizará y seguiremos teniendo problemas de timers. Así pues el algoritmo de Karn se ha de combinar con una estrategia de backoff del timeout. Con esta estrategia lo que se hace es incrementar el timeout con cada retransmisión que se efectúe (llegando a un máximo de 120 segundos). Una vez le llega al emisor la confirmación de su paquete, este vuelve a poner el timer a su estado original. Si el timeout alcanza esta cifra máxima de 120 segundos, ya no aumentará y se seguirá usando hasta que el paquete llegue con éxito. Así pues, el nuevo timeout se calculará con la fórmula:

Así pues, resumiendo, podemos decir que el algoritmo de Karn combina una estimación usando únicamente las confirmaciones no ambiguas y un Backoff del timeout cuadrático.

A titulo de nota, se ha de decir que este mecanismo varía según la implementación del sistema operativo.

()

Todos los mecanismos explicados hasta ahora parten de la base de considerar una variancia en los retrasos pequeña y constante, pero esto no es fiel a la realidad, ya que pueden darse grandes variaciones.

Según aumenta la carga de la red, se produce un aumento del RTT, pero lo que es más "grave" es que la variancia Õ del RTT crece mucho más!!, siguiendo una proporción 1 / (1-L) siendo L la carga de la red 0<=L<=1

Con estas nuevas consideraciones, es facil observar que la adaptación RTO = ß x RTT, con ß=2 que habíamos explicado hasta ahora no es suficiente en muchos casos. Se ha podido constatar que a partir de una carga de red del 30%, dicha adaptación deja de funcionar correctamente, ya que al presuponer que las confirmaciones llegaran y una vez pasado el timeout, se retransmite el segmento, lo que aumenta aún más la carga de la red y se contribuye a aumentar la congestión de la red.

Para evitar estos problemas se ha tenido en cuenta la estimación tanto de la variancia como del RTT en la nueva especificación de TCP. Donde la estimación de la variancia pasará ejercer de ß, consiguiendo así que el throughtput de TCP aumente de forma considerable.

ALGORITMO DE JACOBSON

Para calcular un tiempo de timeout que se adapte a condiciones de carga alta, se aprovecha la estimación de la variancia del RTT:[[BR]]

Veamos dos posibles situaciones:

Ahora podemos ver dos gráficas comparativas de funcionamiento entre el algoritmo original y usando el algoritmo de Jacobson:[[BR]]


Como se puede ver en las gráficas, mientras que el algoritmo original no es capaz de dar una respuesta rápida y al RTO le cuesta tanto subir como luego bajar. Mediante el algoritmo de Jacobson se detecta rápidamente el cambio y el RTO se incrementa y disminuye a tiempo, consiguiendo una mejora de eficiencia considerable.
Hay que hacer notar que si el RTO es menor que el RTT se produce una retransmisión innecesaria.

TEMPORIZADOR DE KEEPALIVE

Pueden existir conexiones TCP en las cuales no se esten intercambiando datos (idle), es decir que no circule ni un sólo segmento. Si esto lo unimos al hecho de que ubna conexión puede estar abierta durante meses, nos encontramos ante un problema: ¿Como podemos saber que la conexión sigue viva? Es decir, que durante el tiempo que la conexión ha estado abierta sin ningún intercambio de segmentos, pueden haberse producido cambios de routers, pueden haberse producido cambios de lineas telefónicas, etc.
En definitiva, no podemos saber si la conexión TCP sigue viva, si no existe por cambios en la red o si el otro extremo la ha dado por finalizada y no nos ha llegado la notificación, con el consiguiente riesgo de mantener esa conexión como ficticiamente viva para siempre (no hay mecanismos de polling).

Así que, aunque son las aplicaciones las encargadas de detectar cuál es el estado del otro extremo de la conexión. Algunas implementaciones de TCP incorporan un sistema para poder hacer esta detección, un temporizador de keepalive.

En realidad, como ya hemos indicado, los keepalive no son parte de la especificación de TCP, porque presentan algunos problemas:

Por otro lado, los keepalive son muy eficientes cuando los cleintes no están siempre encendidos, como PCs, portátiles, PDAs. Los cuales pueden "apagarse" dejando conexiones abiertas que no se cerrarían jamás. Gracias a los keepalive estas conexiones serán cerradas.

FUNCIONAMIENTO DEL KEEPALIVE

Si el servidor detecta que una conexión ha estado 2 horas abierta sin ningún tipo de actividad, hace una prueba de la conexión, es decir, envía un segmento de sondeo. Se pueden dar 4 diferentes casos:

Fuentes:



índex


1.3. RESPOSTA A LA CONGESTIÓ

(DanielMartín)

TCP no només considera endarreriments entre els punts finals de la connexió: també reacciona a la congestió de la internet.

Congestió: Condició d'endarreriments importants causada per una sobrecàrrega de datagrames en un o més elements de commutació (p.e. routers).

Si hi ha congestió, l'endarreriment augmenta i els datagrames fan cua al router mentre aquest els pugui mantenir -tenen memòria limitada-.

Des de TCP només és possible apreciar els endarreriments. S'ignoren totalment les causes.

Si quan hi ha congestió tothom reenvia els segments sense confirmació es produiria encara més congestió, fins al col·lapse!!

TCP pot ajudar a disminuir la congestió aplicant mecanismes i estratègies d'enviament de dades que disminueixin la probabilitat de sobrecàrrega de la xarxa i que permetin la seva recuperació.

S'ha d'anar amb molt de compte per a evitar detectar com congestions variacions grans del RTT que han estat degudes a un altre motiu, ja que a Internet hi ha variacions molt grans en els RTT.

Si hi ha congestió no és bona idea enviar un flux de dades massa gran (la probabilitat de que no arribi serà proporcional a la mida).

A més de la finestra d'emissió, TCP ha de mantenir una finestra de congestió per a reduir el flux de dades per sota de la finestra lliscant quan hi ha congestió.

Inicialment, i si no hi ha congestió, el tamany d'aquestes dues finestres és el mateix. Només es podran enviar dades de la finestra permesa:



TCP assumeix que la pèrdua de datagrames és causada per congestió.

L'estàndard de TCP recomana tres tècniques molt fàcils d'implementar:

S'han anat afegint modificacions i altres algorismes per a evitar la congestió:

CUES

Encara que les capes de protocols siguin independents les unes de les altres, els comportaments d'uns protocols afecten d'altres en molts casos.

Pel disseny de nous mecanismes en un protocol, tots els altres protocols de la resta de capes han de ser reconsiderats també!!

La interacció més important entre IP i TCP és deguda a la gestió de les cues d'IP.

Un router tria el camí que ha de seguir un datagrama segons els mecanismes que hem anat veient. Mentres un datagrama és processat, la resta de datagrames que arriben esperen fent "cua".

Donat que la memòria dels routers no és infinita, caldrà una política de gestió de cues específica per a determinar què es fa si arriben més datagrames dels que caben a la cua (quins es descarten).

Les polítiques més habituals són:

Fonts:

(/ DanielMartín)

(DavidSánchez)





Fonts:
Trasparències de l'assigantura
Cites:
1 ==> Pàgina 38 de les trasparències.
2 ==> Pàgina 42 de les trasparències.
3 ==> Pàgina 47 de les trasparències.
.

()


()


()



()



índex


1.4. Finestres menguants


()

IMPLEMENTACIÓ DE LES FINESTRES EN TCP

Per tal de sincronitzar l'enviament de paquets entre emisor i receptor TCP utilitza les anomenades sliding windows. Aquestes permeten una bona optimització del thorughput i a més ofreixen la possibilitat d'incrementar o decrementar la mida de la finestra per tal de donar resposta a la congestió. TCP però ha de permetre un serie de funcionalitats afegides a la sliding window per tal de que no es produeixin erros



()

TIMER DE PERSISTÈNCIA

Hi ha situacions en les que la connexió es queda parada durant molta estona i no es vol que aquesta es perdi. Per evitar que algun dels dos extrems es trobi en situació de deadlock (ie: cregui que l'altre extrem està viu quan en realment està mort) s'envia un segment buit i s'espera a que el receptor contesti amb un ACK. D'aquesta manera si el receptor contesta sabem que la connexió segueix oberta.

Aquest segment s'envia utilitzant un backof exponencial de 1,5 segons on 5 és el mínim i 60 és el màxim.

SÍNDROME DE LA FINESTRA TONTA (Silly Window syndrome)

El síndrome de la finestra tonta es produia en les primeres implementacions de TCP i feia que el throughput de la connexió entre un emisor i un receptor baixes dràsticament. Aquest es produeix quan l'aplicació que llegeix/escriu en el buffer de comunicació ho fa molt lentament (o byte a byte). Per ferne una petita aproximació suposarem que és el receptor el qui llegeix byte a byte

  1. En receptor envia una nunci de finestra de K bytes a l'emissor.
  2. L'emissor envia K bytes i atura els enviaments ja que no disposa de més finestra.
  3. El receptor envia un ACK dels K bytes enviat per l'emissor però com que tindrà el buffer ple l'anunci de finestra serà de 0 bytes
  4. Ara el programa llegeix 1 byte de la finestra del receptor i aquest envia una anunci de finestra de 1 byte
  5. L'emissor envia 1 byte
  6. El receptor llegeix un altre byte...



D'aquesta manera el throughput és molt dolent ja que per cada byte de dades que envia l'emissor hi ha 20 bytes de capçaleres TCP + 20 bytes de capçalers IP.

Per tal d'evitar-hi s'implementen una serie d'heuristiques orientades a evitar que s'enviin dades entre l'emissor i el receptor fins que la mida de finestra no sigui prou gran. Aquestes heurístiques s'implementaran tant en l'emissor com en el receptor ja que no em d'oblidar que una connexió TCP és full duplex i per tant consta d'un emisor i un receptor en cada extrem de la connexió

()
==== HEURÍSTIQUES DE RECPTOR === Aquestes heurístiques s'implementaran al receptor de cadascun dels extrems d'una connexió. Una primera aproximiació podria ser evitar que es faci una anunci de finestra (per part del receptor) fin que la finestra tingui una mida mínima. Aquesta mida mínima es calcularà de la següent manera:


Una segona tècnica aplicable al receptor és la de no enviar confirmacions fins de rebuda de paquets fins que la mida de la finestra no sigui suficientment gran. De fet l'estandard TCP (RFC793) recomana aquesta tènica. Tot i així aquesta tècnica te certs avantatges i inconvenients:

()

HEURÍSTIQUES D'EMISSOR

CLUMPING

ALGORITMO DE NAGLE

índex


()

1.5. MEJORAS DE TCP Y RENDIMIENTO

MEJORAS DE TCP

  1. Redes con ancho de banda y RTT grandes

RENDIMIENTO

El throughput del protocolo se mide como:

Ejemplo sobre una red Ethernet a 10Mb:

Campo

Datos

ACK

Preamble Ethernet

8

8

Direcciones Ethernet

12

12

Campo tipo Ethernet

2

2

Cabeceras IP y TCP1

40

40

Datos usuario

1460

0

Padding Ethernet2

0

6

CRC Ethernet

4

4

Espacio entre paquetes (9,6us)3

12

12

Totales

1538

84

1 :Sin opciones
2 :Tamaño minimo para aseguridad el correcto funcionamiento de CSMA/CD
3 :Tiempo de espera para que un usuario no monopolice el medio compartido de la red Ethernet.