13.07.2015 Views

Retransmisiones y temporizadores en TCP - QueGrande

Retransmisiones y temporizadores en TCP - QueGrande

Retransmisiones y temporizadores en TCP - QueGrande

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Bloque III: El nivel de transporteTema 8: <strong>Retransmisiones</strong> y<strong>temporizadores</strong> <strong>en</strong> <strong>TCP</strong>


Índice• Bloque III: El nivel de transporte– Tema 8: <strong>Retransmisiones</strong> y <strong>temporizadores</strong> <strong>en</strong> <strong>TCP</strong>• <strong>Retransmisiones</strong>– Control de congestión– Algoritmo para evitar la congestión– Algoritmo de recuperación y retransmisión rápida• Temporizadores– Temporizador de persist<strong>en</strong>cia– Temporizador de keepalive• Refer<strong>en</strong>cias– Capítulo 3 de “Redes de Computadores: Un <strong>en</strong>foquedesc<strong>en</strong>d<strong>en</strong>te basdado <strong>en</strong> Internet”. James F. Kurose, KeithW. Ross. Addison Wesley, 2ª edición. 2003.– Capítulos 21, 22 y 23 de “<strong>TCP</strong>/IP Illustrated, Volume 1: TheProtocols”, W. Richard Stev<strong>en</strong>s, Addison Wesley, 1994.RC - Bloque III - Tema 82


<strong>Retransmisiones</strong> <strong>en</strong> <strong>TCP</strong>• <strong>TCP</strong> proporciona un servicio fiable sobre un protocolo no fiable(IP) Se pued<strong>en</strong> perder datos y/o ACKs.• Solución Esperar un tiempo la llegada del ACK (utilizando untemporizador) y si no se recibe, se retransmite el segm<strong>en</strong>to.• Problema: el RTT (Round Trip Time) es variable– ¿Cómo se determina el intervalo de timeout?– ¿Con qué frecu<strong>en</strong>cia se produc<strong>en</strong> retransmisiones?• Expon<strong>en</strong>tial backoff Si no se recibe el ACK laprimera retransmisión ocurrirá <strong>en</strong>tre 1 y 1’5 segundos(ticks 500 milisegundos).• Las sigui<strong>en</strong>tes retransmisiones se duplica el tiempo: 3, 6,12, 24, 48 y a partir de ahí 64 segundos.• Se finalizan las retransmisiones después de N int<strong>en</strong>tos(normalm<strong>en</strong>te, <strong>en</strong>tre 5-10 minutos).RC - Bloque III - Tema 83


Estimación del RTT• Resulta fundam<strong>en</strong>tal para la estrategia de timeout y retransmisiones de<strong>TCP</strong> el medir el RTT para la conexión, para así variar el timeout.– Problema: no hay una asignación uno-a-uno <strong>en</strong>tre segm<strong>en</strong>to yas<strong>en</strong>timi<strong>en</strong>to• Sólo se mide el RTT para un segm<strong>en</strong>to simultáneam<strong>en</strong>te.• Su confirmación puede v<strong>en</strong>ir <strong>en</strong> un ACK acumulado estimación ligeram<strong>en</strong>te superior– Se utiliza un estimador a partir de la media y la desviación típica delos retardos medidos (estimador de Jacobson).• La estimación se basa <strong>en</strong> ticks de reloj (p.e. 500 milisegundos)y no <strong>en</strong> tiempos absolutos.– Problema de ambigüedad <strong>en</strong> la retransmisión:• Al producirse una retransmisión (por timeout), es imposiblesaber si el ACK recibido es el correspondi<strong>en</strong>te al segm<strong>en</strong>tooriginal o al retransmitido.• Solución Algoritmo de Karn:• Ante el problema de ambigüedad <strong>en</strong> la retransmisión NOdeb<strong>en</strong> usarse medidas de segm<strong>en</strong>tos retransmitidos para estoscálculos.RC - Bloque III - Tema 84


