Bloque III: El nivel de transporte
Tema 7: Intercambio de datos TCP
2RC Bloque III Tema 7
Índice• Bloque III: El nivel de transporte
– Tema 7: Intercambio de datos TCP• Flujo de datos interactivo
– ACKs retardados– Algoritmo de Nagle– Modo de urgencia
• Flujo de datos no interactivo– Control de flujo– Control de congestión
• Referencias– Capítulo 3 de “Redes de Computadores: Un enfoque
descendente basdado en Internet”. James F. Kurose, Keith W. Ross. Addison Wesley, 2ª edición. 2003.
– Capítulos 19 y 20 de “TCP/IP Illustrated, Volume 1: The Protocols”, W. Richard Stevens, Addison Wesley, 1994.
3RC Bloque III Tema 7
TCP: Intercambio de datos• En TCP se consideran dos tipos de tráfico de datos:
– Interactivo: gran número de segmentos de pequeño tamaño (menos de 10 bytes). Por ejemplo: telnet, rlogin.
– No Interactivo: segmentos de gran tamaño, normalmente el máximo permitido por las limitaciones de la red. Por ejemplo: FTP, email.
Aplicaciónorigen
TCP receptorTCP emisor
Aplicacióndestino
Buffer Buffer
Escribir
Enviar
Leer2048 bytes
1024 bytes
1024 bytes
512 512512 512
4RC Bloque III Tema 7
Flujo de datos interactivo• Funcionamiento del telnet o rlogin:
– Envío de la tecla pulsada por el cliente– ACK de la tecla pulsada por el cliente– Eco de la tecla desde el servidor– ACK del eco
Cliente Servidor
Dato (tecla pulsada)
ACK del dato
ACK del eco del dato
Pulsar tecla
Nivel de aplicación
eco del dato
Pantalla
eco
5RC Bloque III Tema 7
Flujo de datos interactivo• ACKs retardados:
– Objetivo: enviar el ACK + eco en un único datagrama.• TCP no envía el ACK inmediatamente al recibir el dato, sino
que retarda la salida del ACK esperando un tiempo para ver si hay datos para enviarlos con el propio ACK.
• El tiempo de espera es de 200 mseg:– No en valor absoluto, sino que se utiliza un reloj que da ticks
cada 200 mseg.• Tanto en el cliente como en el servidor se utilizan los acks
retardados.200 msegs
ACK listo para ser enviadoACK retardado hasta el siguiente tick de reloj
6RC Bloque III Tema 7
ACKs retardadosCliente:1111 Servidor:rlogin
PSH 0:1(1), ACK 1 (d)
PSH 1:2 (1), ACK 1 (eco d)1
2
ACK 2PSH 1:2(1), ACK 2 (a)
PSH 2:3 (1), ACK 2 (eco a)
ACK 3PSH 2:3(1), ACK 3 (t)
PSH 3:4 (1), ACK 3 (eco t)
ACK 4
5
8
3
4
6
7
9
0.0
0.139955 ACK retardado
0.539943 ACK retardado
0.940112 ACK retardado
7RC Bloque III Tema 7
ACKs retardadosCliente:1111 Servidor:rlogin
PSH 3:4(1), ACK 4 (e)
PSH 4:5 (1), ACK 4 (eco e)10
11
ACK 5
PSH 4:5(1), ACK 5 (Enter)
PSH 5:7 (2), ACK 5 (CR, LF)
ACK 7
14
12
13
15
1.339994 ACK retardado
1.739974 ACK retardado
1.940176 ACK retardado
PSH 7:37 (30), ACK 5 (Wed Jan 26 …)
ACK 37
PSH 37:44 (7), ACK 37 (orca % )
ACK 44
17
19
16
18
2.140110 ACK retardado
8RC Bloque III Tema 7
Flujo de datos interactivo• El tráfico interactivo genera gran cantidad de paquetes de
tamaño muy pequeño (1 byte datos + 20 cab. TCP + 20 cab. IP = 41 bytes) = tinygrams.– En las redes de área local no presenta ningún problema– En las WAN supone una gran sobrecarga para la red.
• Algoritmo de Nagle:– Pretende resolver este problema, y se aplica en una
conexión TCP de tráfico interactivo en una red de área extensa.
– Enunciado: “Una conexión TCP puede tener un único segmento pequeño que no haya sido confirmado. No se pueden enviar otros segmentos hasta recibir un ACK. En cambio, esos datos se almacenan y son enviados por TCP al llegar el ACK.”
– Es autoajustable: cuanto más rápido lleguen los ACKs más rápido se enviarán los datos.
9RC Bloque III Tema 7
Algoritmo de NagleCliente:1111 Servidor:rlogin
PSH 5:6(1) ACK 47, win 4096
PSH 47:48 (1) ACK 6, win 81921
2
PSH 6:7 (1) ACK 48, win 4096
PSH 48:49 (1) ACK 7, win 8192 4
3
0.0
0.232457
PSH 7:9(2) ACK 49, win 4095
PSH 49:51 (2) ACK 9, win 81925
6
PSH 9:10 (1) ACK 51, win 4094
PSH 51:52 (1) ACK 10, win 8192 8
7
PSH 10:12 (2) ACK 52, win 40959
0.197694
0.4642570.437593
0.7077090.677658
0.9458620.917762
10RC Bloque III Tema 7
Algoritmo de NagleCliente:1111 Servidor:rlogin
PSH 52:54 (2) ACK 12, win 8192 10
PSH 12:14 (2) ACK 54, win 4094
PSH 54:56 (2) ACK 14, win 8192 13
111.187501
PSH 14:17(3) ACK 54, win 4096
PSH 56:59 (3) ACK 18, win 8191
14
16
PSH 18:21 (3) ACK 59, win 4093
PSH 59:60 (1) ACK 21, win 8189 18
17
1.157640
1.4280251.427852
1.762913
1.727608
1.997900
ACK 14, win 8190 12
PSH 17:18(1) ACK 56, win 4096151.4784291.457191
11RC Bloque III Tema 7
Algoritmo de Nagle• Se usan 9 segmentos para enviar 16 bytes de datos.• Segmentos 14 y 15 consecutivos, ¿cumplen el algoritmo de
Nagle?– Si, se corresponden con los ACKs 12 y 13,
respectivamente, que se han recibido casi en el mismo instante (0.2 msegs de diferencia).
• Segmento 12 es un ACK retardado (servidor cliente).• ACK = TCP (nivel de transporte)• Win = nivel de aplicación
• En algunos casos no interesa el algoritmo de Nagle.– Por ejemplo, al utilizar las XWindows es necesario enviar
mensajes pequeños (movimientos del ratón) sin retardos para conseguir una interacción real.
– En este caso, el algoritmo de Nagle puede introducir retardos adicionales al ejecutar una aplicación interactiva a través de una WAN, al generar eventos (pulsaciones, movimientos ratón, …) que producen datos multibyte.
12RC Bloque III Tema 7
Flag URG• Modo de urgencia: permite a un extremo indicar que
se han introducido datos urgentes en el flujo normal de datos.– Se activa el flag de Urgencia (URG)– Puntero de urgencia: offset a sumar al número de
secuencia de la cabecera TCP para obtener el número de secuencia del último byte de los datos urgentes.
• Se utiliza en aplicaciones como telnet y rlogin cuando se pulsa la tecla de interrupción. O en el FTP cuando se aborta la transferencia de un fichero.
13RC Bloque III Tema 7
Flujo de datos no interactivo• También llamado flujo de datos en masa (bulk data flow).• En este tipo de tráfico se generan pocos segmentos, pero de
gran tamaño.• El principal problema a resolver en este tipo de tráfico es el
control de flujo:– Evitar que un emisor rápido sature a un receptor lento.
• TCP utiliza una ventana deslizante: permite al emisor enviar múltiples paquetes antes de parar y esperar por el ACK, lo que da una mayor rapidez a este tipo de tráfico.
• Con un protocolo de ventana deslizante no es necesario confirmar todos los paquetes recibidos, sino que se pueden confirmar varios paquetes simultáneamente.
14RC Bloque III Tema 7
Control de flujoCliente:1111 Servidor:8888
PSH 1:1025 (1024) ACK 1, win 4096
ACK 2049, win 4096
1
2
7
SYN 13281:13281(0)win 4096, <MSS 1024>
SYN 45827:45827(0)
ACK 1, win 4096, <MSS 1024>
ACK 1, win 4096
PSH 1025:2049 (1024) ACK 1, win 4096
4
PSH 2049:3073 (1024) ACK 1, win 4096
5
3
6
ACK 3073, win 3072 8
PSH 3073:4097 (1024) ACK 1, win 40969
ACK 4097, win 4096 10
15RC Bloque III Tema 7
Control de flujoCliente:1111 Servidor:8888
PSH 4097:5121 (1024) ACK 1, win 4096
ACK 6145, win 4096 14
PSH 5121:6145 (1024) ACK 1, win 4096
11
PSH 6145:7169 (1024) ACK 1, win 4096
1213
PSH 7169:8193 (1024) ACK 1, win 409615
ACK 8193, win 4096 16
FIN 8193:8193 (0) ACK 1, win 409617
FIN 1:1 (0) ACK 8194, win 4096 18
ACK 2, win 409619
16RC Bloque III Tema 7
Control de flujo• El envío de los mensajes no es determinista, depende de
múltiples factores: la carga de la red, la carga del receptor y emisor, …
• TCP utiliza ACKs acumulativos:– ACK 2049: confirma que se ha recibido correctamente hasta
el 2048, y que el siguiente byte que se espera recibir es el 2049.
– Segmentos 7, 14 y 16 son ACKs acumulativos.• Flag PSH (PUSH): notificación del emisor al receptor para
enviar todos los datos recibidos a la aplicación.– Datos recibidos en el segmento PSH + datos almacenados
en el buffer– Permite al emisor notificar al receptor que puede pasar los
datos al receptor, que no es necesario esperar por más datos.
– No se puede especificar a nivel de aplicación. Es incluido automáticamente por TCP en cada grupo de datos transmitido.
17RC Bloque III Tema 7
Control de flujo• Emisor rápido, receptor lento
Cliente:1111 Servidor:8888
PSH 1:1025 (1024) ACK 1, win 4096
ACK 4097, win 0
1
2
8
SYN 13281:13281(0)win 4096, <MSS 1024>
SYN 45827:45827(0)
ACK 1, win 4096, <MSS 1024>
ACK 1, win 4096
PSH 1025:2049 (1024) ACK 1, win 4096
4
PSH 2049:3073 (1024) ACK 1, win 4096
5
3
6
ACK 4097, win 4096 9
PSH 3073:4097 (1024) ACK 1, win 40967Segmento
de actualizació
n de ventana
18RC Bloque III Tema 7
Control de flujo• Emisor rápido, receptor lento (continuación)
Cliente:1111 Servidor:8888
PSH 4097:5121 (1024) ACK 1, win 4096
ACK 8194, win 0 14
PSH 5121:6145 (1024) ACK 1, win 4096
10
PSH 6145:7169 (1024) ACK 1, win 4096
1112
FIN, PSH 7169:8193 (1024) ACK 1, win 409613
FIN 1:1 (0) ACK 8194, win 4096 16
ACK 2, win 409617
ACK 8194, win 4096 15
Segmento de
actualización de
ventana
19RC Bloque III Tema 7
Control de flujo• Ventana deslizante
– Funcionamiento:
– Ventana ofrecida (receptor): número de bytes que indica el receptor que puede recibir, en el momento de enviar el paquete.
– Ventana utilizable (emisor): número de bytes que se pueden enviar inmediatamente.
1 2 3 4 5 6 7 8 9 10 11 …
Enviado y ACK
Enviado y no ACK
Puede enviar
Imposible enviar
Ventana ofrecida (receptor) Ventana utilizable (emisor)
20RC Bloque III Tema 7
Control de flujo• Movimientos de la ventana:
– Cierre (el eje izquierdo se desplaza a la derecha): se envían y se agradecen datos.
– Apertura (el eje derecho se desplaza a la derecha): el proceso receptor lee los datos agradecidos, y libera espacio en el buffer.
– Reducción (el eje derecho se desplaza a la izquierda): no se produce en TCP.
Ventana
Cierre Reducción Apertura
21RC Bloque III Tema 7
Control de flujoCliente:1111 Servidor:8888
PSH 1:1025 (1024) ACK 1, win 4096
ACK 2049, win 4096
1
2
7
SYN 13281:13281(0)win 4096, <MSS 1024>
SYN 45827:45827(0)
ACK 1, win 4096, <MSS 1024>
ACK 1, win 4096
PSH 1025:2049 (1024) ACK 1, win 4096
4
PSH 2049:3073 (1024) ACK 1, win 4096
5
3
6
ACK 3073, win 3072 8
PSH 3073:4097 (1024) ACK 1, win 40969
ACK 4097, win 4096 10
22RC Bloque III Tema 7
Control de flujo• Movimientos de ventana sobre el ejemplo de control
de flujo:1024 2048 3072 4096 5120 6144 7168 8192
Segmento 2 win 4096
Segmentos 4, 5, 6 Datos
Segmento 7ACK 2049 Segmento 7 win 4096
Seg. 8ACK 3073 Segmento 8 win 3072
Seg. 9Datos
Seg. 10ACK 4097 Segmento 10 win 4096
Segmentos 11, 12, 13 Datos
Segmento 14ACK 6145 Segmento 14 win 4096
Seg. 15Datos
Segmento 16ACK 8193
23RC Bloque III Tema 7
Control de flujoCliente:1111 Servidor:8888
PSH 4097:5121 (1024) ACK 1, win 4096
ACK 6145, win 4096 14
PSH 5121:6145 (1024) ACK 1, win 4096
11
PSH 6145:7169 (1024) ACK 1, win 4096
1213
PSH 7169:8193 (1024) ACK 1, win 409615
ACK 8193, win 4096 16
FIN 8193:8193 (0) ACK 1, win 409617
FIN 1:1 (0) ACK 8194, win 4096 18
ACK 2, win 409619
24RC Bloque III Tema 7
Control de flujo• Conclusiones sobre el ejemplo de ventana
deslizante:– El emisor no tiene por que enviar una ventana
completa de datos.– Cada ACK recibido desplaza la ventana hacia la
derecha (el tamaño de ventana es relativo al ACK recibido).
– El tamaño de ventana puede descender, pero el extremo de la derecha no debe desplazarse a la izquierda.
– El receptor no tiene que esperar a que se llene la ventana para enviar un ACK.
25RC Bloque III Tema 7
Síndrome de la ventana tonta• El control de flujo de TCP puede provocar que se intercambien
pequeñas cantidades de datos, en lugar de esperar y enviar un segmento completo.
• Causas:– La aplicación receptora consume los datos muy lentamente– La aplicación emisora produce los datos muy lentamente
• En cualquier caso, los datos se envían con segmentos muy pequeños:– Uso ineficiente del ancho de banda– Incremento del procesamiento por parte de TCP
• Solución de Clark: no enviar notificaciones de ventana pequeñas (p.e. 1 byte).
• En cambio, cerrar la ventana completamente hasta que:– Hay espacio para un segmento entero (MSS)– Se ha liberado la mitad del espacio del buffer del receptor
(para buffers muy pequeños)
26RC Bloque III Tema 7
Flujo de datos no interactivo• El control de flujo evita que el emisor llegue a saturar
al receptor.• Esto es correcto en una LAN, sin embargo en un
entorno con routers intermedios el control de flujo no es suficiente.– Los routers intermedios también se puede saturar.
• Solución: Control de congestión (algoritmo de inicio lento)
Buffer de B
Buffer del router
27RC Bloque III Tema 7
Algoritmo de inicio lento• Algoritmo de inicio lento: “La velocidad a la que se inyectan
paquetes nuevos a la red es la velocidad a la que se reciben ACKs del otro extremo”.
• Para la implementación del algoritmo de inicio lento se trabaja con otra ventana, la ventana de congestión (cwnd), controlada únicamente por el emisor.
• El funcionamiento del algoritmo del inicio lento es muy simple:– Inicialmente, en el establecimiento de conexión, la ventana
de congestión se inicializa a 1 segmento.– Cada vez que se recibe un ACK se incrementa en 1 el valor
de la ventana de congestión.– El emisor puede enviar el mínimo entre la ventana ofrecida
por el receptor y la ventana de congestión.
28RC Bloque III Tema 7
Algoritmo de inicio lentoCliente:1111 Servidor:discard
1:513 (512) ACK 1, win 4096
ACK 1025, win 8192 5
513:1025 (512) ACK 1, win 4096
1
1025:1537 (512) ACK 1, win 4096
34
ACK 513, win 8192 2
ACK 1537, win 8192 8
1537:2049 (512) ACK 1, win 40962049:2561 (512) ACK 1, win 4096
67
2561:3073 (512) ACK 1, win 40963073:3585 (512) ACK 1, win 4096
910
cwnd = 1
cwnd = 2
cwnd = 3
cwnd = 4
29RC Bloque III Tema 7
Algoritmo de inicio lentoCliente:1111 Servidor:discard
FIN, PSH 3585:4097 (512) ACK 1, win 409613
ACK 2049, win 8192 11cwnd = 5
ACK 2561, win 8192 12cwnd = 6
ACK 3073, win 8192 14
ACK 3585, win 8192 15
ACK 4098, win 8192 16
FIN 1:1 (0) ACK 4098, win 8192 17
ACK 2, win 409618
30RC Bloque III Tema 7
Algoritmo de inicio lento• Segmentos de 512 bytes.• Al recibir el segmento 2 el emisor cwnd = 2
Envía dos segmentos más.• Al recibir el segmento 5 cwnd = 3 ¿Por qué no
envía tres segmentos más?– Segmento 5: ACK 1025– Siguiente segmento a enviar: 1537:2049 Bytes
enviados y pendientes de ACK: 15371025: 512 bytes (1 segmento)
– Segmentos a enviar: 3 (cwnd) – 1 (enviados y pendientes ACK) = 2 segmentos