2_tcp

49
1 Celeste Campo [email protected] UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA TCP AVANZADO Pág. 1 TCP AVANZADO ÍNDICE 1. Introducción. 2. Establecimiento y finalización de la conexión. 3. Flujo de datos interactivo. 4. Flujo de datos masivo. 5. Timeouts y retransmisiones. 6. Temporizador persistente. 7. Temporizador “keepalive”. 8. Opciones TCP

Upload: omsid

Post on 25-Jun-2015

560 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2_tcp

1

Celeste Campo

[email protected]

UNIVERSIDAD CARLOS III DE MADRID

DEPARTAMENTO DE INGENIERÍA TELEMÁTICA

TCP AVANZADO

Pág. 1

TCP AVANZADO

ÍNDICE

1. Introducción.

2. Establecimiento y finalización de la conexión.

3. Flujo de datos interactivo.

4. Flujo de datos masivo.

5. Timeouts y retransmisiones.

6. Temporizador persistente.

7. Temporizador “keepalive”.

8. Opciones TCP

Page 2: 2_tcp

2

Pág. 2

TCP AVANZADO

BIBLIOGRAFÍA

• Básica:– “TCP/IP Illustrated, Vol. 1 - The protocols”, W. R. Stevens. Addison-

Wesley 1994. (Chapter 17 – Chapter 24).

– “TCP/IP Protocol Suite”, 3ª Ed. B. Forouzan, McGraw-Hill, 2003. (Chapter 12).

• Complementaria:– “Computer Networking: A Top-Down Approach Featuring the Internet”,

3ª Ed. J.F. Kurose and K. W. Ross. Addison-Wesley. 2005. (Chapter 3).

– “Internetworking with TCP/IP Volume I. Principles, Protocols and Architecture”, 5ª Ed. D.E. Comer and D.L. Stevens, Prentice-Hall Int., 2006. (Chapter 12).

• RFCs:– RFC 793: Transmission Control Protocol. 1981.

– RFC 2581: TCP Congestión Control. 1999.

Pág. 3

TCP AVANZADO

ÍNDICE

1. Introducción:

A. Definición.

B. Formato segmento TCP.

C. Campos cabecera segmento TCP.

Page 3: 2_tcp

3

Pág. 4

TCP AVANZADO-INTRODUCCIÓN

Definición

• TCP es un protocolo orientado a conexión que proporciona un

servicio de transporte fiable de un flujo de bytes entre

aplicaciones:

– “Orientado a conexión” previo al intercambio de datos los

extremos (aplicaciones) tienen que establecer una conexión.

– “Fiable” garantiza la entrega ordenada del flujo de bytes entre los

extremos de la conexión.

– “Flujo de bytes” por la conexión se transmite un flujo de bytes.

• TCP los divide en bloques denominados segmentos para su entrega a IP.

Pág. 5

TCP AVANZADO-INTRODUCCIÓN

Características

• TCP garantiza fiabilidad sobre IP (no la soporta):

– Realiza control de errores utilizando un código de redundancia

(“checksum”) de su cabecera y datos.

– Garantiza la entrega de estos segmentos:

• Cuando envía un segmento establece un temporizador esperando

asentimiento.

• Cuando recibe un segmento envía un asentimiento.

• Si vence el temporizador antes de que llegue el segmento, realiza

un retransmisión.

– Reordena y descarta paquetes duplicados si es necesario.

• TCP proporciona control de flujo y control de congestión.

Page 4: 2_tcp

4

Pág. 6

TCP AVANZADO-INTRODUCCIÓN

Formato segmento TCP

• Los segmentos TCP se encapsulan en datagramas IP.

CABECERA

IP

CABECERA

TCPDATOS APLICACIÓN

Segmento TCP

Datagrama IP

CABECERA

IP

CABECERA

TCPDATOS APLICACIÓN

CABECERA

ETHERNET

ETHERNET

TRAILER

Pág. 7

TCP AVANZADO-INTRODUCCIÓN

Formato segmento TCP

puerto origen (16 bits)

número de secuencia (32 bits)

número de asentimiento (ACK) (32 bits)

longitud

cabecera

(4 bits)

código redundancia (16 bits) puntero datos urgentes

campos opcionales + relleno (si hay)

reservado

(6 bits)

datos (si hay)

20 octetos

0 31

puerto destino (16 bits)

tamaño ventana

(16 bits)UR

G

AC

K

PS

H

RS

T

SY

N

FIN

1516

Page 5: 2_tcp

5

Pág. 8

TCP AVANZADO-INTRODUCCIÓN

Campos cabecera TCP

• Puertos origen y destino: indican la conexión lógica entre las dos aplicaciones que se están comunicando (FTP, TELNET, SMTP, etc.).

– Identificador único de conexión:

• Par de “socket”

– socket (definido en la RFC 793) = dirección IP + puerto

• Dirección IP origen, Puerto origen, Dirección IP destino, Puerto destino

• Número de secuencia: posición del primer octeto en el campo de datos en relación con la secuencia original.

– Campo de 32 bits rango entre 0 y 2³²-1.

– Si el flag SYN está activo, este campo contiene el número de secuencia inicial (n) y el primer octeto de datos es el n+1. El flag SYN consume un número de secuencia.

– Servicio “full-duplex” cada extremo de la conexión mantiene su número de secuencia de flujo de datos en esa dirección.

Pág. 9

TCP AVANZADO-INTRODUCCIÓN

Campos cabecera TCP

• Número de asentimiento: número de secuencia siguiente al

octeto confirmado, indica la posición que ocuparía el próximo

octeto que se espera recibir.

– Sólo es válido si está activo el flag ACK.

• Longitud cabecera: número de palabras de 32 bits que

componen la cabecera.

– Necesario porque la cabecera es de longitud variable

(opciones).

– Campo de 4 bits cabecera TCP limitada a 60 octetos.

– Sin opciones la longitud de la cabecera son 20 octetos.

• Reservado: reservados para uso futuro, deben estar a cero.

Page 6: 2_tcp

6

Pág. 10

TCP AVANZADO-INTRODUCCIÓN

Campos cabecera TCP

• Flags:

– URG: indica que el campo Puntero Datos Urgentes tiene

validez.

– ACK: indica que el campo Número de Asentimiento tiene

validez.

– PSH: indica que el segmento requiere envío y entrega

inmediata.

– RST: indica aborto de la conexión.

– SYN: sincroniza números de secuencia en el establecimiento

de conexión.

• Confirmación con ACK

– FIN: indica liberación de conexión.

• Confirmación con ACK.

Pág. 11

TCP AVANZADO-INTRODUCCIÓN

Campos cabecera TCP

• Tamaño ventana: indica el número de octetos, adicionales al asentido por ACK, que está dispuesto aceptar.

– Mecanismo de control de flujo de TCP.

– Anunciado por cada extremo de la conexión.

– Campo de 16 bits tamaño limitado a 65535 octetos.

• Código de redundancia: campo obligatorio que debe ser calculado por el emisor y verificado por el receptor.

– Incluye todo el segmento TCP, tanto cabecera como datos.

• Puntero datos urgentes: indica el offset (positivo) que debe ser añadido al número de secuencia del segmento para obtener el número de secuencia del último octeto de datos urgentes.

– Sólo es válido si está activo el flag URG.

Page 7: 2_tcp

7

Pág. 12

TCP AVANZADO-INTRODUCCIÓN

Campos cabecera TCP

• Campos opcionales: para incluir opciones (máx. 40 bytes,

tamaño k*4-bytes size).

– Tamaño máximo de datos en un segmento (MSS – Maximun

Segment Size):

• Utilizada en el establecimiento de la conexión.

• Indica la longitud máxima de datos en un segmento que puede

recibir un extremo.

– Escala del tamaño de la ventana.

– Sellos temporales.

– Asentimientos selectivos.