Control de congestión• Dos posibilidades para “perder” paquete:– Saturación <strong>en</strong> un router– Error <strong>en</strong> el paquete (probabilidad mucho m<strong>en</strong>ordel 1%)• Se asume que cuando se cuando se pierde unpaquete es debido a que al m<strong>en</strong>os un routersaturado.• Se utilizan dos indicadores para id<strong>en</strong>tificar unproblema de congestión (pérdida de un paquete):– Ha v<strong>en</strong>cido un timeout de retransmisión– Se han recibido ACKs duplicadosRC - Bloque III - Tema 85


Control de congestión: EjemploCli<strong>en</strong>te:1111 Servidor:discard43 51ack 58894546485053ack 61456401:6657 (256) ack 15254555756ack 64015958606162646566256 bytesa la aplicaciónack 66576657:6913 (256) ack 1 (perdido)6913:7169 (256) ack 17169:7425 (256) ack 17425:7681 (256) ack 1(guardar 256 bytes)ack 6657(guardar 256 bytes)ack 66577681:7937 (256) ack 1(guardar 256 bytes)ack 66577937:8193 (256) ack 1(guardar 256 bytes)ack 66578193:8449 (256) ack 1(guardar 256 bytes)ack 66578449:8705 (256) ack 1(guardar 256 bytes)ack 66578705:8961 (256) ack 1RC - Bloque III - Tema 86


5963Control de congestión: Ejemplo606162ack 66575755546465ack 66578705:8961 (256) ack 16668ack 6657ack 665770(guardar 256 bytes)ack 6657(guardar 256 bytes)ack 6657(guardar 256 bytes)(guardar 256 bytes)ack 6657(guardar 256 bytes)ack 66576657:6913 (256) ack 1 (retx.)ack 8961, win 5888678961:9217 (256) ack 169722304 bytesa la aplicación9217:9473 (256) ack 1719473:9729 (256) ack 1RC - Bloque III - Tema 87


Congestión: Ejemplo• Cuando el receptor recibe un segm<strong>en</strong>to con mayor número desecu<strong>en</strong>cia transmite el ACK del byte que espera recibir.– Almac<strong>en</strong>a los datos <strong>en</strong> espera de poder <strong>en</strong>tregarlos <strong>en</strong>ord<strong>en</strong>.• Cuando el transmisor recibe el tercer ACK duplicado (1 ó 2 seadmit<strong>en</strong> como posible desord<strong>en</strong> causado por la red) sobre elmismo número de secu<strong>en</strong>cia supone que se ha perdido sóloese segm<strong>en</strong>to.– Retransmite el segm<strong>en</strong>to perdido y continúa la transmisión Algoritmo de recuperación y retransmisión rápida• El receptor, al recibir el segm<strong>en</strong>to perdido puede reord<strong>en</strong>ar lossegm<strong>en</strong>tos, <strong>en</strong>tregar todos los datos recibidos al usuario yas<strong>en</strong>tirlos al transmisor.RC - Bloque III - Tema 88


Algoritmo para evitar la congestión• Es un control de flujo que se impone el propiotransmisor para evitar la congestión, fr<strong>en</strong>te a lav<strong>en</strong>tana anunciada por el receptor para evitar lasaturación del mismo.• Se implem<strong>en</strong>ta conjuntam<strong>en</strong>te con el algoritmo deinicio l<strong>en</strong>to.• Utiliza dos variables <strong>en</strong> bytes:– cwnd: v<strong>en</strong>tana de congestión– ssthres: umbral de inicio l<strong>en</strong>toRC - Bloque III - Tema 89


Algoritmo para evitar la congestión1. Inicialización:– cwnd = 1 segm<strong>en</strong>to (<strong>en</strong> función del MSS)– ssthresh = 65535 bytes2. <strong>TCP</strong> no podrá <strong>en</strong>viar más del mínimo de la v<strong>en</strong>tana del receptor (win)y la v<strong>en</strong>tana de congestión (cwnd).3. Cuando se produce congestión (el timeout expira o se recib<strong>en</strong> tresACKs repetidos) ssthresh = ½ de la v<strong>en</strong>tana activa– V<strong>en</strong>tana activa = min(win, cwnd)– Valor mínimo de ssthresh es siempre de 2 segm<strong>en</strong>tos.– Además, si es por timeout cwnd = 1 segm<strong>en</strong>to4. Cada vez que llega un ACK, se actualiza cwnd:a) Si cwnd ssthresh Se aum<strong>en</strong>ta cwnd <strong>en</strong> una cantidad nuncasuperior a un segm<strong>en</strong>to (aum<strong>en</strong>to lineal). Se aplica la sigui<strong>en</strong>tefórmula:2tamaño segm<strong>en</strong>to tamaño segm<strong>en</strong>tocwnd = cwnd ++cwnd8RC - Bloque III - Tema 810


