Arquitectura de Redes, capítulo 3 · SNMP transferencia fiable sobre UDP: añadir fiabilidad en la...

53
3-1 Capítulo 3 La capa de transporte Redes de computadoras: Un enfoque descendente, 5 a edición. Jim Kurose, Keith Ross Pearson Educación, 2010. A note on the use of these ppt slides: We’re making these slides freely available to all (faculty, students, readers). They’re in PowerPoint form so you can add, modify, and delete slides (including this one) and slide content to suit your needs. They obviously represent a lot of work on our part. In return for use, we only ask the following: If you use these slides (e.g., in a class) in substantially unaltered form, that you mention their source (after all, we’d like people to use our book!) If you post any slides in substantially unaltered form on a www site, that you note that they are adapted from (or perhaps identical to) our slides, and note our copyright of this material. Thanks and enjoy! JFK/KWR All material copyright 1996-2010 J.F Kurose and K.W. Ross, All Rights Reserved Raúl Durán, Nacho Pérez v1.4 Capa de Transporte 3-2 Capítulo 3: La capa de transporte Objetivos: comprender los principios que están tras los servicios de la capa de transporte multiplexar/des- multiplexar transferencia de datos fiable control de flujo control de congestión conocer los protocolos de transporte de Internet: UDP: transporte sin conexión TCP: transporte orientado a conexión control de flujo TCP control de congestión TCP Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