– Noop: para padding

• Datos:

– Opcional.

Pág. 13

TCP AVANZADO

ÍNDICE

2. Establecimiento y finalización de la conexión:

A. Establecimiento conexión (“three-way handshake”).

B. Finalización conexión.

C. TCP Half-close.

D. Tamaño máximo del segmento (MSS - Maximun Segment

Size).

E. Estados de TCP.

F. Apertura simultánea.

G. Cierre simultáneo.

Page 8: 2_tcp

8

Pág. 14

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Establecimiento conexión

• Uso de “three way handshake”.

• Se emplea el bit SYN en la solicitud de conexión y SYN +

ACK en la respuesta. La respuesta es a su vez confirmada

con ACK.

• Se fija el número de secuencia inicial en ambas direcciones.

TCP 1

SYN (seq=x)

ACK (seq=x+1,ack=y+1)

RED TCP 2

SYN (seq=y,ack=x+1)

DATA (seq=x+1,ack=y+1)

1

2

3

Pág. 15

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Finalización conexión

• Liberación ordenada e independiente por cada uno de los sentidos de transmisión.

• El extremo que desea cesar de transmitir envía segmento con FIN, que debe ser confirmado por el corresponsal con ACK. Para que finalice, el otro extremo debe enviar su correspondiente FIN y ser asentido por un ACK.

TCP 1

FIN (seq=x)

RED TCP 2

ACK (seq=y,ack=x+1)

ACK (seq=x+1,ack=y+1)

1

2(informa a la aplicación)

FIN, ACK (seq=y, ack=x+1)3

4

TCP 1

FIN (seq=x)

RED TCP 2

ACK (seq=x+1,ack=y+1)

1

2 FIN, ACK (seq=y, ack=x+1)

3

Page 9: 2_tcp

9

Pág. 16

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Ejemplo

srv4 % telnet bsdi discard

Trying 192.82.148.3...

Connected to it011.lab.it.uc3m.es.

Escape character is '^]'.

^]

telnet> quit

Connection closed

Pág. 17

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Ejemplo: Notación tcpdump

src > dst: flags first:last(nbytes) ack window urgent options

Flag Abreviatura (3 carac.) Descripción

S SYN Sincroniza números de secuencia

F FIN Emisor ha acabado de enviar datos

R RST Aborto conexión

P PSH El segmento requiere envío y entrega inmediata

. - Ninguno de los cuatro flags activos

Page 10: 2_tcp

10

Pág. 18

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Ejemplo: Salida tcpdump

1 0.0 svr4.1037 > bsdi.discard: S 1415531521:1415531521(0)

win 4096 <mss 1024>

2 0.002402 (0.0024) bsdi.discard > svr4.1037: S 1823083521:1823083521(0)

ack 1415531522 win 4096

<mss 1024>

3 0.007224 (0.0048) svr4.1037 > bsdi.discard: . ack 1823083522 win 4096

4 4.155441 (4.1482) svr4.1037 > bsdi.discard: F 1415531522:1415531522(0)

ack 1823083522 win 4096

5 4.156747 (0.0013) bsdi.discard > svr4.1037: . ack 1415531523 win 4096

6 4.158144 (0.0014) bsdi.discard > svr4.1037: F 1823083522:1823083522(0)

ack 1415531523 win 4096

7 4.180662 (0.0225) svr4.1037 > bsdi.discard: . ack 1823083523 win 4096

ES

TA

BL

EC

IMIE

NT

OF

INA

LIZ

AC

IÓN

Pág. 19

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Ejemplo: Línea temporal

ES

TA

BL

EC

IMIE

NT

O

(th

ree-w

ay h

an

dsh

ake)

3 s

eg

men

tos

FIN

AL

IZA

CIÓ

N

4 s

eg

men

tos

Active open Pasive open

Active close

Pasive close

Page 11: 2_tcp

11

Pág. 20

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

TCP Half-Close

• TCP, al establecer una conexión “full-duplex”, cada extremo puede finalizar la transmisión de datos de forma independiente.

• Pocas aplicaciones hacen uso de esta característica.

TCP 1

aplicación shutdown

RED TCP 2

entrega EOF a la aplicación

aplicación read

aplicación write

aplicación close

entrega EOF a la aplicación

Pág. 21

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

MSS: Maximum Segment Size

• MSS: longitud máxima de datos que se enviarán en un

segmento al otro extremo TCP.

• El datagrama IP resultante normalmente será 40 octetos

mayor que este valor.

• En el establecimiento de la conexión, cada extremo puede

anunciar el MSS que espera recibir (si no se establece, por

defecto es 536 octetos).

– Se incluye como una opción en segmentos TCP SYN.

– MTU¹ – tamaño cabecera IP – tamaño cabecera TCP (ej.

Ethernet se anunciaría 1460 octetos)

¹ MTU = Maximum Transmission Unit

Tipo=2

(1 octeto)

Longitud=4

(1 octeto)

Valor MSS

(2 octetos)

Campos opciones TCP: MSS (durante handshake)

Page 12: 2_tcp

12

Pág. 22

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Estados de TCP

Estado Descripcion

CLOSED No existe conexión activa ni pendiente

LISTEN El servidor está esperando por una conexión

SYN_RCVD Una petición de conexión ha llegado, espera ACK

SYN_SENT El cliente ha comenzado a abrir una conexión

ESTABLISHED Estado de transferencia de datos

FIN_WAIT_1 El cliente ha dicho que ha acabado

FIN_WAIT_2 El servidor ha aceptado liberación conexión

TIME_WAIT Espera por paquetes pendientes (“2MSL wait state”)

CLOSING Ambos extremos han intentado cerrar la conexión simultáneamente.

CLOSE_WAIT Servidor ha iniciado liberación conexión

LAST_ACK Espera por ACK del FIN

(mismo nombre de estados que el programa netstat)

Pág. 23

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Transiciones de estados habituales

• Cliente

• Servidor

CLOSED SYN_SENT

ESTABLISHEDFIN_WAIT_1FIN_WAIT_2

TIME_WAIT

CLOSED LISTEN

SYN-RCVDESTABLISHEDCLOSE_WAIT

LAST_ACK

appl: active open

send: SYN

appl: pasive open

send: <nothing>

recv: SYN;

send: SYN,ACK

recv: ACK

send: <nothing>

recv:FIN

send:ACK

appl: close

send: FIN

recv: ACK

send:<nothing>

recv: SYN, ACK

send: ACK

appl:close

send: FIN

recv: ACK

send: <nothing>

recv:FIN

send:ACK

timeout

Page 13: 2_tcp

13

Pág. 24

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Nomenclatura

appl:

recv:

send:

transiciones habituales para el cliente

indica transición entre estados debida a operaciones de la

aplicación

transiciones habituales para el servidor

indica lo que se envía en esta transición

indica transición entre estados debida a la recepción de un

segmento

Pág. 25

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Diagrama de transición entre estados

CLOSED

LISTEN

SYN_SENTSYN_RCVD

ESTABLISHED

starting point

pasive open

simultaneous open

recv: SYN

send: SYN, ACK

appl: close

or timeoutactive open

data transfer state

appl: pasive open

send: <nothing>

appl: close

send: FIN

Page 14: 2_tcp

14

Pág. 26

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Diagrama de transición entre estados

ESTABLISHED

data transfer state

CLOSE_WAIT

LAST_ACK

recv:FIN

send:ACK

appl: close

send: FIN

recv: ACK

send:<nothing>

passive close

FIN_WAIT_1

FIN_WAIT_2

CLOSING

TIME_WAIT

simultaneous closerecv:FIN

send:ACK

recv:FIN

send:ACK

recv: ACK

send: <nothing>

recv: ACK

send: <nothing>

2MSL timeout

appl: close

send: FIN

active close

Pág. 27

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Estado “2MSL Wait State”