Algoritmo para evitar la congestión4440Algoritmo para evitar lacongestiónV<strong>en</strong>tana de congestión (KiloBytes)363228242016128Algoritmo de iniciol<strong>en</strong>tossthresh (32 KB)400 1 2 3 4 5 6 7RC - Bloque III - Tema 8Número de <strong>en</strong>vío8 9 10 11 1211


Recuperación y retransmisión rápida• Modificaciones sobre el algoritmo para evitar la congestiónpropuestas por Jacobson (1990).• Requisitos: cada vez que <strong>TCP</strong> recibe un segm<strong>en</strong>to fuera deord<strong>en</strong> G<strong>en</strong>era un ACK (repetido) sin retardarlo.• Si se recib<strong>en</strong> uno o dos ACKs repetidos Se asume que lossegm<strong>en</strong>tos se recib<strong>en</strong> desord<strong>en</strong>ados.• Si se recib<strong>en</strong> tres o más ACKs repetidos Se asume que seha perdido un segm<strong>en</strong>to y se retransmite el supuesto segm<strong>en</strong>toperdido sin esperar a que v<strong>en</strong>za el timeout (Algoritmo deretransmisión rápida).• A continuación se aplica el algoritmo de control de congestión yno el algoritmo de inicio l<strong>en</strong>to (Algoritmo de recuperaciónrápida).RC - Bloque III - Tema 812


Recuperación y retransmisión rápida3. Si se detecta congestión por recibir tres ACKs repetidos:– ssthresh = ½ cwnd– Se retransmite el segm<strong>en</strong>to perdido– cwnd = ssthresh + 3 segm<strong>en</strong>tos4. Cada vez que llega un ACK:a) Cada vez que se recibe otro ACK duplicado:• cwnd = cwnd + 1 segm<strong>en</strong>to• Se transmite si lo permite cwndb) Cuando se recibe un ACK que confirma datos nuevos (la retransmisión se ha recibido):• cwnd = ssthresh (del paso 1)• Se reduce la tasa de transmisión a la mitad del valorque t<strong>en</strong>ía cuando se produjo el fallo.RC - Bloque III - Tema 813


Control de congestión: Ejemplo• En primer lugar se verá el establecimi<strong>en</strong>to de conexión y comose inicializan los valores de cwnd y ssthresh.• Además, <strong>en</strong> esta conexión se produce una pérdida <strong>en</strong> el primerSYN, y esto afecta directam<strong>en</strong>te a los valores iniciales de cwndy ssthresh:– cwnd = 256 bytes– ssthresh = 512 bytesSegm. #EnviarAcciónRecibirObservacionescwndVariablessthreshInicialización25665535SYNTimeout256512SYNSYN, ACKACKRC - Bloque III - Tema 814


Control de congestión: EjemploSegm. #EnviarAcciónRecibirObservacionescwndVariablessthresh11:2572ACK 257Alg. inicio l<strong>en</strong>to51251234257:513513:7695ACK 513Alg. inicio l<strong>en</strong>to76851267769:10251025:12818ACK 769Alg. evitar cong.88551291281:153710ACK 1025Alg. evitar cong.991512RC - Bloque III - Tema 815


Control de congestión: EjemploSegm. #EnviarAcciónRecibirObservacionescwndVariablessthresh58ACK 6657ACK nuevo2426512598705:896160ACK 6657ACK repetido 1242651261ACK 6657ACK repetido 2242651262ACK 6657ACK repetido 317921024636657:6913Retransmisión64ACK 6657ACK repetido 42048102465ACK 6657ACK repetido 52304102466ACK 6657ACK repetido 625601024678961:9217RC - Bloque III - Tema 816


