Capa de transporte en Internet Protocolos TCP y UDP Tipos de servicios ofrecidos TCP (Transmission Control Protocol) Orientado a conexión Confiable UDP (User Datagram Protocol) No orientado a conexión No confiable 2 TCP: Transmission Control Protocol Objetivo: Flujo confiable de bytes sobre una red no confiable Debe funcionar sobre IP (que no da garantías) Diferentes tecnologías de red en el medio Robusto frente a problemas de la red Recibe flujo de la capa superior y lo divide en bloques que envía en segmentos independientes (uno en cada paquete IP) El receptor lo re-ensambla 3 Modelo de servicio de TCP Conexión entre 2 “sockets” Servicio full-duplex y punto a punto Identificación de los sockets formada por: dirección de capa de red (dirección IP) puerto (equivalente a TSAP) Las conexiones se identifican con las direcciones de los sockets de ambos extremos: IP origen puerto de origen IP destino puerto destino 4 Mensajes y bytes TCP no mantiene las fronteras entre los bloques recibidos de la capa de aplicación, ni los recibidos de la red Ejemplo: Un mensaje (ABCD) es enviado en 4 paquetes de capa 3 separados, pero devuelto a la aplicación destino como un conjunto de bytes ABCD 5 Protocolo TCP Unidad de datos (TPDU) = Segmento Número de secuencia de 32 bits Se numeran los bytes, no los segmentos Encabezado de 20 bytes (+ opciones) Tamaño máximo del segmento carga del paquete IP: máximo 64 Kbytes MTU (maximun transfer unit) de la red, típico 1500 bytes. TCP trata de evitar fragmentación en capas inferiores Usa protocolo de ventanas deslizantes de tamaño de ventana variable 6 Formato del segmento TCP Puerto de origen Puerto de destino Número de secuencia Número de reconocimiento Largo encab. U A P R S F Suma comprobación Tamaño de ventana Puntero de urgente Opciones (opcional) Datos (opcional) 32 bits 7 Asignación de puertos 16 bits o sea 0 a 65535 Puertos 0 - 1023: puertos bien conocidos (definidos en la RFC 1700) Puertos 1024 al 65535: se pueden usar libremente 8 Detección de errores Simple suma de comprobación (16 bits) El mensaje se divide en palabras de 16 bits, y se hace la suma en complemento a 1 Se hace el complemento a 1 (invertir 1s y 0s) Se hace sobre los datos, el encabezado, y un "pseudoencabezado" de capa 3 9 Pseudo encabezado para suma de comprobación Se utiliza en el cálculo del checksum de TCP Checksum se hace sobre pseudoencabezado + todo el contenido del segmento (incluyendo datos) Viola la independencia de capas Se modifica al cambiar de versión de IP! Dirección IP de origen Dirección IP de destino 00000000 Protocolo Largo del segmento (encabezado+datos) 32 bits 10 Banderas S - Syn (sincronización inicial de números de secuencia en el establecimiento de conexión) F - Fin (solicitud de fin de conexión) R - Reset (cierre abrupto de conexión) A - Campo de reconocimiento válido U - datos urgentes (prácticamente en desuso) P - Push (se pide celeridad para enviar los datos a la capa de aplicación, prácticamente en desuso) 11 Opciones El campo de Opciones permite intercambiar datos no obligatorios Se han ido agregando nuevas opciones Maximum Segment Size (MSS) Escala de la ventana (WSCALE) Asentimiento selectivo (SACK) Timestamp Asentimiento negativo (NAK) Otras 12 Opciones (cont.) MSS: observamos el tamaño máximo de paquete que podemos mandar (dado por las capas inferiores), y descontamos los encabezados. Se envía en primer segmento Por ejemplo, en ethernet el máximo es 1500 bytes, por lo que MSS es 1460 NACK: avisar que no recibí un determinado segmento (no se usa) Otras: veremos luego 13 Problemas con los segmentos Pérdidas de segmentos por rutas congestionadas, enlaces caídos o errores Segmentos que llegan fuera de orden Segmentos que se duplican por retardos que obligan a la retransmisión o por problemas en las capas inferiores 14 Establecimiento de conexión en TCP Originador Destinatario Solicitud de conexión Bandera SYN = 1 Bandera ACK = 0 Secuencia = x Respuesta Bandera SYN = 1 Bandera ACK = 1 Secuencia = y Reconocimiento = x + 1 Confirmación Bandera SYN = 0 Bandera ACK = 1 Secuencia = x + 1 Reconocimiento = y + 1 En este punto el originador da por establecida la conexión En este punto el destinatario da por establecida la conexión 15 Corte de conexiónIndicación en TCP de corte de A Host A Host B Datos (sec=z) +datos ACK En este punto el host A da por cortada la conexión (él no va a enviar más datos) Bandera FIN = 1 Bandera ACK = 1 Secuencia = w Reconocimiento = z + 1 Confirmación de corte Bandera FIN = 0 Bandera ACK = 1 Secuencia = z + 1 Reconocimiento = w + 1 Más datos! B puede seguir enviando datos Indicación de corte de B Bandera FIN = 1 Bandera ACK = 1 Secuencia = t Reconocimiento = w + 1 Confirmación de corte Bandera FIN = 0 Bandera ACK = 1 Secuencia = w + 1 Reconocimiento = t + B1 En este punto el host da por cortada la conexión (él no va a enviar más datos)16 Corte abrupto de conexión Host A Host B Datos (sec=z) Indicación de corte de A Bandera FIN = 1 Bandera ACK = 1 Secuencia = w Reconocimiento = z + 1 Confirmación de corte Bandera FIN = 0 Bandera ACK = 1 Secuencia = z + 1 Reconocimiento = w + 1 +datos RST La aplicación en el host A cierra la conexión y deja de escuchar (por ejemplo termina)!! Reset de conexión Bandera FIN = 0 Bandera ACK = 1 Bandera RST = 1 Secuencia = w+1 Reconocimiento = z+1 17 Corte abrupto de conexión Los datos enviados luego de la confirmación de corte de B hacia A se pierden Los últimos datos enviados por B y reconocidos son hasta el byte “z”, cualquier otro dato posterior debe asumirse que se perdió (a menos que recibamos ACK) 18 Manejo de los números de secuencia y reconocimiento En TCP se numeran los bytes, no los segmentos Un segmento sin datos no incrementa el número de secuencia El establecimiento y fin de conexión consumen un (1) número de secuencia En el reconocimiento se indica el próximo nº de secuencia esperado 19 Ejemplo: establecimiento Flags: SYN=1 , ACK=0 Seq=11, Ack= ?, 0 bytes carg a útil CK=1 A , 1 = N Y S : Flags arga útil c s e t y b 0 , =12 Seq=32, Ack Flags: SYN=0 , ACK=1 Seq=12, Ack= 33, 0 bytes ca rga útil 20 Ejemplo: transmisión de datos Seq=12, Ack= 33, 15 bytes carga útil ga útil r a c s e t y b 0 =27, Seq=33, Ack Seq=27, Ack= 33, 1000 byte s carga útil Seq=1027, A ck=33, 10 by tes carga útil rga útil a c s e t y b 4 =1037, Seq=33, Ack Seq=1037, A ck=37, 0 byte s carga útil 21 Ejemplo: FIN simétrico Flags: FIN=1, ACK=1 Seq=1037, A ck=37, 0 byte s carga útil , ACK=1 carga útil Flags: FIN=0 s e t y b 0 , 8 =103 Seq=37, Ack , ACK=1 carga útil Flags: FIN=1 s e t y b 0 , 8 =103 Seq=37, Ack B podría enviar datos Flags: FIN=0, ACK=1 Seq=1038, A ck=38, 0 byte s carga útil 22 Estados de la conexión Punteado: camino del servidor Continuo: camino del cliente 23 Significado de los estados 24 Control de Flujo Control de flujo: adaptar la velocidad de envío a la capacidad del receptor El que recibe informa sobre el tamaño de la ventana (tamaño de buffer disponible) Campo "Tamaño de ventana” en encabezado TCP De esta manera, el receptor controla la cantidad máxima de datos que el transmisor puede enviarle en cada momento Si la aplicación no lee los datos suficientemente rápido, la ventana del receptor decrecerá Puede llegar a “0” si se llena todo el buffer 25 Posible bloqueo por anuncio de ventana de tamaño 0 Problema: El receptor anuncia ventana = 0 Más tarde cuando tiene ventana disponible anuncia el nuevo valor de ventana Este nuevo anuncio se pierde Se produce un bloqueo Solución: El emisor enviará un segmento que fuerce una respuesta del receptor y así obtener un nuevo anuncio de ventana: Enviar un segmento con número de secuencia menor al actual (y sin datos) O enviar el próximo byte (que podría ser descartado) 26 Manejo de ventana en TCP 27 Problemas de performance Si se envían segmentos con pocos datos de usuario, el peso de los encabezados es alto y por tanto la performance baja Cómo evitar enviar muchos segmentos “chicos”? Piggybacking Algoritmo de Nagle Síndrome de ventana tonta y solución de Clark 28 Piggybacking Evitar enviar segmentos que solamente tengan reconocimientos Se permite a TCP la posibilidad de retardar el envío de reconocimiento (hasta 500 ms) para esperar a tener datos para transmitir 29 Algoritmo de Nagle Se aplica en el transmisor La idea es que en tránsito no haya más de un segmento “chico” Se envía el primer segmento y se espera el ACK Mientras tanto se acumulan los datos de la capa superior de modo que el próximo segmento vaya más lleno Se puede enviar también cuando se llena media ventana o el tamaño máximo del segmento (MSS) Malo en aplicaciones interactivas remotas (mouse) 30 Síndrome de la ventana tonta: Solución de Clark Si el receptor anuncia 1 byte o un tamaño de ventana muy pequeño, está obligando al transmisor a enviar segmentos “chicos” La Solución de Clark es No avisar disponibilidad de ventana hasta tener libre un segmento de tamaño máximo (MSS) o la mitad del buffer 31 Síndrome de Ventana tonta 32 Control de congestión No mandar más datos que los que la red puede aceptar Complementario al control de flujo Idea: Entubado Si tenemos disponible un ancho de banda B, y el retardo de ida y vuelta es 2T, queremos mandar: V = B*2T Problema: Cómo conocer B 33 Control de congestión en TCP Hipótesis: las pérdidas de paquetes son por congestión (los enlaces son buenos) Problema en enlaces inalámbricos con muchas pérdidas El transmisor maneja una ventana de congestión, que actualiza dinámicamente de acuerdo a las condiciones de la red Mantiene también un valor "Umbral" El transmisor no permite que haya en tránsito más bytes que los que indica la ventana de congestión 34 Ventana de congestión El tamaño de la Ventana comienza en 1 MSS (hay variantes) y 64 Kbytes como umbral Fase “Slow start”: agrega 1 byte a la ventana por cada byte reconocido Al reconocerse toda la ventana enviada, esta se duplica A partir del umbral sigue linealmente Se aumenta 1 segmento por cada ventana completa reconocida Si hay pérdidas (timeout): Se fija el umbral a la mitad del valor de la ventana actual (NO a la mitad del umbral actual), y baja la ventana a 1 segmento 35 Ventana de congestión 36 Variantes modernas Fast retransmit/fast recovery Si me doy cuenta que se perdió un solo segmento (recibo SACK o recibo ACKs duplicados), retransmito y bajo umbral, pero la ventana la pongo en el valor del umbral La suposición es que se perdió por un evento aislado, o que la congestión es “leve” Se están investigando nuevas maneras de realizar el control de congestión Eficiencia Equidad en el reparto de recursos 37 Otras opciones "modernas" Window Scale: ventana máxima de 64 KB “quedó chica” Calcular la velocidad máxima de transmisión en un enlace de 1Gbps y 100ms de RTT con una ventana de receptor de 64 KB La "escala de ventana" indica cuantos bits "0" agregar a la derecha SACK (Reconocimiento selectivo) Permite indicar qué segmentos se recibieron correctamente posteriores al indicado en el campo ACK del segmento 38 Reuso de los números de secuencia Enlace de 56 Kbps -> los números de secuencia se reutilizan en 3.6 días 1 Gbps -> se reutilizan en 17 segundos!! Tiempo de vida máximo asumido por TCP de un paquete en la red: 120 Segundos! Solución: Se utiliza el número de secuencia junto con una opción Timestamp para detectar duplicados viejos Receptor debe verificar que el valor de timestamp sea monótono creciente, descartando segmentos antiguos Timestamp también sirve para mejorar el cálculo del RTT 39 Gestión de temporizadores TCP maneja varios temporizadores, el más importante es el de retransmisión Jacobson: RTT[n] = a RTT[n-1] + (1-a) M[n] D[n] = b D[n] + (1-b) |RTT[n] – M[n]| Timeout = RTT + 4 * D a = 7/8 b = 3/4 Karn: No calcular sobre retransmisiones Se duplica el timeout a cada pérdida Moderno: se utiliza la opción Timestamp para mejorar el cálculo del RTT 40 UDP: User Datagram Protocol Servicio de datagramas, no orientado a conexión Básicamente es un paquete IP con un encabezado mínimo de capa de transporte Puerto de origen Puerto de destino Largo del segmento Checksum Datos (opcional) 32 bits 41