• TCP después de realizar un “active close” y enviar el ACK del FIN debe esperar un tiempo TIME_WAIT.

• ¿Por qué?:

– Permite a TCP volver a enviar el ACK del FIN si éste se pierde (el otro extremo, en este caso, reenviará el FIN cuando venza su temporizador)

• Hasta que no finalice este temporizador no se liberan el par de sockets de la conexión.

• Cada implementación selecciona un valor de MSL (Maximun Segment Lifetime): típicamente 2 minutos (recomendado en la RFC) ó 1 minuto ó 30 segundos.

2MSL Wait State = TIME_WAIT

Page 15: 2_tcp

15

Pág. 28

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

“Resetting” de conexiones

• Se indica activando el flag RST.

• Normalmente generados automáticamente por el software TCP.

• ¿Cuándo se activa el flag RST?

– Llega un petición de conexión y no existe un proceso servidor escuchando en el puerto destino.

– Llega un segmento TCP que no corresponde con ninguna conexión activa.

– Abortar una conexión a nivel aplicación (en vez de enviar un FIN se envía un RST):

• El receptor tira todos los datos pendientes de transmisión.

• No asiente el segmento RST.

• Se finaliza la conexión.

Pág. 29

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Apertura simultánea

• Dos aplicaciones realizan un “active open” simultáneamente.

• TCP está especialmente diseñado para que en este caso sólo se establezca una conexión NO dos conexiones (otros protocolos crean dos conexiones).

• La apertura de la conexión requiere el intercambio de 4 segmentos, NO 3.

TCP 1 RED TCP 2

SYN_SENT(active open)

ESTABLISHED

ESTABLISHED

SYN_RCVDSYN_RCVD

SYN_SENT (active open)

Page 16: 2_tcp

16

Pág. 30

TCP AVANZADO-ESTABLECIMIENTO Y FINALIZACIÓN DE LA

CONEXIÓN

Finalización simultánea

• Dos aplicaciones realizan un “active close” simultáneamente.

• En la finalización de la conexión se siguen intercambiando 4 segmentos.

TCP 1 RED TCP 2

FIN_WAIT_1(active close)

TIME_WAIT

CLOSINGCLOSING

FIN_WAIT_1 (active close)

TIME_WAIT

Pág. 31

TCP AVANZADO

ÍNDICE

3. Flujo de datos interactivo:

A. Entrada interactiva.

B. Asentimientos retardados.

C. Algoritmo de Nagle.

Page 17: 2_tcp

17

Pág. 32

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Flujo de datos interactivos

• Estudio de estadísticas sobre el tráfico TCP:

– Medido en número de paquetes: ~ 50% flujo de datos masivo

(FTP, email); ~ 50% datos interactivos (Telnet o Rlogin).

– Medido en bytes: ~ 90% flujo de datos masivo; ~ 10% datos

interactivos.

• TCP tiene

diferentes

mecanismos para

gestionar estos

dos tipos de

transferencia de

datos.

Pág. 33

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Entrada interactiva

• Aplicaciones de terminal remoto (ej. Telnet) envían cada carácter escrito por el usuario al servidor. El servidor interpreta el carácter y lo envía de nuevo al cliente.

• Podemos ver que por cada carácter se transmiten 3 segmentos TCP:

– Cliente Servidor: incluyendo el carácter.

– Servidor Cliente: haciendo eco del carácter y asintiendo el segmento anterior.

– Cliente Servidor: asintiendo el segmento anterior.

1. Envía carácter

2. Interpreta

carácter

3. Envía eco del carácter

y/o salida

Host con

cliente Telnet

Host con

servidor Telnet

Page 18: 2_tcp

18

Pág. 34

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Entrada interactiva

• ¿Por qué tres segmentos y

no cuatro?:

– Se combina el ACK del

carácter enviado por el

cliente, con el carácter de

eco enviado por el

servidor.

– Este característica se

conoce como

“asentimientos retardados”

SERVIDORCLIENTE

Pág. 35

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Asentimientos retardados

• Normalmente los ACKs no se envían inmediatamente

después de recibir datos.

• Un ACK se puede retardar:

– Hasta que existan datos para enviar hacia el otro extremo:

• El ACK se incluye en el segmento de datos (ACK piggyback con

los datos).

– Hasta un máximo de 200 ms. (valor habitual en las

implementaciones):

• RFC indica que debería implementarse un retardo en el envío de

los ACKs y que este retardo debe ser menor de 500 ms.

Page 19: 2_tcp

19

Pág. 36

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Asentimientos retardados: Ejemplo

bsdi:~> rlogin srv4

srv4:~> date

Sat Feb 6 07:52:17 MST 1993

srv4:~>

Pág. 37

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Asentimientos retardados: Ejemplo

1 0.0 bsdi.1023 > srv4.login: P 0:1(1) ack 1 win 4096

2 0.016497 (0.0165) srv4.login > bsdi.1023: P 1:2(1) ack 1 win 4096

3 0.139955 (0.1235) bsdi.1023 > srv4.login: . ack 2 win 4096

4 0.458037 (0.3181) bsdi.1023 > srv4.login: P 1:2(1) ack 2 win 4096

5 0.474386 (0.0163) srv4.login > bsdi.1023: P 2:3(1) ack 2 win 4096

6 0.539943 (0.0656) bsdi.1023 > srv4.login: . ack 3 win 4096

7 0.814582 (0.2746) bsdi.1023 > srv4.login: P 2:3(1) ack 3 win 4096

8 0.831108 (0.0165) srv4.login > bsdi.1023: P 3:4(1) ack 3 win 4096

9 0.940112 (0.1090) bsdi.1023 > srv4.login: . ack 4 win 4096

10 1.191287 (0.2512) bsdi.1023 > srv4.login: P 3:4(1) ack 4 win 4096

11 1.207701 (0.0164) srv4.login > bsdi.1023: P 4:5(1) ack 4 win 4096

12 1.339994 (0.1323) bsdi.1023 > srv4.login: . ack 5 win 4096

13 1.680646 (0.3407) bsdi.1023 > srv4.login: P 4:5(1) ack 5 win 4096

14 1.697977 (0.0173) srv4.login > bsdi.1023: P 5:7(2) ack 5 win 4096

15 1.739974 (0.0420) bsdi.1023 > srv4.login: . ack 7 win 4096

d

a

t

e

\n(CR + LF)

Page 20: 2_tcp

20

Pág. 38

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Asentimientos retardados: Ejemplo

16 1.799841 (0.0599) srv4.login > bsdi.1023: P 7:37(30) ack 5 win 4096

17 1.940176 (0.1403) bsdi.1023 > srv4.login: . ack 37 win 4096

18 1.944338 (0.0042) srv4.login > bsdi.1023: P 37:44(7) ack 5 win 4096

19 2.140110 (0.1958) bsdi.1023 > srv4.login: . ack 44 win 4096

date

prompt

Sat Feb 6 07:52:17 MST 1993 + “CR” + “LF”

srv4:~>

Pág. 39

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Algoritmo de Nagle

• El algoritmo de Nagle (RFC 896) plantea una solución al

problema siguiente:

– En algunos casos, se envían pocos octetos de datos en cada

segmento (tinygrams) y por lo tanto, se aumenta el sobrecarga

debido a las cabeceras.

– Sin efecto en redes LAN, pero puede aumentar la congestión

en redes WAN.

– Ejemplo anterior:

• Cada octeto se envía en un datagrama IP de 41 octetos:

– 20 octetos de la cabecera IP.

– 20 octetos de la cabecera TCP.

– 1 octeto de datos.

Page 21: 2_tcp

21

Pág. 40

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Algoritmo de Nagle

• El algoritmo de Nagle dice:

– Una conexión TCP sólo puede tener un segmento “pequeño”

TCP pendiente de asentimiento.

– Mientras se espera el asentimiento se van acumulando los