Control de congestión: EjemploAcciónVariableSegm. #EnviarRecibirObservacionescwndssthresh68ACK 6657ACK repetido 728161024699217:947370ACK 6657ACK repetido 830721024719473:972972ACK 8961ACK nuevo12801024RC - Bloque III - Tema 817


<strong>TCP</strong>: Temporizadores• <strong>TCP</strong> gestiona 4 <strong>temporizadores</strong> difer<strong>en</strong>tes con cadaconexión:– Un temporizador de retransmisiones: se utilizacuando se espera un ACK del otro extremo.– Un temporizador de persist<strong>en</strong>cia: manti<strong>en</strong>e lainformación del tamaño de v<strong>en</strong>tana, incluso si elotro extremo cierra su v<strong>en</strong>tana de recepción.– Un temporizador de “keepalive”: dectecta cuandoel otro extremo se reinicializa o está caído.– El temporizador 2MSL: mide el tiempo que laconexión está <strong>en</strong> el estado TIME-WAIT.RC - Bloque III - Tema 818


Temporizador de persist<strong>en</strong>cia19• Emisor rápido, receptor l<strong>en</strong>toCli<strong>en</strong>te:1111 Servidor:8888SYN 13281:13281(0)win 4096, 12SYN 45827:45827(0)ACK 1, win 4096, ACK 1, win 40963PSH 1:1025 (1024) ACK 1, win 4096PSH 1025:2049 (1024) ACK 1, win 4096PSH 2049:3073 (1024) ACK 1, win 4096456PSH 3073:4097 (1024) ACK 1, win 4096ACK 4097, win 0ACK 4097, win 4096Segm<strong>en</strong>to deactualizaciónde v<strong>en</strong>tana789RC - Bloque III - Tema 8


20Temporizador de persist<strong>en</strong>cia• Emisor rápido, receptor l<strong>en</strong>to (continuación)Cli<strong>en</strong>te:1111 Servidor:8888PSH 4097:5121 (1024) ACK 1, win 4096PSH 5121:6145 (1024) ACK 1, win 4096PSH 6145:7169 (1024) ACK 1, win 4096FIN, PSH 7169:8193 (1024) ACK 1, win 4096101112ACK 8194, win 0ACK 8194, win 4096Segm<strong>en</strong>to deactualizaciónde v<strong>en</strong>tana131415FIN 1:1 (0) ACK 8194, win 409616ACK 2, win 409617RC - Bloque III - Tema 8


Temporizador de persist<strong>en</strong>cia• ¿Qué ocurre si se pierde el ACK del segm<strong>en</strong>to 9?– El cli<strong>en</strong>te está esperando que el servidor leactualice el tamaño de v<strong>en</strong>tana.– El servidor ha actualizado la v<strong>en</strong>tana y estáesperando que le llegu<strong>en</strong> nuevos datos delservidor.• Se <strong>en</strong>tra <strong>en</strong> una situación de abrazo mortal.• Para arreglarlo <strong>TCP</strong>, después de un tiempo sin quese abra la v<strong>en</strong>tana, pregunta periódicam<strong>en</strong>te si lav<strong>en</strong>tana se ha actualizado utilizando unos segm<strong>en</strong>tosespeciales d<strong>en</strong>ominados: window probes.• Los window probes no son más que segm<strong>en</strong>tos deun byte utilizados para comprobar si realm<strong>en</strong>te lav<strong>en</strong>tana se ha modificado o no.RC - Bloque III - Tema 821


22Temporizador de persist<strong>en</strong>ciaCli<strong>en</strong>te:1111 Servidor:8888PSH 1:1025 (1024) ACK 1, win 4096PSH 1025:2049 (1024) ACK 1, win 4096PSH 2049:3073 (1024) ACK 1, win 4096PSH 3073:4097 (1024) ACK 1, win 40961234ACK 4097, win 0ACK 4097, win 0ACK 4097, win 0ACK 4097, win 06window probe810579114097:4098 (1) ACK 1, win 40964097:4098 (1) ACK 1, win 40964097:4098 (1) ACK 1, win 4096RC - Bloque III - Tema 8