Transcript of Arquitectura de Redes, capítulo 3 · SNMP transferencia fiable sobre UDP: añadir fiabilidad en la...

  • 3-1

    Capítulo 3La capa de transporte

    Redes de computadoras: Un enfoque descendente, 5a edición. Jim Kurose, Keith RossPearson Educación, 2010.

    A note on the use of these ppt slides:We’re making these slides freely available to all (faculty, students, readers). They’re in PowerPoint form so you can add, modify, and delete slides (including this one) and slide content to suit your needs. They obviously represent a lot of work on our part. In return for use, we only ask the following:

    If you use these slides (e.g., in a class) in substantially unaltered form, that you mention their source (after all, we’d like people to use our book!)

    If you post any slides in substantially unaltered form on a www site, that you note that they are adapted from (or perhaps identical to) our slides, and note our copyright of this material.

    Thanks and enjoy! JFK/KWR

    All material copyright 1996-2010J.F Kurose and K.W. Ross, All Rights Reserved

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-2

    Capítulo 3: La capa de transporteObjetivos:

    comprender los principios que están tras los servicios de la capa de transporte

    multiplexar/des-multiplexartransferencia de datos fiablecontrol de flujocontrol de congestión

    conocer los protocolos de transporte de Internet:

    UDP: transporte sin conexiónTCP: transporte orientado a conexióncontrol de flujo TCPcontrol de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-3

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexión transferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-4

    servicios y protocolos de transporteproporcionar comunicaciónlógica entre procesos en ejecución en diferentes hostslos protocolos de transporte corren en sistemas terminales

    emisor: divide mensajes en segmentos, los pasa a la capa de redreceptor: reensambla segmentos en mensajes, los pasa a la capa de aplicación

    más de un protocolo disponible para las aplicaciones

    Internet: TCP y UDP

    aplicacióntransporte

    redenlacefísica

    aplicacióntransporte

    redenlacefísica

    transporte lógico extr.-extr.

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

  • 3-5

    capa de transporte / capa de red

    encapsulación:arquitectura en capascapa de red:comunicación lógica entre hostscapa de transporte:comunicación lógica entre procesos

    se basa en, y amplía, los servicios de la capa de red

    analogía doméstica:12 chicos envían cartas a 12

    chicosprocesos = chicosmensajes = cartas en sobreshosts = casasprotocolo de transporte = Ana y Juan, que reparten a sus hermanos respectivosprotocolo de red = Correos

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-6

    protocolos de capa de transporte de Internet

    distribución fiable en orden (TCP)

    control de congestióncontrol de flujoestablecimiento de conexión

    distribución no fiable, fuera de orden: UDP

    extensión “sin virguerías”de IP “haz lo que puedas”

    servicios no disponibles: garantía de retardo mínimogarantía de ancho de banda mínimo

    aplicacióntransporte

    redenlacefísica

    redenlacefísica

    redenlacefísica

    redenlacefísica

    redenlacefísica

    redenlacefísica

    redenlacefísica

    aplicacióntransporte

    redenlacefísica

    transporte lógico extr.-extr.

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

  • 3-7

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexión transferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-8

    Multiplexación/desmultiplexación

    aplicación

    transporte

    red

    enlace

    física

    P1 aplicación

    transporte

    red

    enlace

    física

    aplicación

    transporte

    red

    enlace

    física

    P2P3 P4P1

    host 1 host 2 host 3

    = proceso= socket

    entregar segmentos recibidosal socket correcto

    Desmultiplexación en el destino:reunir datos de múltiplessockets, empaquetarlos con el encabezado (usado luego para desmultiplexar)

    Multiplexación en el emisor:

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    socket = puerta de comunicación red-proceso

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

  • Protocolo de red IP

    El protocolo de Internet para la capa de red se llama IP.Se encarga de dar una conexión lógica entre hosts.Entrega datagramas de un host a otro, pero sin garantías.Cada host se identifica con una dirección de red, que llamamos dirección IP.

    3-9Capa de TransporteRaúl Durán, Nacho Pérez v1.4

    3-10

    Cómo funciona la desmultiplexaciónel host recibe datagramas IP

    cada datagrama tiene IP de origen e IP de destinocada datagrama lleva un segmento de la capa de transportecada segmento tiene nº de puerto de origen y de destino

    el host usa IP y nº de puerto para dirigir el segmento al socket apropiado

    nº puerto org nº puerto dest

    32 bits

    datos de la aplicación (mensaje)

    otros campos encabezado

    formato de segmento TCP/UDP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelResaltado

    ÁngelNota adhesivaCabecera de la capa de transporte (nº puerto origen/destino y otros campos encabezado)

    ÁngelNota adhesivaPuerto: identificación "externa" del socket (puerto del 0 al 2^16 -1)

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

  • 3-11

    desmultiplexación sin conexión

    recordatorio: crear sockets con números de puerto locales:

    DatagramSocket mySocket1 = new DatagramSocket(12534);

    DatagramSocket mySocket2 = new DatagramSocket(12535);

    recordatorio: al crear un datagrama para enviar por un socket UDP, hay que especificar

    (IP dest ,nº puerto dest)

    cuando un host recibe un segmento UDP

    comprueba el nº de puerto destino del segmentoredirige el segmento UDP al socket con ese nº de puerto

    datagramas IP con diferente IP origen y/o nº puerto origen se dirigen al mismo socket

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-12

    desmultiplexación sin conexión (cont)

    DatagramSocket serverSocket = new DatagramSocket(6428);

    IPcliente: B

    P2

    IP cliente: A

    P1P1P3

    IP servidor: C

    PO: 6428PD: 9157

    PO: 9157PD: 6428

    PO: 6428PD: 5775

    PO: 5775PD: 6428

    PO proporciona “dirección de retorno”

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-13

    Desmultiplexación orientada a conexión

    un socket TCP se identifica por una 4-upla:

    IP origennº puerto origenIP destinonº puerto destino

    el receptor usa los 4 valores para redirigir el segmento al socket adecuado

    el host servidor debe soportar varios sockets TCP simultáneos

    cada socket identificado por su propia 4-upla

    los servidores web tienen sockets diferentes para cada cliente que se conecta

    HTTP no persistente tendrá un socket para cada solicitud

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-14

    Desmultiplexación orientada a conexión (cont)

    IPcliente:B

    P1

    IPcliente: A

    P1P2P4

    IPservidor: C

    P5 P6 P3

    PO: 9157PD: 80IP-O: AIP-D:C

    PO: 9157PD: 80

    IP-D:CIP-O: B

    PO: 5775PD: 80

    IP-D:CIP-O: B

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-15

    desmultiplexación orientada a conexión: Web Server con hebras

    IP cliente:B

    P1

    IPcliente: A

    P1P2

    IPservidor: C

    SP: 9157DP: 80

    SP: 9157DP: 80

    P4 P3

    D-IP:CS-IP: AD-IP:C

    S-IP: B

    SP: 5775DP: 80

    D-IP:CS-IP: B

    PO: 9157PD: 80IP-O: AIP-D:C

    PO: 5775PD: 80

    IP-D:CIP-O: B

    PO: 9157PD: 80

    IP-D:CIP-O: B

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    Sockets en cliente/servidor UDP

    socket()

    sendto()

    recvfrom()

    close()sendto()

    recvfrom()

    bind()

    socket()

    Cliente UDP Servidor UDP

    procesar pedido…

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte 3-16

    ÁngelNota adhesivaAsocia un número de puerto

    ÁngelNota adhesivaSin conexión

  • Sockets en cliente/servidor TCP

    socket()

    write()

    read()

    close()

    accept()

    listen()

    bind()

    socket()

    Cliente TCP Servidor TCP

    connect()

    close()

    write()

    read()

    read()

    procesar pedido…

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte 3-17

    3-18

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexióntransferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelNota adhesivaCon conexión

    ÁngelNota adhesivaSe crea un proceso hijo que realiza la función read(), mientras que el proceso padre se queda en el accept()

  • 3-19

    UDP: User Datagram Protocol [RFC 768]protocolo de transporte de Internet sin adornos, “con lo puesto”al ser un servicio de “haz lo que puedas”, los segmentos UDP pueden:

    perderseser entregados fuera de orden a la aplicación

    sin conexión:sin establecimiento de conexión entre el emisor y el receptor UDPcada segmento UDP se trata de forma independiente de los otros

    ¿Por qué existe UDP?no hay establecimiento de la conexión (que puede añadir retardo)sencillo: no hay estado ni en el emisor ni en el receptorencabezado pequeñono hay control de congestión: UDP puede disparar todo lo rápido que se quiera

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-20

    UDP: mása menudo usado para aplicaciones de ‘streaming’multimedia

    tolerante a pérdidassensible a la velocidad

    otros usos de UDPDNSSNMP

    transferencia fiable sobre UDP: añadir fiabilidad en la capa de aplicación

    recuperación de errores específica para la aplicación

    nº puerto org nº puerto dest

    32 bits

    datos de la aplicación(mensaje)

    formato de segmento UDP

    long checksumLongitud, en

    bytes, del segmento

    UDP, incluido encabezado

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    0 311615

  • 3-21

    UDP: checksum

    Emisor:trata contenidos del segmento como secuencia de enteros de 16 bitschecksum: suma (en compl. a 1) del contenido del segmentoel emisor pone el checksum en el campo UDP correspondiente

    Receptor:calcula el checksum del segmento recibidocomprueba si el valor calculado = campo checksum

    NO - error detectadoSÍ – error no detectado

    ¿Puede haber errores aun así? Lo veremos más adelante

    Objetivo: detectar “errores” (p.ej.: bits alterados) en el segmento transmitido

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-22

    Ejemplo de Checksum InternetNota: ¡suma en complemento a 1!Ejemplo: sumar dos enteros de 16 bits

    1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

    1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

    1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

    acarreo

    sumachecksum

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-23

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexióntransferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-24

    Principios de transferencia de datos fiable

    es importante en las capas de aplicación, transporte y enlace¡en el “top-10” de las cuestiones importantes en redes!

    las características del canal no fiable determinarán la complejidad del protocolo de transferencia de datos fiable (rdt: ‘reliable data transfer protocol’)

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-25

    Principios de transferencia de datos fiable

    es importante en las capas de aplicación, transporte y enlace¡en el “top-10” de las cuestiones importantes en redes!

    las características del canal no fiable determinarán la complejidad del protocolo de transferencia de datos fiable (rdt: ‘reliable data transfer protocol’)

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-26

    Principios de transferencia de datos fiable

    es importante en las capas de aplicación, transporte y enlace¡en el “top-10” de las cuestiones importantes en redes!

    las características del canal no fiable determinarán la complejidad del protocolo de transferencia de datos fiable (rdt: ‘reliable data transfer protocol’)

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • rdt_send(): llamada desde arriba, (p.ej.: por la apl.). Se le

    pasan los datos a entregar al nivel superior del receptor

    3-27

    transferencia de datos fiable: preliminares

    ladoemisión

    ladorecepción

    udt_send(): llamado por rdt para transferir paquete por canal no fiable al receptor

    rdt_rcv(): llamado cuando el paquete llegue al extremo de

    recepción del canal

    deliver_data(): llamada por rdt para entregar datos

    al nivel superior

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-28

    transferencia de datos fiable: preliminaresVamos a:

    desarrollar el emisor y el receptor de un protocolo de transf. de datos fiable (rdt) paso a pasoconsiderar sólo transferencia de datos unidireccional

    ¡pero el control se transmitirá en ambas direcciones!usar máquinas de estados finitos (MEFs) para definir emisor y receptor

    estado1

    estado2

    evento que causa la transiciónacción tomada en la transición

    estado: desde este estado, el siguiente

    se determina únicamente por el siguiente evento

    eventoacciones

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-29

    Rdt1.0: transferencia fiable en canal fiable

    canal subyacente perfectamente fiableno hay errores de bitno hay pérdida de paquetes

    MEF diferente para emisor y receptorel emisor envía dato al canal subyacenteel emisor lee datos del canal subyacente

    esperarllamada de arriba packet = make_pkt(data)

    udt_send(packet)

    rdt_send(data)extract (packet,data)deliver_data(data)

    esperar llamada de abajo

    rdt_rcv(packet)

    emisor receptor

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-30

    Rdt2.0: canal con errores de bitel canal subyacente puede alterar bits del paquete

    usar el checksum para detectar errores de bitla cuestión: ¿cómo recuperarse de errores?reconocimientos(‘acknowledgements’, ACKs): el receptor indica explícitamente que la recepción fue buenareconocimientos negativos (NAKs): el receptor indica explícitamente que el paquete tenía erroresel emisor retransmite el paquete si recibe un NAK

    nuevos mecanismos en rdt2.0 (sobre rdt1.0):detección de erroresrealimentación del receptor:mensajes de control (ACK,NAK) del receptor al emisor

    ¿Cómo se recuperan los humanos de “errores”durante la conversación?

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-31

    Rdt2.0: canal con errores de bitel canal subyacente puede alterar bits del paquete

    usar el checksum para detectar errores de bitla cuestión: ¿cómo recuperarse de errores?reconocimientos(‘acknowledgements’, ACKs): el receptor indica explícitamente que la recepción fue buenareconocimientos negativos (NAKs): el receptor indica explícitamente que el paquete tenía erroresel emisor retransmite el paquete si recibe un NAK

    nuevos mecanismos en rdt2.0 (sobre rdt1.0):detección de erroresrealimentación del receptor:mensajes de control (ACK,NAK) del receptor al emisor

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-32

    rdt2.0: especificación de la MEF

    esperar llamada de

    arriba

    sndpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    esperar ACK o NAK

    esperar llamada de

    abajoemisor

    receptorrdt_send(data)

    Λ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-33

    rdt2.0: funcionamiento sin errores

    esperar llamada de

    arriba

    snkpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    esperar ACK o NAK

    esperar llamada de

    abajo

    rdt_send(data)

    Λ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-34

    rdt2.0: caso de error

    esperar llamada de

    arriba

    snkpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    esperar ACK o NAK

    esperar llamada de

    abajo

    rdt_send(data)

    Λ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-35

    ¡ rdt2.0 tiene un defecto fatal !

    ¿Qué ocurre si ACK o NAK se corrompen?¡¡el emisor no sabe quéocurrió en el receptor!!no es posible simplemente retransmitir: se pueden crear duplicados

    Manejo de duplicados: el emisor retransmite el paquete actual si ACK o NAK no llegan bienel emisor añade un número de secuencia a cada paqueteel receptor descarta (no entrega hacia arriba) el paquete duplicado

    el emisor envía un paquetey espera la respuesta delreceptor

    parada y espera

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-36

    rdt2.1: el emisor maneja ACK/NAKs erróneos

    esperar llamada 0 de arriba

    sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    esperar ACK o NAK 0 udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )

    sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

    esperar llamada 1 de arriba

    esperar ACK o NAK 1

    ΛΛ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-37

    rdt2.1: el receptor maneja ACK/NAKs erróneos

    esperar 0 de abajo

    sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)

    rdt_rcv(rcvpkt) && not corrupt(rcvpkt) &&has_seq0(rcvpkt)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    esperar 1 de abajo

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

    sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    rdt_rcv(rcvpkt) && not corrupt(rcvpkt) &&has_seq1(rcvpkt)

    rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

    sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-38

    rdt2.1: discusión

    Emisor:nº secuencia añadido al paquete2 números valen (0,1). ¿Por qué?comprobar si el ACK/NAK recibido corruptoel doble de estados

    el estado debe “recordar” si el paquete “actual” tiene nº sec. 0 ó1

    Receptor:debe comprobar si el paquete recibido es duplicado

    el estado indica si se espera el paquete 0 ó 1

    nota: el receptor no puede saber si su último ACK/NAK se recibió bien en el emisor

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-39

    rdt2.2: un protocolo sin NAK

    la misma funcionalidad que rdt2.1, usando sólo ACKsen lugar de NAK, el receptor envía ACK para el último paquete recibido bien

    el receptor debe incluir explícitamente el nº de secuencia del paquete al que se refiere el ACK

    un ACK duplicado en el emisor resulta en la misma acción que un NAK: retransmitir paquete actual

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-40

    rdt2.2: fragmentos del emisor y el receptor

    esperar llamada 0 de arriba

    sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||

    isACK(rcvpkt,1) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

    esperar ACK 0

    fragmento MEF emisor

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)

    esperar 0 de abajo

    rdt_rcv(rcvpkt) && (corrupt(rcvpkt) ||

    has_seq1(rcvpkt))

    udt_send(sndpkt)fragmento MEF

    receptor

    Λ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-41

    rdt3.0: canales con errores y pérdidas

    Nueva suposición: canal subyacente también puede perder paquetes (datos o ACKs)

    las retransmisiones de checksum, nº secuencia, ACKs, ayudan, pero no son suficiente

    línea de trabajo: emisor espera un tiempo “razonable” al ACKretransmite si no recibe ACK en ese tiemposi el paquete (o ACK) sólo se retrasó (no se perdió):

    las retransmisiones estarán repetidas, pero con el nº secuencia esto está resueltoel receptor debe indicar nº secuencia del paquete al que se aplica el ACK

    requiere un temporizadorRaúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-42

    rdt3.0 emisorsndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timer

    rdt_send(data)

    espe-rar

    ACK 0

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,1) )

    esperar llamada 1 de arriba

    sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timer

    rdt_send(data)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,0) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1)

    stop_timerstop_timer

    udt_send(sndpkt)start_timer

    timeout

    udt_send(sndpkt)start_timer

    timeout

    rdt_rcv(rcvpkt)

    esperar llamada 0 de arriba

    esper-rar

    ACK 1

    Λrdt_rcv(rcvpkt)

    ΛΛ

    Λ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-43

    rdt3.0 funcionando

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-44

    rdt3.0 funcionando

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-45

    Rendimiento del rdt3.0

    rdt3.0 funciona, pero el rendimiento es muy malop.ej.: enlace de 1Gb/s, 15ms retardo prop., paquete 8k bits

    si RTT=30 ms, 1 paquete de 1KB cada 30 sg -> 33KB/s de 1Gbps¡¡el protocolo de red limita el uso de los recursos físicos!!

    dosmicrosegun 8bps10bits 8000

    9 === RLdtrans

    U emisor: utilización – fracción de tiempo que el emisor estáocupado emitiendo

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-46

    rdt3.0: funcionamiento de parada y espera

    primer bit transmitido, t = 0

    emisor receptor

    RTT

    último bit transmitido, t = L / R

    llega primer bitllega último bit, enviar ACK

    llega ACK, enviar siguiente paquete, t = RTT + L / R

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-47

    Protocolos segmentados (en cadena)segmentar: el emisor permite que haya múltiples

    paquetes “en camino”, pendientes de ACKel rango de nº de secuencia debe aumentarsehay que añadir búfferes en el emisor y/o el receptor

    hay dos formas genéricas de protocolos segmentados: retroceder N (‘go-Back-N’) y repetición selectiva (‘selective repeat’)

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-48

    segmentación: uso mejorado

    primer bit transmitido, t = 0

    emisor receptor

    RTT

    último bit transmitido, t = L / R

    llega el primer bitllega último bit 1er paquete, enviar ACK

    llega ACK, enviar siguiente paquete, t = RTT + L / R

    llega último bit 2º paquete, enviar ACKllega último bit 3er paquete, enviar ACK

    ¡¡Mejora en la utilización en un factor de 3!!

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-49

    Protocolos segmentados

    Retroceder N: vista globalel emisor puede tener hasta N paquetes pendientes de ACKel receptor sólo envía ACKs acumulativos

    no lo envía para un paquete si hay una laguna

    el emisor tiene un temporizador para el paquete más antiguo sin ACK

    si llega a 0, retransmitir paquetes sin ACK

    Repetición selectiva: vista globalel emisor puede tener hasta N paquetes pendientes de ACKel receptor envía ACK para cada paqueteel emisor mantiene un temporizador para cada paquete sin ACK

    si llega a 0, retransmitir sólo paquete sin ACK

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-50

    Retroceder N (GBN)Emisor:

    nº de secuencia de k bits en cabecera del paqueteventana de hasta N paquetes consecutivos sin ACK

    ACK(n): ACK para todos los paquetes hasta nº sec. n (inclusive): “ACK acumulativo”

    puede recibir ACKs duplicados (ver receptor)temporizador para cada paquete en camino timeout(n): retransmitir paquete n y todos los de mayor nº sec. en la ventanaRaúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-51

    GBN: MEF ampliada para el emisor

    Wait start_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])

    timeout

    rdt_send(data)

    if (nextseqnum < base+N) {sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)udt_send(sndpkt[nextseqnum])if (base == nextseqnum)

    start_timernextseqnum++}

    elserefuse_data(data)

    base = getacknum(rcvpkt)+1If (base == nextseqnum)

    stop_timerelsestart_timer

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    base=1nextseqnum=1

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Λ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-52

    GBN: MEF ampliada del receptor

    Enviar ACK para paquete correcto con mayor nº de secuencia en orden

    se pueden generar ACKs duplicadossólo hay que recordar expectedseqnum

    paquete fuera de ordendescartar (no se guarda) -> ¡¡no hay buffer en el receptor!!Reenviar ACK para paquete con mayor nº secuencia en orden

    Wait

    udt_send(sndpkt)default

    rdt_rcv(rcvpkt)&& notcurrupt(rcvpkt)&& hasseqnum(rcvpkt,expectedseqnum)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++

    expectedseqnum=1sndpkt = make_pkt(expectedseqnum,ACK,chksum)

    Λ

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-53

    GBN enfunciona-miento

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-54

    Repetición selectiva (SR)

    el receptor envía ACK individual para cada paquete correcto

    se deben guardar los paquetes en buffers según sea necesario, para entregarlos en orden a la capa superior

    el emisor sólo reenvía paquetes para los que no reciba ACK

    un temporizador para cada paquete en caminoventana de emisor

    hay N nº de secuencia consecutivosde nuevo limita nºsec. de los paquetes en camino

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-55

    Repetición selectiva: ventanas de emisor y receptor

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-56

    Repetición selectiva

    datos de arriba:si sig. nº sec. en la ventana vacío, enviar paquete

    timeout(n):reenviar paquete n, reiniciar temporizador

    ACK(n) en [sendbase,sendbase+N]:marcar paquete n como recibidosi n era el paquete sin ACK con menor nº sec., avanzar el inicio de la ventana al siguiente nº sec. sin ACK

    emisorpaquete n en [rcvbase, rcvbase+N-1]

    enviar ACK(n)fuera de orden: guardar en bufferen orden: entregar (junto con los previamente guardados por fuera de orden), avanzar ventana al siguiente pendiente de recibir

    paquete n en [rcvbase-N,rcvbase-1]ACK(n)

    otro caso:ignorar

    receptor

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-57

    repetición selectiva en funcionamiento

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-58

    Repetición selectivadilema

    Ejemplo: nos. sec: 0, 1, 2, 3tamaño ventana=3

    ¡el receptor no ve diferencia entre ambos casos!en (a) pasa datos repetidos por nuevos de forma incorrecta

    P: ¿relación entre nº de nos. de secuencia válidos y tamaño de la ventana?Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-59

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexión transferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-60

    TCP: Visión global RFCs: 793, 1122, 1323, 2018, 2581

    datos full duplex:flujo de datos bidireccional en la misma conexiónMSS: Máximo tamaño de segmento (‘maximum segment size’)

    orientado a conexión:establecimiento conexión (intercambio de mensajes) inicializa estados antes del intercambio de datos

    con control de flujo:el emisor no satura al receptor

    punto a punto:un emisor, un receptor

    flujo de bytes fiable, en orden:

    no hay “límites de mensaje”segmentado:

    el control de flujo y congestión de TCP fijan el tamaño de la ventanabuffers de emisión y recepción

    socketdoor

    TCPsend buffer

    TCPreceive buffer

    socketdoor

    segment

    applicationwrites data

    applicationreads data

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

  • 3-61

    estructura del segmento TCP

    nº puerto origen nº puerto dest.

    32 bits

    datosaplicación

    (long. variable)

    nº secuencianº ACK

    ventana recepciónpuntero datos urg.checksum

    FSRPAUlong. encab.not

    used

    Opciones (long. variable)

    URG: datos urgentes(la aplicación debe

    hacer algo)ACK: nº ACK

    válidoPSH: push, enviar

    estos datos ya a laaplicación

    (el programador no puede manejarlo)

    RST, SYN, FIN:estab. conexión

    (comandos estab., cerrar)

    nº bytes que el receptorestá dispuestoa aceptar

    contados en bytes de datos(¡¡no segmentos!!)

    checksum Internet

    (como en UDP)

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    0 15 16 31

    3-62

    TCP: núms. secuencia y ACKsnos. secuencia:

    “nº” flujo de bytes del 1er byte de datos del segmento

    ACKs:nº sec. del siguiente byte esperado de la otra parteACK acumulativo

    P: cómo se tratan los segmentos fuera de orden

    R: la especificación de TCP no lo dice: lo que haga el implementador

    Host A Host B

    Seq=42, ACK=79, data = ‘C’

    Seq=79, ACK

    =43, data = ‘

    C’

    Seq=43, ACK=80

    Usuarioescribe

    ‘C’

    el host envíaACK por ladevolución

    de ‘C’

    el host envía ACK por ‘C’devuelve ‘C’

    tiempoejemplo sencillo de telnet

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelNota adhesivaIndicación del control de flujo

    ÁngelResaltado

    ÁngelResaltado

  • 3-63

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexióntransferencia de datos fiable control de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-64

    TCP: gestión de la conexiónRecordatorio: en TCP, emisor y

    receptor establecen una “conexión” antes de intercambiar segmentos de datosinicializar variables TCP:

    nos. de secuenciabuffers, info. de control de flujo (p.ej.: RcvWindow)

    el cliente: inicia la conexiónSocket clientSocket = new Socket(”nombrehost",”numero puerto");

    el servidor: el cliente contacta con élSocket connectionSocket = welcomeSocket.accept();

    Establecimiento en 3 pasos:

    Paso 1: el cliente envia segmento SYN al servidor

    especifica nº secuencia inicialsin datos

    Paso 2: el servidor recibe SYN, responde con segmento SYNACK

    el servidor crea buffersespecifica el nº sec. inicial del servidor

    Paso 3: el cliente recibe SYNACK, responde con segmento ACK, que puede contener datos

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-65

    TCP: gestión de la conexión (cont.)

    Cerrar una conexión:

    el cliente cierra el socket:clientSocket.close();

    Paso 1: el sistema terminal del cliente envía el segmento de control TCP FIN al servidor

    Paso 2: el servidor recibe FIN, responde con ACK. Cierra la conexión, envía FIN

    cliente

    FIN

    servidor

    ACK

    ACK

    FIN

    cerrar

    cerrar

    cerrado

    espe

    ra

    tem

    pori

    zada

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-66

    TCP: gestión de la conexión (cont.)

    Paso 3: el cliente recibe FIN, responde con ACK.

    entra en “espera temporizada” –responderá con ACK a los FINs que reciba

    Paso 4: el servidor recibe ACK. Conexión cerrada.

    Nota: con una pequeña modificación, puede manejar FINs simultáneos.

    cliente

    FIN

    servidor

    ACK

    ACK

    FIN

    cerrando

    cerrando

    cerrada

    espe

    ra

    tem

    pori

    zada

    cerrada

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-67

    TCP: gestión de la conexión (cont.)

    ciclo de vidade cliente TCP

    ciclo de vidade servidor TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-68

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexióntransferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelNota adhesivaLas conexiones no mueren hasta que uno de los dos lados (cliente o servidor) cierre la conexión

  • 3-69

    TCP transferencia de datos fiable

    TCP crea servicio rdtsobre el servicio no fiable de IPsegmentos en cadenaacks acumulativosTCP usa un único temporizador de retransmisión

    retransmisiones disparadas por:

    eventos de temporizador a ceroACKs duplicados

    inicialmente considerar emisor TCP simplificado

    ignorar ACKs duplicadosignorar control de flujo, congestión de flujo

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-70

    eventos de emisión TCP:datos recibidos de la

    aplicación:crear segmento con nºsec.nº sec. es el nº del 1er byte del segmento dentro del flujo de bytesiniciar temporizador si no lo estáintervalo de expiración: TimeOutInterval

    ‘timeout’ (expiración):retransmitir segmento que la provocóreiniciar temporizador

    ACK recibido:si se refiere a segmentos sin ACK previo

    actualizar aquellos a los que les falta el ACKiniciar temporizador si hay segmentos pendientes

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

    ÁngelResaltado

  • 3-71

    emisor TCP (simplificado)

    NextSeqNum = InitialSeqNumSendBase = InitialSeqNum

    loop (siempre) {switch(suceso)

    suceso: datos recibidos de la aplicación de capa superiorcrear segmento TCP con nº sec. NextSeqNum if (temporizador no en marcha)

    iniciar temporizadorpasar segmento a IP NextSeqNum = NextSeqNum + length(data)

    suceso: temporizador expiróretransmitir segmento sin ACK con el menor nº sec. iniciar contador

    suceso: recibido ACK con valor del campo ACK == yif (y > SendBase) {

    SendBase = yif (hay segmentos sin ACK)

    iniciar temporizador}

    } /* fin de loop siempre */

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-72

    TCP: situaciones para retransmisiónHost A

    Seq=100, 20 bytes data

    ACK=1

    00

    tiempotimeout prematuro

    Host B

    Seq=92, 8 bytes data

    ACK=120

    Seq=92, 8 bytes data

    Seq=

    92 t

    imeo

    ut

    ACK=120

    Host A

    Seq=92, 8 bytes data

    ACK=100

    pérdida

    tim

    eout

    situación de ACK perdido

    Host B

    X

    Seq=92, 8 bytes data

    ACK=100

    tiempo

    Seq=

    92 t

    imeo

    ut

    SendBase= 100

    SendBase= 120

    SendBase= 120

    SendBase= 100

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-73

    TCP situaciones para retransmisión (más)Host A

    Seq=92, 8 bytes data

    ACK=100

    pérdida

    tim

    eout

    ACK acumulativo

    Host B

    X

    Seq=100, 20 bytes data

    ACK=120

    tiempo

    SendBase= 120

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-74

    generación de ACK en TCP [RFC 1122, RFC 2581]

    Evento en Receptor

    Llegada de segmento en orden connº sec. esperado. Todos hasta elnº sec. esperado ya tienen ACK

    Llegada de segmento en orden connº sec. esperado. Hay otro seg. en orden esperando transm. de ACK

    Llegada de nº de sec. fuera de orden mayor que el esperado. Detectada laguna

    Llegada de segmento que comple-ta parcialmente una laguna

    Receptor TCP: acción

    ACK retardado. Esperar hasta 500msal siguiente segmento. Si no llega, enviarACK

    Inmediatamente enviar ACK acumulativopara ambos segmentos

    Inmediatamente enviar ACK duplicadoindicando nº sec. del siguiente byte esperado

    Inmediatamente enviar ACK, suponiendo que el segmento empieza en el límite inferior de la laguna

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-75

    Retransmisión rápida

    período de expiración a menudo relativamente largo

    largo retardo antes de reenviar el paquete perdido

    se detectan segmentos perdidos por ACKs repetidos

    el emisor a menudo envía varios segmentos seguidossi se pierde un segmento, seguramente habrá varios ACKs repetidos

    si el emisor recibe 3 ACKs por los mismos datos, supone que el segmento de después de los datos con ACK se perdió:

    retransmisión rápida: reenviar segmento antes de que expire el temporizador

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-76

    Host A

    tim

    eout

    Host B

    tiempo

    X

    reenviar 2º segmento

    Figura 3.37 Reenviar segmento tras triple ACKRaúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-77

    suceso: recibido ACK, con campo ACK con valor == s if (s > SendBase) {

    SendBase = sif (hay segmentos pendientes de ACK)

    iniciar temporizador}

    else { incrementar cuenta de ACKs duplicados recibidos para s if (cuenta de ACKs duplicados para s == 3)

    reenviar segmento con nº sec. s}

    Algoritmo de retransmisión rápida:

    un ACK duplicado paraun segmento ya con ACK

    retransmisión rápida

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    Algoritmo de Nagle [RFC896]

    Las conexiones interactivas (ssh, telnet) suelen enviar segmentos con muy pocos datos (uno, dos bytes).

    ¡Pérdida de eficiencia!Es más interesante reunir varios datos procedentes de la aplicación y mandarlos todos juntos.El algoritmo de Nagle indica que no se envíen nuevos segmentos mientras queden reconocimientos pendientes

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte 3-78

  • Algoritmo de Nagle [RFC896]

    Evento en emisor

    Llegada de datos de la aplicación.Hay ACKs pendientes.

    Llegada de un ACK pendiente.

    Llegada de datos de la aplicación.No hay ACKs pendientes.

    Llegada de datos de la aplicación.No queda sitio en el buffer delemisor.

    Acción en emisor

    Acumular datos en el buffer del emisor.

    Inmediatamente enviar todos los segmen-tos acumulados en buffer.

    Inmediatamente enviar datos al receptor.

    Inmediatamente enviar datos si lo permi-te la ventana, aunque no se hayan reci-bido ACKs previos.

    Capa de Transporte 3-79Raúl Durán, Nacho Pérez v1.4

    3-80

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexióntransferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-81

    en TCP, el receptor tiene un buffer de recepción

    servicio de equilibrado de velocidad: equilibrar la velocidad de envío a la de la aplicación vaciando el buffer de recepciónla aplicación puede ser lenta leyendo del

    buffer

    el emisor no saturaráel buffer del receptor

    a base de enviar mucho muy seguido

    control de flujoTCP: Control de flujo

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-82

    TCP control de flujo: cómo funciona

    (suponer que el receptor TCP descarta segmentos fuera de orden)hay sitio en el buffer

    RcvWindow = RcvBuffer -[LastByteRcvd - LastByteRead]

    el receptor anuncia el espacio libre incluyendo el valor RcvWindow en los segmentosel emisor limita los datos sin ACK a RcvWindow

    garantiza que el buffer de recepción no se desborda

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-83

    TCP: ‘Round Trip Time’ y ‘Timeout’

    P: ¿cómo fijar el tiempo de ‘timeout’ de TCP?más que RTT

    pero RTT varíasi demasiado corto: ‘timeout’ prematuro

    retransmisiones innecesarias

    si demasiado largo: reacción lenta a pérdidas

    P: ¿cómo estimar RTT?SampleRTT: tiempo medido desde transmisión de un segmento hasta recepción de ACK

    ignorar retransmisionesSampleRTT variará, queremos un valor más “estable”

    promedio de varias mediciones recientes, no el valor actual

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-84

    TCP: ‘Round Trip Time’ y ‘Timeout’

    EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT

    media móvil ponderada exponencialla influencia de una muestra pasada decrece exponencialmentevalor típico: α = 0,125

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-85

    Ejemplo de estimación de RTT:RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

    100

    150

    200

    250

    300

    350

    1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

    time (seconnds)

    RTT

    (mill

    iseco

    nds)

    SampleRTT Estimated RTT

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-86

    TCP: ‘Round Trip Time’ y ‘Timeout’Fijar el tiempo de expiración (‘timeout’)

    EstimatedRTT más “margen de seguridad”gran variación en EstimatedRTT -> mayor margen de seguridad

    primero, estimar cuánto SampleRTT se desvía de EstimatedRTT:

    TimeoutInterval = EstimatedRTT + 4*DevRTT

    DevRTT = (1-β)*DevRTT +β*|SampleRTT-EstimatedRTT|

    (típicamente, β = 0,25)

    Entonces fijar el tiempo de expiración:

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • Algoritmo de Karn

    Si recibimos el reconocimiento de un paquete retransmitido, no tenemos forma de saber a cuál de las retransmisiones corresponde ese reconocimiento.Por ello, se ignoran los paquetes retransmitidos a la hora de computar el RTT.Este procedimiento se denomina algoritmo de Karn.

    3-87Capa de TransporteRaúl Durán, Nacho Pérez v1.4

    3-88

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexión transferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-89

    Principios de control de la congestión

    Congestión:informal: “demasiadas fuentes enviando demasiados datos demasiado deprisa para que la red lo pueda asimilar”¡¡diferente a control de flujo!!síntomas:

    paquetes perdidos (desbordamiento de bufferes en los routers)grandes retardos (encolado en los bufferes de los routers)¡¡un problema “top-10”!!

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-90

    Formas de abordar el control de congestión

    control de terminal a terminal:no hay realimentación explícita de la redla congestión se deduce por el retardo y las pérdidas observadas por los terminaleseste es el método de TCP

    control asistido por la red:los routers proporcionan realimentación a los terminales

    un bit que indica la congestión (SNA, DECnet, TCP/IP ECN, ATM)indicación explícita de la tasa a la que el emisor debería enviar

    Dos formas principales de abordarla:

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-91

    Caso de estudio: servicio ABR de las redes ATM

    ABR: ‘Available Bit Rate’(Tasa de bits disponible):

    “servicio elástico”si la ruta del emisor “infra-cargada”:

    el emisor debería usar el ancho de banda disponible

    si la ruta del emisor estácongestionada:

    el emisor se limita a la tasa garantizada

    células RM (‘resource management’, gestión de recursos) :enviado por el emisor, intercalado con las celdas de datoslos bits en las celdas RM se rellenan por los switches (“asistido por la red”)

    bit NI : no hay mejora en la velocidad (congestión suave)bit CI : indica congestión

    las celdas RM se devuelven al emisor por el receptor, sin modificar

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-92

    Caso de estudio: servicio ABR de las redes ATM

    campo ER (‘explicit rate’, tasa explícita) de 2 bytes en celda RM

    un switch congestionado puede rebajar el valor ERla tasa del emisor es así la máxima que puede aguantar la ruta

    bit EFCI en celdas de datos: se pone a 1 en switch congestionado

    si la celda que precede a la RM tiene EFCI a 1, el emisor pone a1 el bit CI en la celda RM devueltaRaúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-93

    Capítulo 3: índice

    3.1 Servicios de la capa de transporte

    3.2 Multiplexación y desmultiplexación

    3.3 Transporte sin conexión: UDP

    3.4 Principios de transferencia de datos fiable

    3.5 Transporte orientado a conexión: TCP

    estructura de segmentogestión de conexión transferencia de datos fiablecontrol de flujoestimación de RTT y temporización

    3.6 Principios de control de congestión

    3.7 Control de congestión TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-94

    control de congestión en TCP : incremento aditivo, decremento multiplicativo

    8 Kbytes

    16 Kbytes

    24 Kbytes

    time

    congestionwindow

    filosofía: incrementar la tasa de transmisión (tamaño de la ventana), sondeando el ancho de banda accesible, hasta que hay pérdidas

    incremento aditivo: incrementar cwnd en 1 MSS cada RTT hasta que haya pérdidasdecremento multiplicativo: dividir cwnd por 2 cuando las haya

    tiempo

    cwnd

    : tam

    año

    de la

    ven

    tana

    co

    n co

    nges

    tión

    diente de sierra: sondeo del ancho

    de banda

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-95

    Control de congestión TCP: detalles

    el emisor limita la transmisión:LastByteSent-LastByteAcked

    ≤ cwnd

    ‘grosso modo’,

    cwnd es dinámica, función de la congestión de la red percibida

    ¿Cómo percibe el emisor la congestión?evento de pérdida = expiración o 3 ACKs duplicadosel emisor reduce la tasa (cwnd) tras un evento de pérdida

    3 mecanismos:AIMDarranque lentoconservador tras eventos de expiración

    tasa = cwndRTT Bytes/s

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-96

    TCP: Arranque lento

    cuando se inicia la conexión, la tasa se incrementa exponencialmente hasta la primera pérdida:

    inicialmente cwnd = 1 MSScwnd se dobla cada RTTse incrementa cwnd con cada ACK recibido

    resumen: la tasa inicial es baja, pero crece exponencialmente rápido

    Host A

    un segmento

    RTT

    Host B

    tiempo

    2 segmentos

    4 segmentos

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-97

    Refinado: deducción de pérdidastras 3 ACKs duplicados

    cwnd se divide por 2la ventana ya crece linealmente

    pero tras una expiración:cwnd en cambio se pone a 1 MSS; la ventana entonces crece exponencialmentehasta un umbral, luego linealmente

    3 ACKs duplicados indica que la red es capaz de entregar algunos segmentos

    expiración indica una situación de congestión “más alarmante”

    Filosofía:

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-98

    RefinadoP: ¿cuándo debería

    pasarse de incremento exponencial a lineal?

    R: cuando cwnd llegue a 1/2 de su valor antes de la expiración

    Implementación:variable ssthreshcon una pérdida, ssthreshse pone a 1/2 de cwndjusto antes de la pérdida

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-99

    Resumen: Control de congestión TCP

    expiraciónssthresh = cwnd/2

    cwnd = 1 MSSdupACKcount = 0

    retransmitir segmento que falta

    Λcwnd > ssthresh

    evitación decongestion

    cwnd = cwnd + MSS (MSS/cwnd)dupACKcount = 0

    transmitir nuevo(s) segmento(s), según se pueda

    ACK nuevo.

    dupACKcount++ACK duplicado

    recuperación rápida

    cwnd = cwnd + MSStransmitir nuevo(s) segmento(s), según se pueda

    ACK duplicado

    ssthresh= cwnd/2cwnd = ssthresh + 3

    retransmitir segmento que falta

    dupACKcount == 3

    expiraciónssthresh = cwnd/2

    cwnd = 1 dupACKcount = 0

    retransmitir segmento que faltassthresh= cwnd/2

    cwnd = ssthresh + 3retransmitir segmento que falta

    dupACKcount == 3cwnd = ssthreshdupACKcount = 0

    ACK nuevo

    arranque lento

    expiraciónssthresh = cwnd/2

    cwnd = 1 MSSdupACKcount = 0

    retransmitir segmento que falta

    cwnd = cwnd+MSSdupACKcount = 0transmitir nuevo(s) segmento(s), según se pueda

    ACK nuevodupACKcount++ACK duplicado

    Λcwnd = 1 MSS

    ssthresh = 64 KBdupACKcount = 0

    NewACK!

    NewACK!

    NewACK!

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-100

    eficiencia de TCP

    ¿cuál es la tasa media de TCP en función del tamaño de ventana y RTT?

    ignorar el arranque rápidosea W el tamaño de la ventana cuando ocurre una pérdida

    cuando la ventana es W, la tasa es W/RTTjusto tras la pérdida, la ventana pasa a W/2, y la tasa a W/2RTTla tasa media es: 0,75 W/RTT

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-101

    Futuros de TCP: TCP sobre “tubos largos y gruesos”

    ejemplo: segmentos de 1500 bytes, RTT 100ms, se quiere tasa de 10 Gbps requiere tamaño de ventana W = 83.333 segmentos en tránsitotasa de transferencia en función de la tasa de pérdidas:

    L = 2·10-10 ¡¡una tasa de pérdidas muy baja!!nuevas versiones de TCP para alta velocidad

    LRTTMSS⋅22,1

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-102

    objetivo de equidad: si K sesiones TCP comparten el mismo enlace cuello de botella de ancho de banda R, cada uno debería tener una tasa media de R/K

    conexión TCP 1

    router cuello de botella

    capacidad Rconexión TCP 2

    Equidad en TCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-103

    ¿Por qué es equitativoTCP?2 sesiones que compiten:

    el incremento aditivo da una pendiente de 1 en los incrementosel decremento multiplicativo decrementa la tasa proporcionalmente

    R

    R

    reparto equitativo del ancho de banda

    tasa de transferencia

    de la conexión 1

    tasa

    de

    tran

    sfer

    enci

    a

    de la

    con

    exió

    n 2

    evitación de congestión: incremento aditivopérdida: decrementar ventana en un factor de 2evitación de congestión: incremento aditivo

    pérdida: decrementar ventana en un factor de 2

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

    3-104

    Equidad (más)Equidad y UDP

    las aplicaciones multimedia a menudo no usan TCP

    no quieren que la tasa de transf. se limite por el control de congestión

    por eso usan UDP:envían audio/video a tasa constante, toleran pérdida de paquetes

    Equidad y conexiones TCP paralelasnada impide a una aplicación abrir conexiones paralelas entre 2 hostslos navegadores lo hacenejemplo: enlace de tasa R permite 9 conexiones

    una aplicación pide 1 TCP, obtiene tasa R/10una aplicación pide 11 TCPs, ¡¡obtiene tasa R/2!!

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte

  • 3-105

    Capítulo 3: Resumenprincipios detrás de los servicios de la capa de transporte

    multiplexación, desmultiplexacióntransferencia de datos fiablecontrol de flujocontrol de congestión

    instanciación e implementación en Internet

    UDPTCP

    Raúl Durán, Nacho Pérez v1.4 Capa de Transporte