datos pendientes, que se enviarán juntos en el siguiente

segmento.

• El algoritmo de Nagle tiene la propiedad:

– Cuanto más rápido llegan los asentimientos, más rápido se

envían los segmentos de datos (“self-clocking”).

– Así en una WAN los asentimientos llegarán más lentos y por lo

tanto se reducirá el número de “tinygrams” enviados (se envían

menos segmentos de mayor tamaño).

Pág. 41

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Deshabilitar el algoritmo de Nagle

• Es posible y deseable en algunos casos deshabilitar el

algoritmo de Nagle:

– Servidor de ventanas:

• Los movimientos de ratón deben enviarse sin ningún retraso.

– Envío de teclas de función en un login:

• Teclas de función están compuestas de varios caracteres.

• Es necesario que esos caracteres vayan juntos para que el

usuario no detecte retardos en la interacción con el servidor

remoto.

• Las implementaciones permiten deshabilitar este algoritmo.

Page 22: 2_tcp

22

Pág. 42

TCP AVANZADO-FLUJO DE DATOS INTERACTIVOS

Algoritmo de Nagle: Ejemplo

1

2

3

4

5

6

7

8

9

slip.1023 vangogh.login

10

0.0

0.197694 (0.1977)

0.232457 (0.0348)

0.437593 (0.2051)

0.464257 (0.0267)

0.677658 (0.2134)

0.707709 (0.0301)

0.917762 (0.2101)

0.945862 (0.0281)

1.157640 (0.2118)

1.187501 (0.0299)

Pág. 43

TCP AVANZADO

ÍNDICE

4. Flujo de datos masivo:

A. Flujo normal de datos.

B. Mecanismo de control de flujo:

1. Ventana deslizante en TCP.

C. Mecanismo de control de congestión:

1. “Slow start”.

D. Flag PUSH.

E. Modo urgente (flag URG).

Page 23: 2_tcp

23

Pág. 44

TCP AVANZADO-FLUJO DE DATOS MASIVO

Flujo normal de datos

• Idea: permitir al emisor enviar múltiples segmentos completos de datos (MSS), antes de parar y esperar por el asentimiento:– Transferencia más rápida de los datos.

• Los mecanismos de control de flujo previenen que el emisor sature al receptor con datos:– TCP emplea como mecanismo de control de flujo una ventana

deslizante:• Permite que el emisor transmita varios paquetes antes de parar y esperar

por un asentimiento pero sin saturar al receptor.

• Los mecanismos de control de congestión previenen que el emisor sature la red con datos:– TCP emplea como mecanismos básico de control de congestión “slow-

start” (comienzo lento):• Permite que el emisor envíe datos a la misma velocidad con la que se

envían asentimientos desde el otro extremo.

– Más mecanismos añadidos basados en temporizadores.

Pág. 45

TCP AVANZADO-FLUJO DE DATOS MASIVO

Ventana deslizante en TCP

• Permite el control de flujo.

• Características:

– El envío de ACK es independiente de la variación del tamaño de la

ventana del receptor.

– Los ACKs no incrementan automáticamente el tamaño de la ventana.

– Los ACK son acumulativos.

1 2 3 4 5 6 7 8 9 10 11 …

ventana ofrecida

(anunciada por el receptor)

ventana utilizable

enviado, no asentido

puede enviarse ASAP

no puede enviarse

hasta ampliar la ventanaenviado y

asentido

Page 24: 2_tcp

24

Pág. 46

TCP AVANZADO-FLUJO DE DATOS MASIVO

Ventana se “cierra” (close)

1 2 3 4 5 6 7 8 9 10 11 …

1 2 3 4 5 6 7 8 9 10 11 …

1 2 3 4 5 6 7 8 9 10 11 …

Se transmite un único octeto con (seq=7)

Se recibe un asentimiento (ack=6 y win=4)

Pág. 47

TCP AVANZADO-FLUJO DE DATOS MASIVO

Ventana se “abre” (open)

1 2 3 4 5 6 7 8 9 10 11 …

1 2 3 4 5 6 7 8 9 10 11 …

Se recibe un asentimiento (ack=6 y win=6)

• El receptor abre la ventana cuando el buffer TCP de

recepción se vacía (significa que los datos se han entregado

a la aplicación).

Page 25: 2_tcp

25

Pág. 48

TCP AVANZADO-FLUJO DE DATOS MASIVO

Ventana se “encoge” (shrink)

1 2 3 4 5 6 7 8 9 10 11 …

1 2 3 4 5 6 7 8 9 10 11 …

Se recibe un asentimiento (ack=5 y win=3)

• En la RFC se recomienda “fuertemente” no encoger la

ventana.

Pág. 49

TCP AVANZADO-FLUJO DE DATOS MASIVO

Gestión de la ventana deslizante en TCP

• El receptor envía dos parámetros al emisor:

• La interpretación es:

– “estoy preparado para recibir nuevos datos, desde seq=ack,

ack+1,…,ack+win-1”.

• El receptor puede asentir datos sin abrir la ventana.

• El receptor puede cambiar el tamaño de la ventana sin

asentir datos.

ACK WIN

32 bits 16 bits

Page 26: 2_tcp

26

Pág. 50

TCP AVANZADO-FLUJO DE DATOS MASIVO

Ventana deslizante: Ejemplo

• Transferencia de 8192 octetos desde la máquina srv4 a la

máquina bsdi:

bsdi% sock –i –s 7777

svr4% sock –i –n8 bsdi 7777

• El cliente (svr4) realiza ocho escrituras de 1024 bytes, el

servidor (bsdi) lee los datos recibidos y los descarta.

sock para Linux en http://ttcplinux.sourceforge.net/tools/tools.html

(cuidado, no es exactamente igual)

Pág. 51

TCP AVANZADO-FLUJO DE DATOS MASIVO

Ventana deslizante: Ejemplo

1

3

4

5

6

7

11

10

0.017868

0.022699 (0.0048)

0.027650 (0.0050)

0.027799 (0.0001)

0.031881 (0.0041)

0.039276 (0.0045)

0.044618 (0.0053)

0.055441 (0.0002)

0.066206 (0.0045)

svr4.1056 bsdi.7777

2

5

8

9

12

0.034789 (0.0029)

0.050326 (0.0057)

0.055286 (0.0050)

0.061742 (0.0063)

Page 27: 2_tcp

27

Pág. 52

TCP AVANZADO-FLUJO DE DATOS MASIVO

… si “emisor rápido, receptor lento”

1

3

5

11

0.006806

0.008838 (0.0020)

0.010490 (0.0017)

0.012057 (0.0016)

0.038562 (0.0265)

0.071915 (0.0089)

svr4.1056 bsdi.7777

2

0.055994 (0.0174)

0.074313 (0.0024) 12

4

6

7

9

8

10

0.057815 (0.0018)

0.059777 (0.0020)

0.061439 (0.0017)

0.062992 (0.0016)

Pág. 53

TCP AVANZADO-FLUJO DE DATOS MASIVO

“Slow Start”

• Algoritmo que permite el control de la congestión, es decir,

evita que el emisor sature la red:

– En redes LAN la selección de parámetros de conexión es

sencilla.

– En redes WAN pueden ocurrir dificultades cuando routers

intermedios tienen paquetes encolados.

• El algoritmo de “slow start” consiste en:

– La velocidad de envío de paquetes depende de la velocidad de

los asentimientos recibidos.

– Se introduce una ventana en el emisor, que se denomina, ventana de congestión (cwnd).

Page 28: 2_tcp

28

Pág. 54

TCP AVANZADO-FLUJO DE DATOS MASIVO

Algoritmo de “Slow Start”

• Cuando se establece la conexión se establece el valor inicial cwnd=1 (unidades de segmentos).– Actualmente se permite iniciar la conexión con un valor menor o igual a