Temporizador de persist<strong>en</strong>cia• El temporizador de persist<strong>en</strong>cia se activará <strong>en</strong> los sigui<strong>en</strong>tesintervalos: 5, 6, 12, 24, 48, 60, 60, … segundos.– Este temporizador se basa <strong>en</strong> el expon<strong>en</strong>tial backoff, perolimitado <strong>en</strong>tre 5 y 60 segundos.• Los window probes conti<strong>en</strong><strong>en</strong> 1 byte datos (nº secu<strong>en</strong>cia 4097):– <strong>TCP</strong> permite <strong>en</strong>viar un byte de datos por <strong>en</strong>cima del tamañode la v<strong>en</strong>tana.– El ACK del receptor NO asi<strong>en</strong>te el byte del window probe(ACK 4097) Este byte se continúa retransmiti<strong>en</strong>do.• ¿Cuándo se para la transmisión de window probes? Nunca, secontinúan transmiti<strong>en</strong>do a intervalos de 60 segundos hasta que:– El receptor abre la v<strong>en</strong>tana.– Se cierra la conexión por las aplicaciones.RC - Bloque III - Tema 823


Síndrome de la v<strong>en</strong>tana tonta• El control de flujo de <strong>TCP</strong> puede provocar que seintercambi<strong>en</strong> pequeñas cantidades de datos, <strong>en</strong>lugar de esperar y <strong>en</strong>viar un segm<strong>en</strong>to completo.• Causas:– La aplicación receptora consume los datos muyl<strong>en</strong>tam<strong>en</strong>te– La aplicación emisora produce los datos muyl<strong>en</strong>tam<strong>en</strong>te• En cualquier caso, los datos se <strong>en</strong>vían consegm<strong>en</strong>tos muy pequeños:– Uso inefici<strong>en</strong>te del ancho de banda– Increm<strong>en</strong>to del procesami<strong>en</strong>to por parte de <strong>TCP</strong>RC - Bloque III - Tema 824


Síndrome de la v<strong>en</strong>tana tontaCab.Cab.Buffer receptor ll<strong>en</strong>o1 byte libreEnviar segm<strong>en</strong>to deactualización de v<strong>en</strong>tanaRecepción del nuevo byteBuffer receptor ll<strong>en</strong>o• Por ejemplo, la aplicaciónrecupera los datosl<strong>en</strong>tam<strong>en</strong>te:1. El buffer del <strong>TCP</strong> receptorse ll<strong>en</strong>a2. El <strong>TCP</strong> receptor notifica alemisor que su v<strong>en</strong>tana estácerrada3. La aplicación receptora leeun byte4. El <strong>TCP</strong> receptor <strong>en</strong>vía unACK al emisor paraanunciarle que dispone deun byte libre5. El <strong>TCP</strong> emisor <strong>en</strong>vía unsegm<strong>en</strong>to con un byte dedatos6. Volvemos al punto 1RC - Bloque III - Tema 825


Solución de Clark (RFC 813)• Solución de Clark: no <strong>en</strong>viar notificaciones dev<strong>en</strong>tana pequeñas (p.e. 1 byte).• En cambio, cerrar la v<strong>en</strong>tana completam<strong>en</strong>te hastaque:– Hay espacio para un segm<strong>en</strong>to <strong>en</strong>tero (MSS)– Se ha liberado la mitad del espacio del buffer delreceptor (para buffers muy pequeños)• La solución de Clark y el algortimo de Nagle soncomplem<strong>en</strong>tarios:– Algoritmo de Nagle: el emisor acumula datoshasta que hay “sufici<strong>en</strong>tes” datos para <strong>en</strong>viar.– Solución de Clark: el receptor consume datoshasta que se ha liberado espacio “sufici<strong>en</strong>te” <strong>en</strong> elbuffer para ser notificadoRC - Bloque III - Tema 826


