ACKs – Aumenta utilización • Problemas de Pipelining con RDT – Rango de números de secuencia debe aumentar – Emisor y receptor deben tener en buffer más de un paquete (los que se han enviado pero no han recibido ACK) – Estas dos características dependen de en como el protocolo de transporte de datos responde a las perdidas, corrupción y paquetes demorados. ILI-256, Redes de Computadores 5
más de N paquetes sin ACK en el pipeline • [0, send_base – 1] Transmitidos y con ACK • [send_base, nextseqnum – 1] Enviados pero sin ACK • [nextseqnum, base + N – 1] Pueden ser enviados de inmediato • > base + N No pueden ser usados hasta tener ACK de send_base ILI-256, Redes de Computadores 8
la ventana (window size) • Por esto, GBN es un protocolo de ventana deslizante • Porque limitar la cantidad de paquetes sin ACK? O de otra manera, ¿Por qué no tener una ventana de tamaño infinito? – Control de congestión! ILI-256, Redes de Computadores 9
en un campo del header de tamaño fijo – [0, (2^k)-1] • Se ocupa modulo 2^k para toda la aritmética asociada a el número de secuencia – Pensar en un “anillo” de tamaño 2^k. – El último elemento ((2^k) – 1) , está seguido por el cero (0) • Veremos que en TCP, el número de secuencia (32 bits) sirve para numerar los bytes en el stream y no los paquetes (raaaaaaro =S) ILI-256, Redes de Computadores 10
de eventos – Invocación “desde arriba”: Manejar la disponibilidad de la ventana para enviar nuevos datos. • Devolviendo los datos a la aplicación • Implementación real – Buffer – A través de semáforo o flag (implementación real) ILI-256, Redes de Computadores 14
• Un ACK para un paquete con número de secuencia n, indica que todos los paquetes con número de secuencia hasta n fueron recibidos correctamente – Timeout: Reenvío de paquetes frente a perdida de paquetes o ACKs • Si se tiene timeout, emisor reenvía todos los paquetes que fueron enviados pero no recibieron ACK. ILI-256, Redes de Computadores 15
a estos eventos – Recepción de paquete: Enviar ACK solo si paquete se recibe correctamente y está en orden • Si el paquete tiene numeración n, entonces el último paquete entregada a la capa superior debe ser n – 1. Acá se envía ACK para paquete n. En otros casos, se descarta paquete y se envía ACK para n – 1. – Recordar ACKs acumulativos! ILI-256, Redes de Computadores 16
que tenía stop-and-wait. • Pero, tiene un problema – Escenario: Ventana de tamaño muy grande, ancho de banda x delay muy grande. – Esto implica que en un momento dado, hay muchos paquetes en el pipeline. – Problema: Si un paquete tiene un error, hay que retransmitir todos los paquetes de la ventana que no tengan ACK! • Ejemplo: Dictar texto. ILI-256, Redes de Computadores 18
retransmitirá los paquetes que sospecha que fueron recibidos con error, o se perdieron • Esto requiere que receptor mande un ACK por cada paquete recibido ILI-256, Redes de Computadores 20
– Datos recibidos “desde arriba” • Se revisa si el siguiente número de secuencia está dentro de la ventana del emisor. Si no hay problemas, se crea el paquete y se envía. Caso contrario, se bufferea o se devuelve a la capa superior. – Timeout • Para evitar packet loss, usamos timers. Ahora, cada paquete tendrá su propio timer para poder controlar que paquete es enviado en caso de pérdida. ILI-256, Redes de Computadores 21
el paquete correspondiente como recibido. • Si número de secuencia es igual a send_base, se mueve la ventana hasta el siguiente paquete sin ACK recibido. • Si habían paquetes pendientes de enviar por no “caber” en la ventana, se empiezan a transmitir, partiendo con el que tiene menor número de secuencia ILI-256, Redes de Computadores 22
– Paquete recibido correctamente con número de secuencia entre [rcv_base, rcv_base + N – 1] • En este caso, el paquete recibido está dentro de la ventana del receptor, por lo que se envía un ACK selectivo (numerado de acuerdo al paquete recibido). • Si el paquete no había sido recibido anteriormente, se guarda en buffer. • Si el paquete tiene numeración igual a rcv_base, entonces este paquete y todos los que anteriormente habían sido guardados en buffer con numeración consecutiva, se mandan a la capa superior. La ventana se mueve la cantidad de paquetes enviados a la capa superior. ILI-256, Redes de Computadores 23
de secuencia en el rango [rcv_base – N, rcv_base – 1] • Este paquete ya fue recibido anteriormente, y el ACK ya fue enviado. Aún así, se envía un nuevo ACK. – En otro caso • El paquete es ignorado ILI-256, Redes de Computadores 24
con la numeración, se debe ocupar ventana de tamaño menor o igual a la mitad del tamaño del espacio de números de secuencia (para SR). ILI-256, Redes de Computadores 28
asumido que los paquetes llegan en orden. – Y en la vida real no es así! • Podría ocurrir que un paquete antiguo, con numeración X llegue a un receptor, y que X no esté en ni en la ventana de recepción ni en la de emisión. • Como los número de secuencia se reutilizan, tenemos un problema (para variar ) ILI-256, Redes de Computadores 29
evitar esto es considerar que los paquetes tienen un tiempo de vida máximo • En TCP, es aprox. 3 minutos en redes de alta velocidad. • Para que no se asusten: No lo veremos en detalle – Mas info: RFC 1323 ILI-256, Redes de Computadores 30
de errores Timer Para evitar perdida de paquetes, retransmitiéndolos cuando hay timeout. Puede llevar a paquete duplicados. Números de secuencia Para detección de paquetes perdidos/duplicados por parte del receptor. Acknowledgment (ACK) Usado por el receptor para dar OK a recepción de uno o más paquetes. Acknowledgment Negativo (NAK) Usado por el receptor para avisar a emisor que un paquete no se recibió correctamente. Ventana/Pipelining Permite enviar múltiples paquetes en un rango de numeración determinado. Al enviar múltiples paquetes, se aumenta utilización con respecto de stop-and-wait.
TCP es un protocolo de la capa de transporte, orientado a la conexión, que ofrece transferencia confiable de datos entre dos procesos. ILI-256, Redes de Computadores 33
los principios que vimos. – Detección de errores – Timers – Retransmisión – ACKs acumulativos – Números de secuencia en paquetes y ACKs (Headers) ILI-256, Redes de Computadores 34
protocolo orientado a la conexión, es decir, hay una conversación previa entre los procesos (handshake) antes de enviar datos. • En el handshake, los procesos se envían segmentos para establecer los parámetros de la posterior transferencia de datos. • Además, ambos extremos de la conexión inicializan variables de estado de TCP asociadas a la conexión. ILI-256, Redes de Computadores 35
Un circuit FDM o TDM • No es un circuito end-to-end – Un circuito virtual (lo veremos en la capa de red) • El estado de la conexión reside en los extremos • Como el estado de la conexión estan en los end- systems, los elementos de red intermediarios (routers, switch) no mantienen el estado de la conexión, ni siquiera “ven en” TCP! – Solo ven datagramas ILI-256, Redes de Computadores 36
• Datos de ida y vuelta, al mismo tiempo – Punto-a-punto • Solo dos host! Tres son multitud • Ahora veremos una mirada simple de como establecer una conexión • Para ello, recordar que tenemos dos procesos – Cliente: Quién inicia la conexión – Servidor: El restante :P ILI-256, Redes de Computadores 37
informa a capa de transporte que quiere iniciar conexión – Hostname: Nombre del servidor – Puerto: Identificador del proceso • Segundo paso: Three-Way Handshake – Lo inicia el cliente – Dos primeros segmentos no lleva datos adicionales (payload). Tercero puede llevar. • Tercer paso: Enviar datos! ILI-256, Redes de Computadores 38
de datos por segmento • Para calcular este valor, se revisa cuál es el tamaño máximo de un frame en la capa de enlace que puede enviar el host. Esto se conoce como Maximum Transmission Unit (MTU) • Finalmente, el MSS se setea para que un segmento TCP después de ser encapsulado en un datagrama IP quepa en un datagrama de la capa de enlace. ILI-256, Redes de Computadores 40
536, 512 bytes • IMPORTANTE: El MSS es el máximo de datos de la capa de aplicación que un segmento TCP puede llevar, sin incluir los headers del mismo segmento! ILI-256, Redes de Computadores 41
TCP. • Como hemos visto antes, consiste de headers y datos. • El campo de datos contiene un trozo de datos de la aplicación. – Limitado por el MSS! • Ahora… al grano! ILI-256, Redes de Computadores 44
# SEQUENCE NUMBER ACKNOWLEDGMENT NUMBER HEADER LENGHT unused URG ACK PSH RST SYN FIN RECEIVE WINDOW INTERNET CHECKSUM URGENT DATA POINTER OPTIONS DATA 32 Bits
al primer byte del segmento, con respecto al stream completo – Número de secuencia del ACK es el número del siguiente byte que el servidor espera. • ACK acumulativo! • Los ACKs acumulativos traen un problema… ILI-256, Redes de Computadores 47
B. • A está enviando datos a B. • B recibió los bytes entre el 0 y el 535, y después, recibe los bytes entre el 900 y el 1000. • Que hace TCP frente a esto? – Descartar el paquete fuera de orden (esperaba entre los bytes 536 y 899) Facilidad de implementación – Esperar a los bytes faltantes para llenar los espacios. Más eficiente en ancho de banda • Esta última opción es el acercamiento usado en la práctica. ILI-256, Redes de Computadores 48
lados de la conexión eligen un número aleatorio para el número de secuencia inicial. – Esto es para evitar conflictos con un segmento aún dando vueltas en la red. ILI-256, Redes de Computadores 49
necesitamos timers para tener mecanismo de timeout/retransmición • Necesitamos que el timeout sea por lo menos un RTT para no realizar retransmisiones innecesarias • La pregunta casi obvia: ¿Y como sabemos cuanto es el RTT? • Y otra más: ¿Cada segmento sin ACK debe tener un timer? ILI-256, Redes de Computadores 51
TCP calcula el tiempo entre que un segmento es enviado (pasado a la capa de red), y cuando un ACK para el segmento es recibido – SampleRTT • Este valor es calculado cada cierto tiempo (generalmente cada un RTT), y para un solo segmento sin ACK por vez. – Nunca para segmentos retransmitidos! ILI-256, Redes de Computadores 52
• Este último es un protocolo no confiable en todo sentido – No nos asegura que los datos llegarán – Datos pueden ser corruptos – Datagramas pueden llegar en cualquier orden • Por lo mismo, TCP implementa los mecanismos que vimos de RDT ILI-256, Redes de Computadores 56
al momento de existir timeout, que es el de doblar el intervalo de timeout • Cada vez que ocurre un timeout, se reenvia el segmento involucrado, pero ahora con un nuevo timeout igual al doble del original • Cuando ocurre algun evento aparte de timeout que reinicie el timer (datos nuevos, ACK), el timeout es recalculado normalmente ILI-256, Redes de Computadores 62
manera básica de control de congestión. • La gracia, es que cada vez que hay timeout, la demora entre una retransmisión y otra crece exponencialmente, alivianando la carga en la red. ILI-256, Redes de Computadores 63
en orden, con #seq esperado. Todos los datos hasta #seq ya fueron confirmados (ACK) ACK con retraso. Se esperan 500 ms por si llega otro segmento en orden. Si no llega, se manda ACK Llega un segmento en orden, con #seq esperado. Un segmento adicional tiene envío de ACK pendiente De inmediato se envía un ACK acumulativo , confirmando los dos segmentos Llega un segmento fuera de orden, con #seq mayor a lo esperado. Se detectó una brecha De inmediato se envía un ACK duplicado Llega un segmento que completa parcial o completamente una brecha De inmediato se envía ACK, si es que el segmento empieza en el límite inferior de la brecha ILI-256, Redes de Computadores 64
de errores similar a GBN, porque – Mantiene el #seq del menor byte transmitido pero no confirmado (sin ACK) [SendBase] y el #seq del siguiente byte a transmitir [NextSeqNum] • Diferencias – TCP guarda los segmentos que llegan fuera de orden – Si hay perdida, TCP solo reenvía lo “necesario” ILI-256, Redes de Computadores 66
conexión mantiene un buffer de recepción • Si aplicación no lee constantemente datos desde el buffer, y emisor sigue enviando datos, el buffer podría llenarse • Para evitar este tipo de escenarios, existe el control de flujo para disminuir la velocidad a la que el emisor manda datos ILI-256, Redes de Computadores 68
B, con A cliente y B servidor – Si en algún momento B tiene el buffer lleno, le avisa a A. – En este instante, B esta vaciando el buffer… pero no tiene nada que enviarle a A! Por lo que A queda bloqueado • Para evitar esto, TCP envía segmentos con 1 byte de datos para que a través de los ACK, el servidor nos avise cuando tenga espacio en el buffer. ILI-256, Redes de Computadores 71
un proceso corriendo en cada uno • El proceso de aplicación cliente, quiere conectarse al proceso de aplicación servidor, por lo que le informa al cliente TCP que se quiere conectar al servidor • El cliente TCP inicia el proceso de establecimiento de la conexión con el servidor ILI-256, Redes de Computadores 74
– Sin datos – Con el flag SYN en 1 – Con un #seq generado aleatoriamente (cliente_isn) en el header correspondiente. • A este segmento se le llama segmento TCP SYN (obvio? Si xD) • El segmento TCP SYN es enviado al servidor, pasándolo a la capa inferior (Red) ILI-256, Redes de Computadores 75
servidor, este extrae el segmento TCP SYN, asigna los buffers y las variables a la conexión, y responde con un segmento TCP: – Sin datos – Con el flag SYN en 1 – El header Acknowledgment es seteado a client_isn + 1 – El servidor elige un valor random para su propio #seq (server_isn), y lo guarda en el header del #seq • Este segmento de confirmación de la conexión se llama segmento SYNACK ILI-256, Redes de Computadores 76
SYNACK asigna buffers y variables a la conexión. • A continuación, envía un último segmento al servidor para avisarle que recibió correctamente el segmento SYNACK – Flag SYN en cero – Puede llevar datos – Header Acknowledgment con valor server_isn + 1 ILI-256, Redes de Computadores 77
lo que lleva a liberar los recursos (buffers y variables) • El proceso es simple (a modo de ejemplo) – Cliente envía segmento con flag FIN en 1 – Servidor contesta con ACK – Servidor envía segmento con flag FIN en 1 – Cliente contesta con ACK • Con esto, la conexión ya está finalizada ILI-256, Redes de Computadores 78
en un puerto, y un cliente solicita conexión en este puerto, el servidor retorna un segmento TCP con el flag RST en 1. ILI-256, Redes de Computadores 81
segmentos SYN a los distintos puertos. Las respuestas pueden ser – Recibir un SYNACK: Aplicación corriendo y aceptando conexiones en el puerto (puerto abierto ) – Recibir un RST: No hay aplicación corriendo. No hay firewalls en el camino (!!!!). – No recibir respuesta: Lo más probable es que exista un firewall en el camino (!!!!) ILI-256, Redes de Computadores 82