2 (unidades de segmentos).

• Cada vez que se recibe un asentimiento de nuevos datos (ACK), la ventana de congestión se incrementa en un segmento cwnd=cwnd+1.– Normalmente, se recibe un ACK por cada segmento:

• pero se puede recibir un ACK que asiente varios segmentos,

• o recibir un ACK que asiente menos de un segmento

– En cualquier caso, siempre se incrementa en 1 segmento.

• El emisor podrá enviar tantos datos como el mínimo entre la ventana de congestión y la ventana anunciada.

• La ventana de congestión normalmente se incrementa exponencialmente:– No es así si se envían ACK acumulados.

Pág. 55

TCP AVANZADO-FLUJO DE DATOS MASIVO

Algoritmo de “Slow Start”

cwnd = 1

cwnd = 2

cwnd = 4

cwnd = 8

Page 29: 2_tcp

29

Pág. 56

TCP AVANZADO-FLUJO DE DATOS MASIVO

“Slow Start”: Ejemplo

1

3

11

0.0

0.716330 (0.7163)

0.716967 (0.0006)

0.717640 (0.0007)

1.466086 (0.7484)

1.467425 (0.0006)

1.946065 (0.4786)

2.576084 (0.6287)

sun.1118 vangogh.discard

2

5

9

10

1.466778 (0.0007)

1.946709 (0.0006)

1.947350 (0.0006)

2.576294 (0.0002)

4

6

8

7

cwnd = 2

cwnd = 1

cwnd = 3

cwnd = 4

12cwnd = 5

cwnd = 6

Pág. 57

TCP AVANZADO-FLUJO DE DATOS MASIVO

Flag “PUSH”

• Notificación del emisor al receptor para que el receptor pase

inmediatamente los datos que ha recibido a la aplicación receptora:

– Todos los contenidos en el segmento con PUSH activo.

– Datos previos almacenados por TCP.

• Inicialmente las aplicaciones podían indicar al stack TCP que

activase el flag de PUSH para que los datos se enviaran de manera

inmediata:

– Pero la mayoría de implementaciones actuales no soportan esta

característica a nivel API.

• Implementaciones actuales (Berkeley y derivadas):

– Activan PUSH en el segmento que vacía el buffer de transmisión.

– Siempre entregan de forma inmediata los datos en recepción, por lo

tanto ignoran el flag PUSH.

Page 30: 2_tcp

30

Pág. 58

TCP AVANZADO-FLUJO DE DATOS MASIVO

Datos urgentes (flag “URG”)

• Notificación para indicar que existen datos urgentes en el flujo de octetos:– Activar el flag de URG.

– Valor del puntero a datos urgentes:• Indica el offset (positivo) que debe ser añadido al número de secuencia del

segmento para obtener el número de secuencia del último octeto de datos urgentes (RFC 1122).

• En muchas implementaciones este offset apunta al siguiente octeto después de los datos urgentes.

• El extremo TCP receptor debe indicar la llegada de datos urgentes a la aplicación receptora.

• ¿Por qué se utiliza?:– Permite al extremo emisor enviar un segmento aunque el tamaño de la

ventana ofrecida sea cero.

– Indicar datos fuera de secuencia.

• ¿Cuándo se utiliza?:– Tecla de interrupción para una conexión remota (rlogin, telnet).

– Interrumpir la transferencia de un fichero en FTP.

Pág. 59

TCP AVANZADO-FLUJO DE DATOS MASIVO

Datos urgentes: Ejemplo • Arrancamos un programa sock en la máquina bsdi y está en pausa

durante 10 s después del establecimiento de la conexión:

bsdi % sock –i –s –P10 5555

• Arrancamos un cliente en la máquina sun, indicándole que va a utilizar un buffer de transmisión de 8192 octetos y que realice seis escrituras de 1024 octetos, e indicamos que envíe un octeto de datos urgentes justo antes de realizar la quinta escritura (-U5 ):

sun % sock –v –i –n6 –S8192 –U5 bsdi 5555

connected on 140.252.13.33.1305 a 140.252.13.35.5555

SO_SNDBUF = 8192

TCP_MAXSEG = 1024

wrote 1024 bytes

wrote 1024 bytes

wrote 1024 bytes

wrote 1024 bytes

wrote 1 bytes of urgent data

wrote 1024 bytes

wrote 1024 bytes

Page 31: 2_tcp

31

Pág. 60

TCP AVANZADO-FLUJO DE DATOS MASIVO

Datos urgentes: Ejemplo 1 0.0 sun.1305 > bsdi.5555: P 1:1025(1024) ack 1 win 4096

2 0.073743 (0.0737) sun.1305 > bsdi.5555: P 1025:2049(1024) ack 1 win 4096

3 0.096969 (0.0232) sun.1305 > bsdi.5555: P 2049:3073(1024) ack 1 win 4096

4 0.157514 (0.0605) bsdi.5555 > sun.1305: . ack 3073 win 1024

5 0.164267 (0.0068) sun.1305 > bsdi.5555: P 3073:4097(1024) ack 1 win 4096

6 0.167961 (0.0037) sun.1305 > bsdi.5555: . ack 1 win 4096 urg 4098

7 0.171969 (0.0040) sun.1305 > bsdi.5555: . ack 1 win 4096 urg 4098

8 0.176196 (0.0042) sun.1305 > bsdi.5555: . ack 1 win 4096 urg 4098

9 0.180373 (0.0042) sun.1305 > bsdi.5555: . ack 1 win 4096 urg 4098

10 0.180768 (0.0004) sun.1305 > bsdi.5555: . ack 1 win 4096 urg 4098

11 0.367533 (0.1868) bsdi.5555 > sun.1305: . ack 4097 win 0

12 0.368478 (0.0009) sun.1305 > bsdi.5555: . ack 1 win 4096 urg 4098

Aplicación escribe 1 octeto de datos urgentes (seq=4097)

Aplicación escribe 1024 octetos

Aplicación escribe 1024 octetos

Aplicación realiza close

Pág. 61

TCP AVANZADO-FLUJO DE DATOS MASIVO

Datos urgentes: Ejemplo

13 9.829712 (9.4612) bsdi.5555 > sun.1305: . ack 4097 win 2048

14 9.831578 (0.0019) sun.1305 > bsdi.5555: . 4097:5121(1024) ack 1 win 4096

urg 4098

15 9.833303 (0.0017) sun.1305 > bsdi.5555: . 5121:6145(1024) ack 1 win 4096

• 9.835089 (0.0018) bsdi.5555 > sun.1305: . ack 4097 win 4096

• 9.835913 (0.0008) sun.1305 > bsdi.5555: FP 6145:6146(1) ack 1 win 4096

• 9.840264 (0.0044) bsdi.5555 > sun.1305: . ack 6147 win 2048

• 9.842386 (0.0021) bsdi.5555 > sun.1305: . ack 6147 win 4096

• 9.843622 (0.0012) bsdi.5555 > sun.1305: F 1:1(0) ack 6147 win 4096

• 9.844320 (0.0007) sun.1305 > bsdi.5555: . ack 2 win 4096

TCP envía el octeto urgente en este segmento

Se desactiva el modo urgente porque ya ha sido enviado el octeto de datos urgentes

Receptor abre la ventana anunciada (aplicación se “despierta”)

Receptor abre la ventana anunciada

TCP envía el último octeto de datos e inicia el fin de la conexión

Page 32: 2_tcp

32

Pág. 62

TCP AVANZADO

ÍNDICE

5. Timeouts y retransmisiones:

A. Temporizadores en TCP.

B. Retransmisiones y temporizador de retransmisión en

TCP.

C. Algoritmo de Karn/Partridge.

D. Algoritmo para evitar la congestión (“congestion

avoidance”).

E. “Fast recovery” y “Fast retransmit”.

Pág. 63

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Temporizadores en TCP