Temporizador de keepalive• En una conexión <strong>TCP</strong> sin intercambio de datos, no se produc<strong>en</strong>ingún intercambio de paquetes (polling).• Esto puede plantear problemas <strong>en</strong> situaciones de fallos delcli<strong>en</strong>te (caídas, cli<strong>en</strong>te inalcanzable o reinicializaciones).• Para solucionar esto se <strong>en</strong>cu<strong>en</strong>tra el temporizador de keepalive(aunque no es parte del RFC de <strong>TCP</strong>).• Ti<strong>en</strong>e s<strong>en</strong>tido <strong>en</strong> aplicaciones servidor que pued<strong>en</strong> liberarrecursos si el cli<strong>en</strong>te no está realm<strong>en</strong>te conectado.• Funcionami<strong>en</strong>to: después de 2 horas de inactividad, el servidor<strong>en</strong>viará un segm<strong>en</strong>to sonda (similar al window probe).– Segm<strong>en</strong>to sonda: segm<strong>en</strong>to de un byte, correspondi<strong>en</strong>te alúltimo byte <strong>en</strong>viado.RC - Bloque III - Tema 827


Temporizador de keepalive• El cli<strong>en</strong>te puede estar <strong>en</strong> uno de estos cuatro estados:1. El cli<strong>en</strong>te está levantado, funcionando y es alcanzable Elcli<strong>en</strong>te responderá correctam<strong>en</strong>te al servidor y éste reiniciael timeout a 2 horas• También se reinicia el timeout si se produceintercambio de datos2. El host cli<strong>en</strong>te se <strong>en</strong>cu<strong>en</strong>tra caído y aún está caído oreiniciazándose El servidor no obt<strong>en</strong>drá respuesta y loreint<strong>en</strong>tará 10 veces, <strong>en</strong> intervalos de 75 segundos (si norecibe respuesta se cierra la conexión).3. El host cli<strong>en</strong>te se ha caído y se ha inicializado El cli<strong>en</strong>teresponderá con un segm<strong>en</strong>to de reset y el servidor cerrarála conexión.4. El cli<strong>en</strong>te está levantado y funcionando, pero no esalcanzable Este caso es idéntico al 2, y el servidor esincapaz de difer<strong>en</strong>ciarlos.RC - Bloque III - Tema 828


Temporizador de keepalive• Caso 1: cli<strong>en</strong>te OKCli<strong>en</strong>te:1111 Servidor:echoPSH 1:14 (13) ACK 1PSH 1:14 (13) ACK 14132ACK 14segm<strong>en</strong>to sonda542 horas13:13 (1) ACK 14ACK 142 horas13:13 (1) ACK 14ACK 1476RC - Bloque III - Tema 829


Temporizador de keepalive• Caso 2: cli<strong>en</strong>te caídoCli<strong>en</strong>te:1111 Servidor:echoPSH 1:14 (13) ACK 1PSH 1:14 (13) ACK 14132ACK 14segm<strong>en</strong>tos sonda2 horas14413:13 (1) ACK14513:13 (1) ACK14613:13 (1) ACK14713:13 (1) ACKCada 75segundos13:13 (1) ACK 148RC - Bloque III - Tema 830


Temporizador de keepalive• Caso 3: cli<strong>en</strong>te caído y reiniciadoCli<strong>en</strong>te:1111Servidor:echo1PSH 1:14 (13) ACK 1PSH 1:14 (13) ACK 1423ACK 14Cli<strong>en</strong>te se apaga yvuelve a <strong>en</strong>c<strong>en</strong>der13:13 (1) ACK 1442 horasRST 14:14 (0) ACK 14segm<strong>en</strong>to sondaRC - Bloque III - Tema 831


Temporizador de keepalive• Caso 4: cli<strong>en</strong>te inalcanzable (= caso 2)Cli<strong>en</strong>te:1111 Servidor:echoPSH 1:14 (13) ACK 1PSH 1:14 (13) ACK 14132ACK 14segm<strong>en</strong>tos sonda2 horas14413:13 (1) ACK14513:13 (1) ACK14613:13 (1) ACK14713:13 (1) ACKCada 75segundos13:13 (1) ACK 148RC - Bloque III - Tema 832

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!