Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ayudantía 7 Redes de Computadores (Stgo, 2011-1)

Gonzalo Correa
November 13, 2011

Ayudantía 7 Redes de Computadores (Stgo, 2011-1)

Ayudantía 7 del ramo Redes de Computadores dictado el primer semestre del 2011 en el campus Santiago San Joaquín de la USM

Gonzalo Correa

November 13, 2011
Tweet

More Decks by Gonzalo Correa

Other Decks in Education

Transcript

  1. Temas • Pipelining – GBN – SR • TCP –

    Conexión TCP – Segmento TCP – RTT – Transmisión Confiable de Datos – Control de Flujo – Gestión de Conexión ILI-256, Redes de Computadores 2
  2. Pipelining • Anteriormente vimos RDT, con su correspondiente versión “pro”,

    RDT 3.0 • Problema de RDT 3.0 – Es Stop-and-wait! – Utilización es bajísima 4 ILI-256, Redes de Computadores = +
  3. Pipelining • Solución: Pipelining – Enviar varios paquetes sin esperar

    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
  4. Pipelining • Dos maneras de abordar esto – Go-Back-N –

    Selective Repeat ILI-256, Redes de Computadores 6
  5. Go-Back-N • Puede enviar múltiples paquetes, pero no puede tener

    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
  6. Go-Back-N • Se dice que N es el tamaño de

    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
  7. Go-Back-N • El número de secuencia de los paquetes va

    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
  8. Go-Back-N • Ahora, veremos las FSMs (finite state machines) que

    representan al emisor y receptor en un protocol con ACK, sin NAK, y usando GBN. ILI-256, Redes de Computadores 11
  9. Go-Back-N • El receptor tiene que responder a tres tipos

    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
  10. Go-Back-N • (cont.) – Recepción de ACK: Con Acknowledgment acumulativo

    • 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
  11. Go-Back-N • Para el caso del receptor, tiene que responder

    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
  12. Go-Back-N • Notar que GBN implementa la mayoría de las

    cosas que veremos en TCP – Números de secuencia – ACKs acumulativos – Checksums – Timeout/Retransimisones ILI-256, Redes de Computadores 17
  13. Go-Back-N • GBN soluciona el problema de sub-utilización del canal

    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
  14. Selective Repeat • Como su nombre lo indica, emisor solo

    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
  15. Selective Repeat • El emisor debe responder a tres eventos

    – 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
  16. Selective Repeat • (cont.) – ACK recibido • Se marca

    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
  17. Selective Repeat • El receptor debe responder a tres eventos

    – 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
  18. Selective Repeat • (cont.) – Paquete recibido correctamente con número

    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
  19. Problemas con SR • Para evitar los problemas de confusión

    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
  20. Cosas finales de Reliable Data Transfer • Hasta ahora hemos

    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
  21. Cosas finales de Reliable Data Transfer • Un mecanismo para

    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
  22. ILI-256, Redes de Computadores 31 Mecanismo Uso Checksum Para detección

    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.
  23. TCP • Ahora, después de mucho mencionarlo, veremos TCP •

    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
  24. TCP • La transferencia confiable de datos se basa en

    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
  25. Conexión en TCP • Hemos visto que TCP es un

    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
  26. Conexión en TCP • Una conexión TCP no es –

    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
  27. Conexión en TCP • Una conexión TCP es – Full-Duplex

    • 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
  28. Conexión en TCP • Primer paso: Proceso en el cliente

    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
  29. Conexión en TCP • El envío de datos se realiza

    de la siguiente manera (cliente  servidor) ILI-256, Redes de Computadores 39
  30. Conexión en TCP • Maximum Segment Size (MSS): Máxima cantidad

    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
  31. Conexión en TCP • Valores comunes para el MSS: 1460,

    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
  32. Segmento TCP • Analizaremos en detalle como es un segmento

    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
  33. ILI-256, Redes de Computadores 45 SOURCE PORT # DEST PORT

    # SEQUENCE NUMBER ACKNOWLEDGMENT NUMBER HEADER LENGHT unused URG ACK PSH RST SYN FIN RECEIVE WINDOW INTERNET CHECKSUM URGENT DATA POINTER OPTIONS DATA 32 Bits
  34. Segmento TCP • Como se numeran lo segmentos? ILI-256, Redes

    de Computadores 46 0 1 … 1.000 …. 1.999 …. 499.999 Archivo Datos 1° segmento Datos 2° segmento
  35. Segmento TCP • Recordar – Número de secuencia va asociado

    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
  36. Segmento TCP • Suponer que tenemos dos Hosts, A y

    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
  37. Segmento TCP • Un dato: – En el handshake, ambos

    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
  38. RTT • Como habíamos visto en la implementación de RDT,

    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
  39. Estimación del RTT • Para hacer una estimación del RTT,

    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
  40. Estimación del RTT • RTT estimado • Factor generalmente es

    0,125 • Variación del RTT • Factor generalmente es 0,25 ILI-256, Redes de Computadores 53
  41. Estimación del RTT • Finalmente, el intervalo de timeout está

    dado por ILI-256, Redes de Computadores 54
  42. RDT en TCP • Recordar que TCP trabajo sobre IP

    • 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
  43. Casos Específicos • Existen algunos casos que conviene analizar –

    Retransmisión por perdida de un ACK – ACK acumulativo impide retransmisión del primer segmento ILI-256, Redes de Computadores 58
  44. Doblar el intervalo de Timeout • Existe un mecanismo interesante

    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
  45. Doblar el intervalo de Timeout • Esta medida es una

    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
  46. Fast Retransmit Evento Acción del Receptor TCP Llega un segmento

    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
  47. GBN o SR? • TCP ocupa un mecanismo de recuperación

    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
  48. Control de Flujo • Recordar que cada extremo de la

    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
  49. Control de flujo • Asumiremos que TCP descarta segmentos fuera

    de orden, para simplificar la idea. • Así, se tiene el siguiente diagrama ILI-256, Redes de Computadores 69
  50. Control de flujo ILI-256, Redes de Computadores 70 • En

    el receptor, se tienen dos variables – LastByteRead – LastByteRcvd • Por el lado del emisor, se mantiene otras dos – LastByteSent – LastByteAcked
  51. Control de flujo • Problema: Consideremos dos clientes, A y

    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
  52. Gestión de conexión • Ahora veremos la vida y muerte

    de una conexión TCP • Partiremos con el establecimiento de una conexión – ¿Por parte de quien?¿Cliente o servidor? ILI-256, Redes de Computadores 73
  53. Gestión de conexión • Supongamos que tenemos dos hosts, con

    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
  54. Handshake: Paso 1 • Cliente envía un primer segmento especial

    – 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
  55. Handshake: Paso 2 • Cuando el datagrama IP llega al

    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
  56. Handshake: Paso 3 • Cuando el cliente recibe el segmento

    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
  57. Finalización • Cualquiera de los procesos puede cerrar la conexión,

    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
  58. Para terminar… • Cuando un host no está aceptando conexiones

    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
  59. Un pro-tip… • Al escanear puertos, el cliente TCP envía

    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