• TCP gestiona cinco temporizadores por cada conexión:

– Temporizador de retransmisión:

• Permite retransmitir datos si no se recibe un asentimiento del receptor.

– Temporizador persistente:

• Permite el flujo de información del tamaño de la ventana aunque el otro extremo haya cerrado la ventana anunciada.

– Temporizador de “keepalive”:

• Permite detectar cuando el otro extremo de la conexión se cae o se reinicializa.

– Temporizador “2MSL”:

• Permite esperar un tiempo para garantizar que se cierra correctamente la conexión.

• Tiempo que permanece en el estado TIME_WAIT.

– Temporizador de asentimientos retardados.

Page 33: 2_tcp

33

Pág. 64

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Retransmisiones en TCP

• Se debe realizar control de errores porque:

– Se pueden perder segmentos.

– Se pueden recibir segmentos erróneos.

• Técnicas de control de errores:

– Esquema de retransmisiones.

– Esquemas de detección de errores (CRC).

• TCP emplea como esquema de retransmisión una versión de Go-Back-N ARQ (“Automatic Repeat Request”).

• TCP retransmite un segmento cuando asume que se ha perdido:

– No se recibe asentimiento y vence el temporizador de retransmisión.

– Se reciben múltiples asentimientos para el mismo segmento.

Pág. 65

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Temporizador de retransmisiones en TCP

• Por cada conexión se establece un solo temporizador de retransmisiones.

• Cuando el temporizador vence (“timeout”), el emisor retransmite el primer segmento que no ha sido asentido:

– RTO = “Retransmission Timeout”

• El temporizador se desactiva cuando:

– Todos los segmentos enviados son asentidos.

• El temporizador se activa cuando:

– Se envía un segmento con datos y el temporizador no estaba activo.

– Llega un ACK que asiente nuevos datos, pero no se asienten todos los enviados.

– Se retransmite un segmento.

Page 34: 2_tcp

34

Pág. 66

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

¿Cómo se establece el RTO?

• El valor del RTO es crucial para obtener unas buenas

prestaciones de TCP:

– Un valor demasiado pequeño implica retransmisiones

innecesarias.

– Un valor demasiado grande implica esperar demasiado tiempo

antes de realizar la retransmisión.

• Principal problema para establecer su valor es que los

retardos en la red no son fijos:

– RTO debe tener un valor variable y adaptarse dinámicamente a

las condiciones de la red.

– Por lo tanto, va a estar basado en la medida de “round-trip

time” (RTT) que realiza TCP.

Pág. 67

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Medida del RTT

• TCP debe medir la

diferencia de tiempos

entre la transmisión de un

segmento y la recepción

del correspondiente ACK.

• Se realiza una única

medida simultáneamente,

es decir, no existen

medidas que se solapen.

RT

T #

1R

TT

#2

RT

T #

3

Page 35: 2_tcp

35

Pág. 68

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Cálculo del RTO a partir de RTT

• RFC 2988:– Un emisor TCP mantiene dos variables para el cálculo:

• SRTT (smoothed round-trip time)

• RTTVAR (round-trip time variation)

– Algoritmo para el cálculo del RTO:1. Mientras no se tenga una medida de RTT:

RTO 3 s

(si hay que retransmitir se aplica el algoritmo de la siguiente transparencia)

2. Cuando se tiene la primera medida del RTT (R):SRTT R

RTTVAR R/2

RTO SRTT + 4*RTTVAR

