Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Redes de Computadores
Capítulo 3: Capa de Transporte
Capítulo 3 – Sesión 13
Sesión 13
3.1 Servicios de la Capa de Transporte
Capítulo 3 – Sesión 13
Capa de Transporte: Servicios y Protocolos
application
Permite una comunicación lógica transport
network
entre procesos (aplicaciones) data link
physical
que se ejecutan en diferentes
hosts
Los protocolos de transporte se
ejecutan en los sistemas finales
(end systems)
Transmisor: Divide los mensajes
generados por las aplicaciones en
segmentos, los cuales se envían a la
capa de red application
transport
Receptor: Reensambla los segmentos network
en mensajes y los envía a la capa de data link
physical
aplicación
En cuanto a protocolos de
transporte existen dos opciones
Internet: TCP y UDP Capítulo 3 – Sesión 13
Capa de Transporte vs. Capa de Red
A B
Capítulo 3 – Sesión 13
Capa de Transporte vs. Capa de Red
Casa de A Casa de
B Capítulo 3 – Sesión 13
Capa de Transporte vs. Capa de Red
A B
Capítulo 3 – Sesión 13
Capa de Transporte vs. Capa de Red
A Mensaje B
Capítulo 3 – Sesión 13
Capa de Transporte vs. Capa de Red
A B
Capítulo 3 – Sesión 13
Capa de Transporte vs. Capa de Red
A B
Capítulo 3 – Sesión 13
Protocolos de Transporte en Internet
application
Transferencia fiable y en transport
network
orden (TCP) data link
physical
network
network data link
Control de congestión data link physical
physical
Control de flujo network
data link
Establecimiento de conexión physical
network
data link
Transferencia no fiable y no physical
network
ordenada (UDP) data link
physical
network
data link
Servicio de máximo esfuerzo (best physical
application
transport
effort) network
data link network
data link
Servicios no disponibles
physical
physical
Garantías de retardos
Garantías de ancho de banda
Capítulo 3 – Sesión 13
Sesión 13
3.1 Servicios de la Capa de Transporte
Capítulo 3 – Sesión 13
¿Como Trabaja la Mux/Demux?
Los host reciben datagramas IP 32 bits
Capítulo 3 – Sesión 13
Mux/Demux sin Conexión (UDP)
Recuerde: Para crear un socket Cuando se crea un datagrama
se le debe asignar un número que emplea UDP, se debe
de puerto en el host local especificar
DatagramSocket mySocket1 destination IP address
= new
DatagramSocket(12534); destination port #
Capítulo 3 – Sesión 13
Ejemplo: Mux/Demux sin Conexión (UDP)
DatagramSocket
DatagramSocket serverSocket = new
DatagramSocket DatagramSocket
mySocket2 = new mySocket1 = new
DatagramSocket (6428); DatagramSocket
(9157); application
(5775);
application application
P1
P3 P4
transport
transport transport
network
network link network
link physical link
physical physical
Capítulo 3 – Sesión 13
Ejemplo: Mux/Demux con Conexión (TCP)
application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B
Capítulo 3 – Sesión 13
Ejemplo: Mux/Demux con Conexión (TCP)
application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B
Capítulo 3 – Sesión 13
Ejemplo: Mux/Demux con Conexión (TCP)
application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B
Capítulo 3 – Sesión 13
Ejemplo: Mux/Demux con Conexión (TCP)
application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B
Capítulo 3 – Sesión 13
Ejemplo:Mux/Demux con Conexión (TCP)
application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B
Capítulo 3 – Sesión 13
Ejemplo: Mux/Demux con Conexión (TCP)
application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B
Capítulo 3 – Sesión 13
Sesión 13
3.1 Servicios de la Capa de Transporte
Capítulo 3 – Sesión 13
UDP: User Datagram Protocol [RFC 768]
Servicio de máximo esfuerzo UDP aplicaciones:
(best effort), los segmentos
UDP pueden streaming multimedia apps (loss
tolerant, rate sensitive)
Perderse DNS
Enviarse en desorden
SNMP
Capítulo 3 – Sesión 13
UDP: Segment header
length, in bytes of
32 bits UDP segment,
source port # dest port # including header
Capítulo 3 – Sesión 13
UDP: Segment header
length, in bytes of
32 bits UDP segment,
source port # dest port # including header
Capítulo 3 – Sesión 13
UDP Checksum
Una suma de verificación, (también llamada suma de
chequeo o checksum), en telecomunicación e informática,
es una función que tiene como propósito principal
detectar cambios accidentales en una secuencia de datos
para proteger la integridad de estos, verificando que
no haya discrepancias entre los valores obtenidos al
hacer una comprobación inicial y otra final tras la
transmisión
Transmisor:
Toma el contenido de los
segmentos, incluyendo el header
como secuencias de 16 bits
Checksum: Realiza la suma de
las secuencias de 16 bits y al
final calcula el complemento a1
de la suma, este valor es el
checksum
Incluye el valor obtenido en el
campo denominado checksum
Capítulo 3 – Sesión 13
UDP Checksum
Objetivo: Detectar errores en los segmentos transmitidos
Transmisor: Receptor:
Toma el contenido de los Calcula el valor del checksum
segmentos, incluyendo el header para el segmento recibido
como secuencias de 16 bits Verifica si el checksum calculado
Checksum: Realiza la suma de es igual al valor que se encuentra
las secuencias de 16 bits y al en el campo correspondiente
final calcula el complemento a1 (checksum field)
de la suma, este valor es el
checksum NO – Error detectado
Incluye el valor obtenido en el YES – No se ha detectado
campo denominado checksum
errores
Capítulo 3 – Sesión 13
Internet Checksum: Ejemplo
Ejemplo: Suma dos secuencias de 16-bit
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Capítulo 3 – Sesión 13
Internet Checksum: Ejemplo
Ejemplo: Suma dos secuencias de 16-bit
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 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
Capítulo 3 – Sesión 13
Internet Checksum: Ejemplo
Ejemplo: Suma dos secuencias de 16-bit
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Acarreo se
suma al resultado 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
Capítulo 3 – Sesión 13
Internet Checksum: Ejemplo
Ejemplo: Suma dos secuencias de 16-bit
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Acarreo se
suma al resultado 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
sum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
1
Capítulo 3 – Sesión 13
Internet Checksum: Ejemplo
Ejemplo: Suma dos secuencias de 16-bit
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Acarreo se
suma al resultado 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
sum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
Checksum
1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
(Complemento a1)
Capítulo 3 – Sesión 13
Análisis UDP
Configuración de un servidor de video streaming empleando VLC
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
Instalar VLC en un dos ordenadores e iniciar el programa en el
ordenador que cumple la función de servidor de video streaming y en el
cliente
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
En el servidor seleccionar Medio/emitir
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
A continuación, mediante la opción añadir, seleccionar el archivo
de video a emitir
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
Selccionamos emitir y a continuación siguiente
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
En el menú archivo, seleccionamos el protocolo RTP/MPEG
Transport Stream y a continuación seleccionamos añadir
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
En el menú archivo, seleccionamo el protocolo RTP/MPEG
Transport Stream y a continuación seleccionamos añadir
¿Qúe es DASH?
¿Qué es HLS?
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
Especificamos la IP/Puerto del ordenador cliente hacia donde
transmitiremos el video (puerto por defecto 5004). Además es
conveniente asignar un nombre de la Emisión
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
Seleccionamos siguiente (Opciones adicionales de codificación)
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
En este punto, el servidor está listo para emitir. Antes de
seleccionar emitir, vamos a configurar el lado del cliente
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
En el cliente vamos la opción ver/lista de reproducción
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
A continuación seleccionamos la opción emisiones de red.
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
En el lado del servidor seleccionamos la opción emitir y en el
cliente aparecerá el nombre de la emisión que está transmitiendo
el servidor
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
Hacemos doble clik sobre la emisión disponible (Video) y el vídeo
iniciará
Capítulo 3 – Sesión 13
Análisis UDP/Wireshark
Si durante el proceso ejecutamos wireshark ya sea en el lado del
cliente o el servidor y aplicamos los filtros adecuados, podemos
capturar los paquetes UDP
Capítulo 3 – Sesión 13
Práctica 6
o Tema:
Configuración de un Servidor de Video Streaming RTP y
Análisis del Protocolo de Transporte UDP con Wireshark
o Materiales:
o Dos ordenadores con Sistema Operativo Linux (Preferencia) o Windows
o Software VLC, Wireshark
o Archivo de video.mp4
o Objetivo Principal:
o Implementar un servidor de video streaming básico que emplee como protocolo de
transporte UDP
o Objetivos Específicos:
o Configurar un servidor de streaming empleando la aplicación VLC
o Emplear la aplicación wireshark para la captura y análisis de paquetes UDP
Capítulo 3 – Sesión 13
Práctica 6
o Tema:
Configuración de un Servidor de Video Streaming RTP y
Análisis del Protocolo de Transporte UDP con Wireshark
o Instrucciones generales
1. Conforma grupos de dos personas
2. Seguir los pasos descritos previamente para la configuración del
servidor de video streaming y captura de paquetes UDP
3. Realizar un análisis de la operación del protocolo UDP a través
de los paquetes capturados
4. Emitir de forma simultánea el video tanto en el cliente como
en el servidor y a continuación realice una valoración subjetiva de
la calidad del video obtenida en el cliente
5. Analice y determine un mecanismo para verificar si existe
pérdida de paquetes durante la transmisión del video
Capítulo 3 – Sesión 13
Práctica 6
o Tema:
Configuración de un Servidor de Video Streaming RTP y
Análisis del Protocolo de Transporte UDP con Wireshark
Fecha Máxima de Entrega del Reporte: Lunes 30 de Abril del 2018, (18h00)
Formato: pdf. (Apellidos-P6-RC.pdf) a través del evirtual
Capítulo 3 – Sesión 13
Sesión 14
3.4 Principios de la Transmisión Fiable de Datos
Capítulo 3 – Sesión 14
Principios:Transmisión Fiable de Datos
El desafío de la transferencia fiable
de datos no es exclusivo de la capa
de transporte.
Es uno de los principales objetivos
de la arquitectura de la red (capas)
Para iniciar nuestro estudio se
considerará el esquema de la figura,
donde las capas superiores
proporciona un servicio de
abstracción acerca de la existencia
de un canal confiable para el envío
de datos
Dicho modelo de abstracción es el
que proporciona TCP en Internet
para las aplicaciones
Capítulo 3 – Sesión 14
Principios:Transmisión Fiable de Datos
Es responsabilidad de un protocolo
fiable de transferencia de datos
implementar dicho servicio de
abstracción
No obstante esta tarea es compleja,
debido a que las capas bajo un
protocolo fiable pueden ser no
fiables
Por ejemplo TCP es un protocolo
fiable (rdt, reliable data transfer)
que está implementado sobre una
capa no fiable (capa de Red, IP)
Para el estudio se considera por
tanto las capas inferiores como no
fiables
Capítulo 3 – Sesión 14
Principios:Transmisión Fiable de Datos
Es responsabilidad de un protocolo
fiable de transferencia de datos
implementar dicho servicio de
abstracción
No obstante esta tarea es compleja,
debido a que las capas bajo un
protocolo fiable pueden ser no
fiables
Por ejemplo TCP es un protocolo
fiable (rdt, reliable data transfer) que
está implementado sobre una capa
no fiable (capa de Red, IP)
Para el estudio se considera por
tanto las capas inferiores como no
fiables
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Aplicación
Transporte
Capas
inferiores
(Red, Enlace
de datos,
Física)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Aplicación
Transporte
Capas
inferiores
(Red, Enlace
de datos,
Física)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Transporte
Capas
inferiores
(Red, Enlace
de datos,
Física)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Transporte
Capas
inferiores
(Red, Enlace
de datos,
Física)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Capas
inferiores
(Red, Enlace
de datos,
Física)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Aplicación
Transporte
udt_send(): Invocado por
el rdt, usualmente para
Capas el envío de mensajes de
inferiores control sobre el canal
(Red, Enlace
de datos,
Física)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Aplicación
rdt_rcv(): Invocado
cuando la información
llega al host receptor
Transporte
Capas
inferiores
(Red, Enlace
de datos,
Física)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
A continuación se describirá las características deseadas para un
protocolo tipo rdt, considerando gradualmente la complejidad que
ocasiona el canal subyacente (unreliable chanel)
Aplicación
Transporte
deliver_data(): Invocado
Capas por el rdt para pasar
inferiores los datos a la capa de
(Red, Enlace aplicación del host
de datos,
Física) receptor
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
Capítulo 3 – Sesión 14
Diseñando un Protocolo RDT (Realiable Data Transfer)
Capítulo 3 – Sesión 14
rdt1.0: Transferencia Fiable sobre un Canal Fiable
sender receiver
Capítulo 3 – Sesión 14
rdt1.0: Transferencia Fiable sobre un Canal Fiable
sender receiver
Capítulo 3 – Sesión 14
rdt1.0: Transferencia Fiable sobre un Canal Fiable
sender receiver
Capítulo 3 – Sesión 14
rdt1.0: Transferencia Fiable sobre un Canal Fiable
sender receiver
Capítulo 3 – Sesión 14
Diseñando un Protocolo RTD (Realiable Data Transfer)
Capítulo 3 – Sesión 14
rdt2.0: Canal con Errores de Bits
El canal subyacente ocasiona errores en los bits de
un paquete (por ejemplo: los bits llegan en desorden)
Checksum: Permite detectar los errores
¿Cómo se puede recuperar tales errores?
acknowledgements (ACKs): receiver explicitly tells sender
that pkt received OK
¿Cómo hacen
negative las personas(NAKs):
acknowledgements parareceiver
recuperar “errores”
explicitly tells
sender that pkt had errors
Durantepktuna
sender retransmits conversación?
on receipt of NAK
new mechanisms in rdt2.0 (beyond rdt1.0):
error detection
receiver feedback: control msgs (ACK,NAK) rcvr->sender
Capítulo 3 – Sesión 14
rdt2.0: Canal con Errores de Bits
El canal subyacente ocasiona errores en los bits de
un paquete (por ejemplo: desordenar los bits)
checksum Permite detector los errores
¿Cómo se puede recuperar tales errores?
Capítulo 3 – Sesión 14
rdt2.0: Modelo FSM
rdt_send(data)
sndpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Capítulo 3 – Sesión 14
rdt2.0: Modelo FSM
rdt_send(data)
sndpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Capítulo 3 – Sesión 14
rdt2.0: Ejemplo Operación sin Errores
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Capítulo 3 – Sesión 14
rdt2.0: Ejemplo Operación con Errores
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Capítulo 3 – Sesión 14
rdt2.0: Fallas
¿Qué ocurre si los
mensaje ACK/NACK
se corrompen?
Tx no conocerá que
ocurrió en recepción
Capítulo 3 – Sesión 14
rdt2.0: Fallas
¿Qué ocurre si los mensaje
ACK/NACK se corrompen?
Tx no conocerá que ocurrió en
recepción
Posibles soluciones:
Checksum en los mensajes ACK
para detectar errores
Capítulo 3 – Sesión 14
rdt2.0: Fallas
¿Qué ocurre si los
mensaje ACK/NACK
se corrompen?
Tx no conocerá que
ocurrió en recepción
Posibles soluciones:
Retransmitir el paquete
Capítulo 3 – Sesión 14
rdt2.0: Fallas
¿Qué ocurre si los
mensaje ACK/NACK
se corrompen?
Tx no conocerá que El receptor no conoce si
ocurrió en recepción el paquete enviado es una
Posibles soluciones: retransmisión o es
Retransmitir el paquete información nueva, por
tanto puede dar lugar a
paquetes duplicados
Capítulo 3 – Sesión 14
rdt2.0: Solución rdt2.1
¿Qué ocurre si los
mensaje ACK/NACK
se corrompen? rdt2.1
Tx no conocerá que Añadir un número de
ocurrió en recepción secuencia a cada paquete,
Posibles soluciones: de esta forma el receptor
Retransmitir el paquete descartará un paquete si
detecta que es un
duplicado
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Transmisor
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Transmisor
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Transmisor
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Transmisor
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Transmisor
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
Envía el ACK, pero
extract(rcvpkt,data) descarta el paquete si
deliver_data(data) está duplicado
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.1: Modelo FSM del Receptor
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Capítulo 3 – Sesión 14
rdt2.2: Protocolo sin NAK
Funcionalidad similar a rtd2.1, empleando únicamente ACKs
Capítulo 3 – Sesión 14
Canal con Errores y Pérdidas
Nuevas condiciones:
El canal subyacente puede
ocasionar tanto errores
como pérdidas en los
paquetes (datos, ACKs)
En este caso los mecanismos
anteriores (checksum,
números de secuencia, ACKs,
retransmisiones) no son
suficiente
Capítulo 3 – Sesión 14
rdt3.0: Canal con Errores y Pérdidas
Nuevas condiciones: Enfoque: El transmisor espera un
El canal subyacente puede tiempo “razonable” por un ACK
ocasionar tanto errores Retransmite el paquete si no recibe
como pérdidas en los un ACK en ese tiempo
paquetes (datos, ACKs) Si el paquete (o el ACK)
En este caso los mecanismos experimenta un retardo (no
anteriores (checksum, pérdida)
números de secuencia, ACKs, La retransmisión generará un
retransmisiones) no son duplicado, pero este inconveniente
suficiente será manejado a través de los
números de secuencia
Receptor tiene que especificar el
número de secuencia de un
paquete en el ACK
Requiere un Contador (timer)
Capítulo 3 – Sesión 14
rdt3.0: Operación
sender receiver sender receiver
send pkt0 pkt0 send pkt0 pkt0
rcv pkt0 rcv pkt0
ack0 send ack0 ack0 send ack0
rcv ack0 rcv ack0
send pkt1 pkt1 send pkt1 pkt1
rcv pkt1 X
ack1 send ack1 loss
rcv ack1
send pkt0 pkt0
rcv pkt0 timeout
ack0 send ack0 resend pkt1 pkt1
rcv pkt1
ack1 send ack1
rcv ack1
send pkt0 pkt0
(a) no loss rcv pkt0
ack0 send ack0
Capítulo 3 – Sesión 14
Sesión 15
3.4 Principios de la Transmisión Fiable de Datos
(Continuación….)
Capítulo 3 – Sesión 15
Sesión 15
3.4 Principios de la Transmisión Fiable de Datos
(Continuación….)
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
8000 bits x
paquete
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
8000 bits x
paquete
Dprop=15ms
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
8000 bits x
paquete
Dprop=15ms
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
8000 bits x
paquete
Dprop=15ms
RTT30ms
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
Tiempo que tarda la
transmisión de un
paquete (debido a la
espera por un ACK) 8000 bits x
paquete
Dprop=15ms
RTT30ms
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
Tiempo que tarda la
transmisión de un
paquete (debido a la
espera por un ACK) 8000 bits x
paquete
Dprop=15ms Velocidad a la
RTT30ms que se inyectan
paquetes en el
enlace
L 8000 bits
Dtrans = R = = 8 microsecs
109 bits/sec
Capítulo 3 – Sesión 15
Evaluación de rdt3.0
El diseño de rtd3.0, es adecuado, pero
¿Cuál es su efecto en la red?
8000 bits x
paquete
Dprop=15ms
RTT30ms
8000 bits x
paquete
Dprop=15ms
RTT30ms
8000 bits x
paquete
Dprop=15ms
RTT30ms
¡El protocolo limita el uso de los recursos de la red!
Es decir el throughput efectivo es tan solo de:
8000𝑏𝑖𝑡𝑠
= 265957𝑏𝑝𝑠266𝐾𝑏𝑝𝑠, de un enlace de 1Gbps
0.03008𝑠
Capítulo 3 – Sesión 15
Protocolo Tipo “Pipeline”
Para mejorar el uso de los recursos de la red, una
solución consiste en permitir al Tx enviar conjuntos de
paquetes antes de tener que esperar por los mensajes
ACK. Esta técnica se denomina pipeline (tubería)
Capítulo 3 – Sesión 15
Protocolo Tipo “Pipeline”
Para mejorar el uso de los recursos de la red, una solución
consiste en permitir al Tx enviar conjuntos de paquetes
antes de tener que esperar por los mensajes ACK. Esta
técnica se denomina pipeline (tubería o canalización
Mejora el uso de los
recursos en un factor
igual al número de
paquetes enviados
antes de esperar los
ack
¿Investigar
Existen dos variantes de protocolos algunas
pipeline
go-Back-N, características de las dos
selective repeat variantes?
Capítulo 3 – Sesión 15
Protocolos Tipo “Pipeline”
Capítulo 3 – Sesión 15
Sesión 15
3.4 Principios de la Transmisión Fiable de Datos
(Continuación….)
Capítulo 3 – Sesión 15
Sesión 15
3.4 Principios de la Transmisión Fiable de Datos
(Continuación….)
Capítulo 3 – Sesión 15
Estructura de los segmentos TCP
32 bits
URG: urgent data counting
(generally not used) source port # dest port #
by bytes
sequence number of data
ACK: ACK #
valid acknowledgement number (not segments!)
head not
PSH: push data now len used
UAP R S F receive window
(generally not used) # bytes
checksum Urg data pointer
rcvr willing
RST, SYN, FIN: to accept
options (variable length)
connection estab
(setup, teardown
commands)
application
Internet data
checksum (variable length)
(as in UDP)
Capítulo 3 – Sesión 15
TCP seq. numbers, ACKs
outgoing segment from sender
Sequence Numbers: source port # dest port #
Los mensajes se dividen en sequence number
segmentos acknowledgement number
Capítulo 3 – Sesión 15
TCP Round Trip Time, Timeout
¿Como define TCP el valor de
espera antes de un
retransmisión (timeout)?
Capítulo 3 – Sesión 15
TCP Round Trip Time, Timeout
¿Como define TCP el valor de ¿Cómo se estima el RTT?
espera antes de un
retransmisión (timeout)? SampleRTT: Medir el tiempo
El valor debe ser mayor al RTT desde la transmisión de un
RTT puede variar segmento hasta la recepción
de un ACK
Espera muy corta: ocasiona un
SampleRTT: Para mayor
timeout prematuro
precisión se realiza un
retransmisión innecesaria promedio de varias
Espera muy larga: reacción mediciones recientes para
lenta ante la pérdida de obtener el valor RTT
segmentos TCP timers [RFC 6298]
Capítulo 3 – Sesión 15
TCP Round Trip Time, Timeout
TCP timers [RFC 6298]
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
350
300
250
RTT (milliseconds)
200
sampleRTT
150
EstimatedRTT
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
time (seconds) Capítulo 3 – Sesión 15
SampleRTT Estimated RTT
Sesión 15
3.4 Principios de la Transmisión Fiable de Datos
(Continuación….)
Capítulo 3 – Sesión 15
TCP:Transferencia Fiable de Datos (RDT)
Host A Host B
TCP proporciona un servicio
rdt sobre una capa de red no
fiable (IP)
Seq=92, 8 bytes of data
Segmentos tipo Pipelined
timeout
Cumulative ACKs ACK=100
X
Timer para retransmisiones
Las retransmisión se generan
Seq=92, 8 bytes of data
debido:
Timeouts
ACK=100
ACKs duplicados
(Continuación….)
Capítulo 3 – Sesión 15
TCP: Control de Flujo
application
application may process
remove data from application
TCP socket buffers ….
TCP socket OS
receiver buffers
… slower than TCP
receiver is delivering
(sender is sending) TCP
code
Control de Flujo IP
code
El receptor controla al
transmisor, de esta forma
from sender
el transmisor no puede
sobrecargar al receptor Receiver Protocol Stack
con exceso de datos
Capítulo 3 – Sesión 15
TCP: Control de Flujo
application
application may process
remove data from application
TCP socket buffers ….
source port # dest port # TCP socket OS
sequence number receiver buffers
acknowledgement number … slower than TCP
rwnd receiver is delivering
checksum urg pointer (sender is sending) TCP
code
rwnd
Control de Flujo IP
code
Receptor controla al
transmisor, de esta forma
from sender
el transmisor no puede
sobrecargar al receptor Receiver Protocol Stack
con exceso de datos
Capítulo 3 – Sesión 15
TCP: Control de Flujo
El receptor advierte acerca
to application process
del espacio libre en el buffer
a través del campo rwnd
RcvBuffer buffered data
RcvBuffer Este valor se
configura durante la
programación de un socket
rwnd free buffer space
(default 4096 bytes)
Los sistemas operativos TCP segment payloads
usualmente realizan un
ajuste automático del buffer receiver-side buffering
El transmisor limita la
cantidad de datos acorde al
valor rwnd recibido
Capítulo 3 – Sesión 15
Sesión 15
3.4 Principios de la Transmisión Fiable de Datos
(Continuación….)
Capítulo 3 – Sesión 15
Gestión de la Conexión
Antes del intercambio de datos se lleva a cabo el
“handshake” entre el Tx y el Rx:
Acuerdo para establecer la comunicación (identificación)
Acuerdo acerca de los parámetros para la comunicación
application application
network network
application application
network network
SYN RCVD
ESTAB
ESTAB
Capítulo 3 – Sesión 15
TCP 3-way handshake
Capítulo 3 – Sesión 15
TCP 3-way handshake
ESTAB
ESTAB
Capítulo 3 – Sesión 15
Capítulo 3 – Sesión 15
Capítulo 3 – Sesión 15
TCP 3-way handshake
• El cliente recibe el SYNACK, a continuación reserva los
recursos para la conexión (buffer)
client state server state
• El cliente envía un último segmento al servidor confirmando la
LISTEN
conexión LISTEN
choose init seq num, x
• Se incluye sendunTCPACK con número de secuencia= server_isn + 1.
SYN msg
•SYNSENT
SYN = 0 SYNbit=1, Seq=x
• Este segmento ya puede incluir datos generados choose initpor la ycapa de
seq num,
aplicación send TCP SYNACK
msg, acking SYN SYN RCVD
Tercer Paso SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
received SYNACK(x)
ESTAB indicates server is live;
send ACK for SYNACK;
this segment may contain ACKbit=1, ACKnum=y+1
client-to-server data
received ACK(y)
indicates client is live
ESTAB
Capítulo 3 – Sesión 15
TCP 3-way handshake
Capítulo 3 – Sesión 15
Capítulo 3 – Sesión 15
Capítulo 3 – Sesión 15
Sesión 16
3.6 Principios del Control de Congestión
Capítulo 3 – Sesión 16
Sesión 16
3.6 Principios del Control de Congestión
Capítulo 3 – Sesión 16
Principios del Control de Congestión
Congestión:
Demasiadas fuentes de datos, enviando gran cantidad de
información a una tasa alta, que impide la gestión
adecuada de la información en la red
Consecuencias
Pérdida de paquetes
Incremento significativo del retardo (delay)
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 1
original data: lin throughput: lout
Host A
unlimited shared
output link buffers
Host B
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 1
original data: lin throughput: lout
Host A
unlimited shared
output link buffers
Host B
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 1
original data: lin throughput: lout
2 Tx – 2 Rx
1 Router (buffer infinito) Host A
Host B
Capítulo 3 – Sesión 16
Capítulo 3 – Sesión 13
Host B
R/2
lout
lin R/2
Host B
R/2
delay
lout
Host A
Host A
lout
El Tx envía datos solo cuando
existe espacio libre en el buffer
del router lin R/2
A
no buffer space!
Host B
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 3
Condiciones Realistas:
Los paquetes pueden perderse
Los paquetes son descartados por el router cuando no hay
espacio en el buffer
El transmisor reenvía paquetes si conoce de la pérdida
A
free buffer space!
Host B
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 3
Condiciones Realistas:
El transmisor puede generar duplicados de paquetes debido al
timeout
l'in lin
La cantidad de información
resultante (capa de aplicación más
capa de trasporte) es mayor a la
generada por la capa de aplicación
lin
timeout
copy l'in lout
A
free buffer space!
Host B
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 3
R/2
lout
retransmissions
including duplicated
that are delivered!
lin
R/2
Efectos de la Congestión:
Incrementa significativamente el esfuerzo (retransmisiones)
en la red para un mismo “goodput”
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 3
R/2
lout
retransmissions
including duplicated
that are delivered!
lin R/2
Efectos de la Congestión:
Incrementa significativamente el esfuerzo (retransmisiones)
en la red para un mismo “goodput”
Capítulo 3 – Sesión 16
Congestión Causas/Efectos: Escenario 3
R/2
lout
retransmissions
including duplicated
that are delivered!
lin R/2
Efectos de la Congestión:
Las retransmisiones innecesarias (paquetes duplicados – timeout)
disminuyen el goodput
Capítulo 3 – Sesión 16
Enfoques para el Control de la Congestión
end-end network-feedback
Capítulo 3 – Sesión 16
Enfoques para el Control de la Congestión
end-end network-feedback
No existe una
retroalimentación explicita de
la red
La congestion es inferida a
partir de los end systems
(hosts) acorde al delay y
pérdidas
Enfoque empleado por TCP
Capítulo 3 – Sesión 16
Enfoques para el Control de la Congestión
end-end network-feedback
No existe una Los routers proveen una
retroalimentación explicita de retroalimentación a los end
la red systems
La congestion es inferida a
partir de los end systems
(hosts) acorde al delay y
pérdidas
Enfoque empleado por TCP
Capítulo 3 – Sesión 16
Enfoques para el Control de la Congestión
end-end network-feedback
No existe una Los routers proveen una
retroalimentación explicita de retroalimentación a los end
la red systems
Por ejemplo: Un bit que
La congestion es inferida a indica congestión (ECN)
partir de los end systems Indica explicitamente un
(hosts) acorde al delay y valor de tasa de envío (rate)
pérdidas al Tx
Enfoque empleado por TCP
Capítulo 3 – Sesión 16
Enfoques para el Control de la Congestión
end-end network-feedback
No existe una Los routers proveen una
retroalimentación explicita de retroalimentación a los end
la red systems
Por ejemplo: Un bit que
La congestion es inferida a indica congestión (ECN)
partir de los end systems Indica explicitamente un
(hosts) acorde al delay y valor de tasa de envío (rate)
pérdidas al Tx
Enfoque empleado por TCP
end-end network-feedback
No existe una Los routers proveen una
retroalimentación explicita de retroalimentación a los end
la red systems
Por ejemplo: Un bit que
La congestion es inferida a indica congestión (ECN)
partir de los end systems Indica explicitamente un
(hosts) acorde al delay y valor de tasa de envío (rate)
pérdidas al Tx
Enfoque empleado por TCP
end-end network-feedback
No existe una Los routers proveen una
retroalimentación explicita de retroalimentación a los end
la red systems
Por ejemplo: Un bit que
La congestion es inferida a indica congestión (ECN)
partir de los end systems Indica explicitamente un
(hosts) acorde al delay y valor de tasa de envío (rate)
pérdidas al Tx
Enfoque empleado por TCP
Sesión 16
3.6 Principios del Control de Congestión
Capítulo 3 – Sesión 16
TCP: Control de Congestión
Enfoque: Tx incrementa la tasa de transmisión (bit rate)
(window size) dentro del ancho de banda disponible hasta
que ocurren pérdidas
RTT
ocurra la primera pérdida
Es decir se produce el
incremento por cada ACK time
recibido
Capítulo 3 – Sesión 16
TCP: Detección y reacción a las pérdidas
bytes
cwnd
sec
time
Capítulo 3 – Sesión 16
TCP: Detección y reacción a las pérdidas
Incremento del tamaño de la ventana
(cantidad de bytes), hasta detectar
pérdidas
bytes
Umbral detectado
cwnd
sec
time
Capítulo 3 – Sesión 16
TCP: Detección y reacción a las pérdidas
sec
time Reducir el tamaño de la
ventana y reiniciar el
incremento
Capítulo 3 – Sesión 16
TCP: Detección y reacción a las pérdidas
¿A que valor se debe reducir el tamaño
de la ventana al detectar pérdidas?
time
Existen Opciones Algoritmos
Capítulo 3 – Sesión 16
TCP: Detección y reacción a las pérdidas
TCP Tahoe: Las pérdidas se detectan mediante ACKs
duplicados o por el timeout
cwnd
time
TCP Tahoe: Una vez detectado la pérdida establece el
valor de cwnd a 1 y se reinicia el proceso
Capítulo 3 – Sesión 16
TCP: Detección y reacción a las pérdidas
TCP Reno: Las pérdidas se detectan mediante ACKs
duplicados
cwnd
time
TCP Reno: Una vez detectada la pérdida, establece el
valor de cwnd a la mitad y a continuación inicia un
incremento lineal de la ventana cwnd Capítulo 3 – Sesión 16
TCP: Detección y reacción a las pérdidas
¿Existen más algoritmos, para el control de
congestión con TCP? Reno
Tahoe
Vegas
Cubic
cwnd
H-TCP
Compound TCP
TCP BBR
Scalable TCP
time .
.
TCP-LP
Entre otros!!
Capítulo 3 – Sesión 16
Video Resumen: ¿Como Funciona Internet?
Capítulo 3 – Sesión 16
EVALUACIÓN CAPÍTULO 3 (5 PUNTOS)
Capítulo 3 – Sesión 16
FACULTAD DE INGENIERÍA
Redes de Computadores
Capítulo 3: Capa de Transporte