3. Cuando se obtiene una nueva medida del RTT (R'):RRTVAR (1 - )*RTTVAR + *|SRTT - R'|

SRTT (1 - )*SRTT + *R'

= 1/8 ; = 1/4 (Jacobson, 1988)

RTO SRTT + 4*RTTVAR

Pág. 69

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Algoritmo de Karn/Partridge

• Problema de ambigüedad de los asentimientos cuando se produce una retransmisión:

– Si se recibe un asentimiento de un segmento retransmitido, el emisor no sabe si el asentimiento corresponde al segmento original o al segmento retransmitido.

• Algoritmo de Karn/Partridge:

– Cada vez que TCP retransmite un segmento, se paran la medidas de RTT, hasta que se reciba un asentimiento asociado con un segmento no retransmitido:

• Si es preciso se reutiliza el último RTO.

– Cada vez que se retransmite un segmento, el valor del RTO se establece de la forma siguiente (“backoff exponencial”):

sRTORTO nn )64,2(min1

Page 36: 2_tcp

36

Pág. 70

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Control de la congestión

• La mayoría de segmentos perdidos se deben a

problemas de congestión en la red.

• Los mecanismos de retransmisión:

– Valor de RTO en función del RTT.

– “Backoff exponencial”.

• Algoritmos específicos:

– “Slow start” [Jacobson 88].

– “Congestion avoidance” [Jacobson 88].

– “Fast retransmit” y “fast recovery” [Jacobson 90].

Pág. 71

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

“Congestion avoidance”

• Se considera que existe congestión cuando se pierden segmentos:– Vence el temporizador de retransmisión.

– Llegan asentimientos duplicados (generados cuando llegan segmentos fuera de secuencia).

• Se evita la congestión empleado los algoritmos de “slow start” y “congestion avoidance” juntos:– cwnd debe decrecer “mucho” cuando aumenta la congestión.

– cwnd debe crecer “lentamente” cuando la congestión mejora.

• Se introduce la variable ssthresh (“Slow Start Threshold Size”):– Si cwnd <= ssthresh TCP en modo “slow start”.

– Si cwnd > ssthresh TCP en modo “congestion avoidance”.

Page 37: 2_tcp

37

Pág. 72

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

“Slow start” + “Congestion avoidance”

1. Valores iniciales:– cwnd=1(segmento) y ssthresh=65535 octetos.

2. El emisor puede transmitir el mínimo entre ventana anunciada y ventana de congestión, es decir, ventana efectiva.

3. Si se detecta congestión:– stthresh = max(2 segmentos, ventana_efectiva/2).

– Si es debida a un timeout además cwnd=1(segmento).

4. Cuando se recibe un asentimiento de nuevos datos:– Si estamos en “slow start” (cwnd <= ssthresh):

• cwnd se actualiza a (cwnd + 1) (segmentos).

– Si estamos en “congestion avoidance” (cwnd > ssthresh):

• cwnd se actualiza a (cwnd + 1/cwnd)(segmentos)

Pág. 73

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

“Slow start” + “Congestion avoidance”

0

2

4

6

8

10

12

14

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

RTT

cw

nd

(M

SS

)

threshold

Timeout

threshold

Page 38: 2_tcp

38

Pág. 74

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

“Fast retransmit ” y “Fast recovery”

• “Fast retransmit” se aplica cuando se reciben tres o más

asentimientos duplicados:

– Motivo: si TCP recibe un segmento fuera de secuencia debe

generar sin retardos un asentimiento (duplicado).

– Algoritmo:

• Se envía inmediatamente (sin esperar a que venza el “timeout”

correspondiente) el segmento que parece que se ha perdido.

• Actualiza el valor de:

ssthresh=max(2 segmentos, ventana_efectiva/2)

• Entra en “slow start” cwnd=1(segmentos).

• “Fast recovery” evita entrar en modo “slow start” después de

un “fast retransmit”:

– Motivo: si se reciben asentimientos es que fluyen los datos.

Pág. 75

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

“Fast retransmit ” + “Fast recovery”

• En la práctica ambos algoritmos se implementan juntos,

así cuando se recibe el tercer ACK duplicado:

1. Realiza los siguientes pasos:

• ssthresh=max(2 segmentos, ventana_efectiva/2).

• se retransmite el segmento perdido.

• cwnd=(ssthresh+3)(segmentos).

3. Cada vez que llega un ACK duplicado:

• cwnd se actualiza a (cwnd+1)(segmentos).

• transmite un segmento si se puede.

4. Cuando llega un ACK de nuevos datos:

• cwnd=ssthresh (segmentos).

Page 39: 2_tcp

39

Pág. 76

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

“Fast retransmit ” + “Fast recovery”

Tiempo

CongestionWindow

Slow startinicial

Fast Retransmit

and Recovery

Slow start

Timeouts

Pág. 77

TCP AVANZADO

ÍNDICE

6. Temporizador persistente:

A. Síndrome de la ventana tonta (“Silly window syndrome”)

Page 40: 2_tcp

40

Pág. 78

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

Temporizador persistente

• En TCP puede ocurrir:

– El receptor cierre la ventana ofrecida (tamaño cero).

– El receptor envía un asentimiento para abrir la ventana pero este segmento se pierde.

– Como los asentimientos no se envían de forma fiable, podría darse una situación de “deadlock”.

• Solución a través del temporizador persistente:

– El emisor envía segmentos (“window probe”) periódicamente para saber si la ventana se ha abierto.

– La periodicidad de estos segmentos la establece el temporizador persistente.

Pág. 79

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

Temporizador persistente: Ejemplo

1 0.0 bsdi.1027>svr4.5555: P 1:1025(1024) ack 1 win 4096

2 0.191961(0.1920) svr4.5555>bsdi.1027: . ack 1025 win 4096

3 0.196950(0.0050) bsdi.1027>svr4.5555: . 1025:2049(1024) ack 1 win 4096

4 0.200340(0.0034) bsdi.1027>svr4.5555: . 2049:3073(1024) ack 1 win 4096

5 0.207506(0.0072) svr4.5555>bsdi.1027: . ack 3073 win 4096

6 0.212676(0.0052) bsdi.1027>svr4.5555: . 3073:4097(1024) ack 1 win 4096

7 0.216113(0.0034) bsdi.1027>svr4.5555: P 4097:5121(1024) ack 1 win 4096

8 0.219997(0.0039) bsdi.1027>svr4.5555: P 5121:6145(1024) ack 1 win 4096

9 0.227882(0.0079) svr4.5555>bsdi.1027: . ack 5121 win 4096

10 0.233012(0.0051) bsdi.1027>svr4.5555: P 6145:7169(1024) ack 1 win 4096

11 0.237014(0.0040) bsdi.1027>svr4.5555: P 7169:8193(1024) ack 1 win 4096

12 0.240961(0.0039) bsdi.1027>svr4.5555: P 8193:9217(1024) ack 1 win 4096

13 0.402143(0.1612) svr4.5555>bsdi.1027: . ack 9217 win 0

• El servidor (svr4) está dormido durante 100000 segundos, por lo tanto no leerá los datos recibidos:

svr4 % sock –i –s –P100000 5555

• El cliente (bsdi) realiza escrituras de 1024 octetos.

NOTA: Antes de cerrar la ventana acepta 9216 octetos es por motivos de implementación del

stack TCP/IP de svr4.

Page 41: 2_tcp

41

Pág. 80

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

Temporizador persistente: Ejemplo

14 5.351561(4.9494) bsdi.1027>svr4.5555: . 9217:9218(1) ack 1 win 4096

15 5.355571(0.0040) svr4.5555>bsdi.1027: . ack 9217 win 0

16 10.351714(4.9961) bsdi.1027>svr4.5555: . 9217:9218(1) ack 1 win 4096

17 10.355670(0.0040) svr4.5555>bsdi.1027: . ack 9217 win 0

18 16.351881(5.9962) bsdi.1027>svr4.5555: . 9217:9218(1) ack 1 win 4096

19 16.355849(0.0040) svr4.5555>bsdi.1027: . ack 9217 win 0

20 28.352213(11.9964) bsdi.1027>svr4.5555: . 9217:9218(1) ack 1 win 4096

21 28.356178(0.0040) svr4.5555>bsdi.1027: . ack 9217 win 0

22 52.352874(23.9967) bsdi.1027>svr4.5555: . 9217:9218(1) ack 1 win 4096

23 52.356839(0.0040) svr4.5555>bsdi.1027: . ack 9217 win 0

24 100.354224(47.9974) bsdi.1027>svr4.5555: . 9217:9218(1) ack 1 win 4096

25 100.358207(0.0040) svr4.5555>bsdi.1027: . ack 9217 win 0

26 160.355914(59.9977) bsdi.1027>svr4.5555: . 9217:9218(1) ack 1 win 4096

Activa el temporizador persistente (envía “window probe” ~5 s después)

Envía “window probe” ~5 s después

Envía “window probe” ~6 s después

Envía “window probe” ~12 s después

Envía “window probe” ~24 s después

Envía “window probe” ~48 s después

Envía “window probe” ~60 s después

Pág. 81

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

Temporizador persistente: Ejemplo• Normalmente el temporizador persistente sigue un mecanismo de

“backoff exponencial”.– ¿Por qué en la traza son 5, 6, 12, 24, 48, 60?

• El valor debe estar entre 5 y 60 segundos.

• Por ejemplo, para un LAN típicamente:– Primer valor = 1,5 s 5 s

– Segundo valor = 1,5 * 2 = 3 s 5 s

– Tercer valor = 3 * 2 = 6 s

– …

– Séptimo valor = 2 * 48 = 96 s 60 s

• El segmento de “window probe” contiene un octeto:– TCP puede enviar un octeto más allá de la ventana ofrecida.

– NOTA: en la traza los ACKs no asienten este octeto este octeto debe retransmitirse cuando se abra la ventana.

• TCP continúa enviando “window probe” (cada 60 s) hasta que:– Se abre la ventana.

– Finaliza la aplicación.

Page 42: 2_tcp

42

Pág. 82

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

“Silly window syndrome”

• Es un efecto que se puede producir en todos los protocolos

que emplean un mecanismo de ventana deslizante para el

control de flujo.

• Problema: pueden intercambiarse pequeñas cantidades de

datos en una conexión en vez de segmentos completos

(MSS):

– El receptor anuncia ventana de tamaño pequeño, en vez de

esperar y propagar una ventana mayor.

– El emisor transmite pequeñas cantidades de datos, en vez de

esperar por datos adicionales que completen el MSS.

• Solución: ambos extremos tienen que evitar el “silly window

syndrome” (SWS).

Pág. 83

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

Evitar SWS en el receptor

• No debe anunciar ventanas de tamaño “pequeño”:

– No anunciar una ventana mayor hasta que la ventana pueda

incrementarse hasta:

• MSS que está recibiendo, o

• La mitad del buffer del receptor.

(el mínimo de los dos valores)

Page 43: 2_tcp

43

Pág. 84

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

Evitar SWS en el emisor• No transmite hasta que una de las siguientes condiciones se

cumpla:

a) Pueda enviarse un segmento completo (MSS).

b) Pueda enviarse al menos la mitad del tamaño máximo de la ventana que ha anunciado el otro extremo.

c) Pueda enviar todos los datos disponibles siempre que:

• Si está habilitado Nagle: no tenga ningún segmento enviado anteriormente pendiente de asentimiento, o

• Si está deshabilitado Nagle.

• Consideraciones:

– La condición (b) aborda el problema de receptores que anuncian ventanas de tamaño pequeño (menor que el MSS). Esta condición sólo se observa con host antiguos.

– La condición (c) es el algoritmo de Nagle.

Pág. 85

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

SWS: Ejemplo

• Programa cliente, realiza 6 escrituras de 1024 octetos:

sun% sock –i –n6 bsdi 7777

• Programa servidor, se detiene 4 s después de la primera

escritura, y 2 s después de cada una de las siguientes:

bsdi% sock –i –s –P4 –p2 –r256 7777

La aplicación realiza lecturas de 256 octetos.

MSS=1024B

Page 44: 2_tcp

44

Pág. 86

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

SWS: EjemploTiempo

#

segmentoAcción

buffer receptor

(4096)

Envía TCP Recibe TCP Aplicación Datos Disponible

0.000 1 1:1025(1024) 1024 3072

0.002 2 1025:2049(1024) 2048 2048

0.003 3 2049:3073(1024) 3072 1024

0.005 4 3073:4097(1024) 4096 0

0.170 5 ACK 4097, WIN 0

3.99 read 256 3840 256

5.151 6 4097:4098(1) 3841 255

5.17 7 ACK 4098, WIN 0

5.99 read 256 3585 511

7.99 read 256 3329 767

9.99 read 256 3073 1023

10.151 8 4098:4099(1) 3074 1022

10.170 9 ACK 4099, WIN 0

11.99 read 256 2818 1278

13.99 read 256 2562 1534

Pág. 87

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

SWS: EjemploTiempo

#

segmentoAcción

buffer receptor

(4096)

Envía TCP Recibe TCP Aplicación Datos Disponible

15.151 10 4099:4100(1) 2563 1533

15.170 11 ACK 4100,WIN 1533

15.172 12 4100:5124(1024) 3587 509

15.730 13 ACK 5124,WIN 509

15.99 read 256 3331 765

17.99 read 256 3075 1021

19.99 read 256 2819 1277

20.151 14 5124:5633(509) 3328 768

20.170 15 ACK 5633, WIN 0

21.99 read 256 3072 1024

23.99 read 256 2816 1280

25.151 16 5633:5634(1) 2817 1279

25.170 17 ACK 5634,WIN 1279

25.171 18 FIN 5634:6145(511) 3328 768

25.174 19 ACK 6146,WIN 767

Page 45: 2_tcp

45

Pág. 88

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

SWS: EjemploTiempo

#

segmentoAcción

buffer receptor

(4096)

Envía TCP Recibe TCP Aplicación Datos Disponible

25.99 read 256 3072 1024

27.99 read 256 2816 1280

29.99 read 256 2560 1536

31.99 read 256 2304 1792

33.99 read 256 2048 2048

35.99 read 256 1792 2304

37.99 read 256 1536 2560

39.99 read 256 1280 2816

39.99 20 ACK 6146, WIN 2816

41.99 read 256 1024 3072

43.99 read 256 768 3328

45.99 read 256 512 3584

47.99 read 256 256 3840

49.99 read 256 0 4096

51.99 read 256 (EOF) 0 4096

Pág. 89

TCP AVANZADO-TEMPORIZADOR PERSISTENTE

SWS: Ejemplo• Segmento 6: Vence el temporizador de persistencia.

• Segmento 8: Vence el temporizador de persistencia.

• Segmento 10 y 11: Vence el temporizador de persistencia y se

anuncia un tamaño de ventana de 1533 (mayor que el MSS).

• Segmento 13: Se anuncia un tamaño de ventana de 509 porque

sino produciríamos un “estrechamiento” de la ventana.

• Segmento 16 y 17: Vence el temporizador de persistencia y se

anuncia un tamaño de ventana de 1279 (mayor que el MSS).

• Segmento 19: FIN ocupa un número de secuencia y también un

espacio en el buffer de recepción.

• Segmento 20: Anuncia un nuevo tamaño de ventana porque puede

aumentarse en más de la mitad del buffer del receptor (dependiente

de la implementación, podría enviarlo antes)

Page 46: 2_tcp

46

Pág. 90

TCP AVANZADO

ÍNDICE

7. Temporizador “keepalive”.

Pág. 91

TCP AVANZADO-TIMEOUTS Y RETRANSMISIONES

Temporizador de “keepalive”

• Aunque no exista intercambio de datos no se cierra la

conexión TCP (no existen mecanismos de “polling”).

• Se introduce en TCP el temporizador de “keepalive” para

detectar inactividad en el otro extremo de la conexión.

• Algoritmo: si no existe actividad en dos horas, un extremo

envía un segmento de prueba a otro extremo, puede ocurrir:

– Responde normalmente se activa de nuevo el temporizador.

– No responde (caído, reinicializado, o no alcanzable) se

envían hasta 10 segmentos de prueba cada 75 s antes de dar

por finalizada la conexión.

– Se recibe un reset (caído o reinicializado) finaliza la

conexión.

Page 47: 2_tcp

47

Pág. 92

TCP AVANZADO

ÍNDICE

8. Opciones TCP.

Pág. 93

TCP AVANZADO-INTRODUCCIÓN

Opciones: escala del tamaño de ventana

• TCP define 2 octetos en la cabecera TCP para el tamaño de ventana (máximo valor de la ventana 65536 octetos).

• Este tamaño máximo es insuficiente y puede empeorar las prestaciones de TCP.

• Solución propuesta en la RFC 1323: – Se define una opción para multiplicar este campo por un valor.

• La opción del tamaño de ventana sólo puede aparecer en el segmento SYN, y ocupa tres octetos en el campo opciones de la cabecera TCP:– Valor mínimo: 1

– Valor máximo: 14 (permite ventanas de 65536*214, aprox 1 Gb)

Tipo=3

(1 octeto)

Longitud=3

(1 octeto)

Valor

(1 octeto)

Campos opciones TCP: escala del tamaño de ventana

Basadas en material de Rafael Sánchez

Page 48: 2_tcp

48

Pág. 94

TCP AVANZADO-INTRODUCCIÓN

Opciones: sello temporal

• Permite al emisor añadir información temporal en cada segmento.

• Resuelve dos problemas:– Medidas incorrectas de RTT.

– Protección contra números de secuencia repetidos (PAWS).

• Solución propuesta en la RFC 1323:– Medidas del RTT:

• El emisor añade información temporal y el receptor hace eco.

• No hace falta sincronización emisor-receptor porque se basa en el reloj del emisor.

– Protección contra número de secuencia repetidos:• Se identifica los segmentos por el sello temporal y el número de secuencia.

Tipo=8

(1 octeto)

Longitud=10

(1 octeto)

Valor sello temporal

(4 octetos)

Campos opciones TCP: sello temporal

Valor eco sello temporal

(4 octetos)

Basadas en material de Rafael Sánchez

Pág. 95

TCP AVANZADO-INTRODUCCIÓN

Opciones: asentimientos selectivos (1/2)

• Información recibida en ACK acumulados es limitada:

– Si se pierde un segmento, segmentos posteriores correctamente recibidos no se asienten

– Si se pierde un segmento, el emisor debe esperar un RTT para averiguar el siguiente segmento perdido.

• Mediante los asentimientos selectivos (RFC 2018), el receptor informa al emisor de los segmentos recibidos correctamente, y éste sólo reenvía los que se han perdido

• Se implementa en el campo de opciones:

– 2 octetos en el SYN para habilitar esta opción entre emisor-receptor

– 2 octetos + N bloques de 8 octetos en segmentos de datos (máximo 4 bloques ya que máximo cabecera TCP es 60 octetos)

Basadas en material de Rafael Sánchez

Page 49: 2_tcp

49

Pág. 96

TCP AVANZADO-INTRODUCCIÓN

Opciones: asentimientos selectivos (2/2)

Tipo=5

(1 octeto)

Longitud

(1 octeto)

Secuencia inicial (*) bloque 1

(4 octetos)

Campos opciones TCP: asentimientos selectivos (durante la conexión)

Secuencia final (*) bloque 1

(4 octetos)

Secuencia inicial bloque n

(4 octetos)

Secuencia final bloque n

(4 octetos)

…………………………………………………………………..

Tipo=4

(1 octeto)

Longitud=2

(1 octeto)

Campos opciones TCP: asentimientos selectivos (durante handshake)

Basadas en material de Rafael Sánchez

(*) Terminología RFC 2018 para “secuencia inicial” : Left Edge

Terminología RFC 2018 para “secuencia final”: Right Edge