1
Transport Layer 3-1
Capítulo 3
Capa de Transporte
Transport Layer 3-2
rdt2.2: un protocolo libre de NAK
La misma funcionalidad que rdt2.1, usando sólo ACKs
En lugar de NAK, el receptor envía ACK por el último
paquete recibido OK
Receptor debe explícitamente incluir # de secuencia del
paquete siendo confirmado con el ACK
ACK duplicados en el Tx resulta en la misma acción
que NAK: retransmitir paquete actual
Transport Layer 3-3
rdt2.2: Fragmentos de transmisor y
receptor
Wait for
call 0 from
above
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)
Wait for
ACK
0
Fragmento transmisor FSM
Wait for
0 from
below
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
Fragmento receptor FSM
Λ
2
Transport Layer 3-4
rdt3.0: Canales con errores y pérdidas
Suposición nueva:
canal subyacente también
puede perder paquetes (de
datos o ACKs)
checksum, # de
secuencias, ACKs, y
retransmisiones ayudan
pero no son suficientes
Estrategia: transmisor espera un
tiempo “razonable” por el ACK
Retransmitir si no se recibe ACK
en este tiempo
Si el paquete (o ACK) está
retardado (no perdido):
La retransmisión será un
duplicado, pero el uso de #’s
de secuencia ya maneja esto
Receptor debe especificar el
# de secuencia del paquete
siendo confirmado en el ACK
Se requiere un temporizador de
cuenta regresiva
Transport Layer 3-5
rdt3.0
Transmisor
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Wait for
call 1 from
above
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_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
Λ
rdt_rcv(rcvpkt)
Λ
Λ
Λ
Transport Layer 3-6
rdt3.0 en acción
a) Operación sin pérdidas
b) Operación con pérdidas
3
Transport Layer 3-7
rdt3.0 en acción
c) Pérdida de ACK d) Timeout prematuro
Transport Layer 3-8
Desempeño de rdt3.0
rdt3.0 funciona, pero su desempeño es malo
Ejemplo: enlace de 1 Gbps, 15 ms de retardo ext. a
ext, paquetes de 1KB:
s
sb
paquetekb
R
L
Ttransmitir μ8
/10
/8
9
===
U transmisor: utilización del transmisor o canal = fracción de tiempo que
el transmisor/canal está ocupado transmitiendo
1 paquete de 1KB cada ~30 ms -> 33kB/s throughput en enlace de 1
Gbps
Protocolo de red limita el uso de los recursos físicos!
bpsenóntransmisideTasa:
bitsenpaquetedelLargo:
R
L
00027.0
008.30
008.0
/
/
==
+
=
RLRTT
RL
Utransmisor
Transport Layer 3-9
rdt3.0: Operación stop-and-wait
first packet bit transmitted, t = 0
transmisor receptor
RTT
last packet bit transmitted, t = L / R
Primer bit del paquete llega
Ultimo bit del paquete llega,
envía ACK
ACK llega, envía siguiente
paquete, t = RTT + L / R
U
sender
=
.008
30.008
= 0.00027
L / R
RTT + L / R
=
4
Transport Layer 3-10
Protocolos con Pipeline
Con Pipeline: Transmisor permite múltiples paquetes
en tránsito con acuse de recibo pendiente
El rango de los números de secuencia debe ser
aumentado
Se requiere buffers en el Tx y/o Rx
Hay dos formas genéricas de protocolos con pipeline:
go-Back-N, selective repeat (repetición selectiva)
Transport Layer 3-11
Pipelining: incrementa la utilización
first packet bit transmitted, t = 0
transmisor receptor
RTT
last bit transmitted, t = L / R
first packet bit arrives
last packet bit arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK
U
sender
=
.024
30.008
= 0.0008
3 * L / R
RTT + L / R
=
Incrementa la utilización
en un factor de 3!
Transport Layer 3-12
Protocolos de Pipelining
Go-back-N:
Transmisor puede tener
hasta N paquetes unacked
en el pipeline
Rcvr solo envía acks
acumulativos
No hace un ack del
paquete si hay una
interrupción
Transmisor tiene un timer
para los paquetes viejos
unacked
Si el timer expira, se
retransmite todos los
paquetes unacked
Selective Repeat:
Transmisor puede tener
hasta N paquetes unacked
en el pipeline
Rcvr acks paquetes
individuales
Transmisor mantiene un
timer para cada uno de los
paquetes unacked
Cuando el timer expira,
retransmite unicamente el
paquete unack
5
Transport Layer 3-13
Go-Back-N
Transmisor:
# de secuencia de k-bits en el encabezado del paquete
Si k bits son reservados para el numero de secuencia entonces el rango va desde 0
hasta (modulo counter)
“ventana” de hasta N, paquetes consecutivos con acuse de recibo pendiente
ACK(n): da acuse de recibo a todos los paquetes hasta el con # de secuencia n;
corresponde a un “acuse de recibo acumulado”
Podría recibir ACKs duplicados
Usa un timer por cada paquete en tránsito
timeout(n): retransmitir paquete n y todos los paquetes que han sido enviados
después de este pero no se ha recibido ack
Próximo número de
secuencia a usar
Núm. Sec. más antiguo
sin ACK: Base
Tamaño de
ventana N
Con ACK
recibidos
ACK
pendientes
No usable
Usable, aún
no enviados
Transport Layer 3-14
GBN: Extendido FSM del transmisor
Wait
start_timer
udt_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_timer
nextseqnum++
}
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
&& corrupt(rcvpkt)
Λ
Transport Layer 3-15
GBN: Extendido FSM del receptor
Sólo ACK: siempre envía ACK de paquete correctamente
recibido con el # de secuencia
Puede generar ACKs duplicados
Sólo necesita recordar expectedseqnum
Paquetes fuera de orden:
descartarlos (no almacenar en buffer) => no requiere buffer
en receptor!
Re-envía ACK del más reciente paquete en orden recibido
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=1
sndpkt =
make_pkt(expectedseqnum,ACK,chksum)
Λ
6
Transport Layer 3-16
GBN en
acción
Transport Layer 3-17
Selective Repeat (repetición
selectiva)
Receptor envía acuse de recibo individuales de
todos los paquetes recibidos
Almacena paquetes en buffer, según necesidad para su
entrega en orden a la capa superior
Transmisor sólo re-envía los paquetes sin ACK
recibido
Transmisor usa un timer por cada paquete sin ACK
Ventana del Transmisor
N # de secuencia consecutivos
Nuevamente limita los #s de secuencia de paquetes
enviados sin ACK
Transport Layer 3-18
Selective repeat: Ventanas de Tx y Rx
Con ACK
recibidos
ACK
pendientes
No usable
Usable, aún
no enviados
Esperado, aún
no recibido
Fuera de orden
(almacenados) con
ACK enviado
Aceptable
(en ventana)
No usable
a) Vista del transmisor de los número de secuencia
b) Vista del receptor de los número de secuencia
7
Transport Layer 3-19
Selective repeat (repetición
selectiva)
Llega datos desde arriba:
Si el próximo # de sec. está
en ventana, enviar paquete
timeout(n):
Re-enviar paquete n, re-
iniciar timer
ACK(n) :
Marcar paquete n como
recibido
Si n es el paquete más
antiguo sin ACK, avanzar la
base de la ventana al
próximo # de sec. sin ACK.
Transmisor Llega paquete n , Enviar ACK(n)
Si está fuera de orden:
almacenar en buffer
en-orden: entregar a capa
superior (también entregar
paquetes en orden del buffer),
avanzar ventana al paquete
próximo aún no recibido
Fuera de la ventana:
ignórelo
Receptor
Transport Layer 3-20
Repetición Selectiva en Acción
Transport Layer 3-21
Dilema de la repetición
Selectiva
Ejemplo:
#s de sec.: 0, 1, 2, 3
Tamaño de ventana=3
Rx no ve diferencia en
los dos escenarios!
Pasa incorrectamente
datos como nuevos en
(a)
Q: ¿Qué relación debe
existir entre el # de
sec. y el tamaño de
ventana?
8
Transport Layer 3-22
Q: ¿Qué relación debe existir
entre el # de sec. y el tamaño
de ventana?
La clave para evitar este problema es impedir que se
pueda producir el escenario de la figura adjunta.
Los tamaños de las ventanas del receptor y el
transmisor deben ser:
Donde k es el número de bit usados para definir la
secuencia
Transport Layer 3-23
Capítulo 3: Continuación
3.1 Servicios de la
capa transporte
3.2 Multiplexing y
demultiplexing
3.3 Transporte sin
conexión: UDP
3.4 Principios de
transferencia
confiable de datos
3.5 Transporte
orientado a la conexión:
TCP
Estructura de un
segmento
Transferencia confiable
de datos
Control de flujo
Gestión de la conexión
3.6 Principios del control
de congestión
3.7 Control de
congestión en TCP
Transport Layer 3-24
TCP: Generalidades RFCs: 793, 1122, 1323,
2018, 2581
Datos full duplex:
Flujo de datos bi-
directional en la misma
conexión
MSS: maximum segment
size
orientado-a la conexión:
handshaking (intercambio
de mensajes de control)
init’s sender, estado del
receptor antes del
intercambio de datos
Flujo controlado:
Transmisor no saturará al
receptor
point-to-point:
Un transmisor, un receptor
confiabilidad, byte steam en
orden:
pipelined:
Congestión TCP y control de
flujo fijan el tamaño de la
ventana
Buffers transmisor &
receptor
socket
door
TCP
send buffer
TCP
receive buffer
socket
door
segment
application
writes data
application
reads data
9
Transport Layer 3-25
Estructura del segmentoTCP
source port # dest port #
32 bits
application
data
(variable length)
sequence number
acknowledgement number
Receive window
Urg data pnterchecksum
FSRPAU
head
len
not
used
Options (variable length)
URG: datos urgente
(generalmente no usado)
ACK: ACK #
valid
PSH: push data now
eneralmente no usado)
RST, SYN, FIN:
connection estab
(setup, teardown
commands)
# bytes
rcvr willing
to accept
Cuenta por
bytes de datos
(no segmentos!)
Internet
checksum
(como en UDP)
Transport Layer 3-26
TCP número de secuencia y ACKs
#’s secuencia:
“numero” del flujo de
bytes definido por el
primer byte en el
segmento de datos
ACKs:
# secuencia del
siguiente byte
esperado por el otro
lado
ACK acumulativo
Q: Como el receptor maneja
los segmentos fuera de
orden
A: Los RFC no los
mencionan, se lo
dejan al programador
Host A Host B
Seq=42, ACK=79, data = ‘C’
Seq=79, ACK=43, data = ‘C’
Seq=43, ACK=80
Usuario teclea
‘C’
host ACKs
recepción
del echoed
‘C’
host ACKs
de recepción
‘C’, echoes
back ‘C’
tiempo
Escenario telnet simple
Transport Layer 3-27
TCP Round Trip Time y el Timeout
Q: Como se puede
fijar el valor de
TCP timeout ?
Más largo que RTT
pero RTT varia
Muy corto:
timeout prematuro
Retransmisiones
no necesarias
Muy largo: reacción
lerda a la pérdida
de segmentos
Q: Como se estima RTT?
SampleRTT: tiempo medido
desde la transmisión del
segmento hasta la recepción del
ACK
Ignorar las retransmisiones
SampleRTT variará, quiere un
estimado de RTT más pulido
Promediar algunas medidas
recientes no solamente la
actual SampleRTT
10
Transport Layer 3-28
TCP Round Trip Time yTimeout
EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT
Movimiento exponencial
Influencia de las muestras pasadas decrementa
rápidamente el exponencial
Valor típico: α = 0.125
Transport Layer 3-29
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(milliseconds)
SampleRTT Estimated RTT
Transport Layer 3-30
TCP Round Trip Time y Timeout
Fijando el timeout
EstimtedRTT más “margen de seguridad”
Variaciones largas en el EstimatedRTT -> margen de
seguridad más largo
DevRTT es un estimado de cuanto el SampleRTT se desvía
del EstimatedRTT:
TimeoutInterval = EstimatedRTT + 4*DevRTT
DevRTT = (1-β)*DevRTT +
β*|SampleRTT-EstimatedRTT|
(tipicamente, β = 0.25)
Luego fijar el intervalo de timeout:
11
Transport Layer 3-31
Capítulo 3: Continuación
3.1 Servicios de la
capa transporte
3.2 Multiplexing y
demultiplexing
3.3 Transporte sin
conexión: UDP
3.4 Principios de
transferencia
confiable de datos
3.5 Transporte orientado a la
conexión: TCP
Estructura de un
segmento
Transferencia confiable
de datos
Control de flujo
Gestión de la conexión
3.6 Principios del control
de congestión
3.7 Control de
congestión en TCP

Capa de Transporte

  • 1.
    1 Transport Layer 3-1 Capítulo3 Capa de Transporte Transport Layer 3-2 rdt2.2: un protocolo libre de NAK La misma funcionalidad que rdt2.1, usando sólo ACKs En lugar de NAK, el receptor envía ACK por el último paquete recibido OK Receptor debe explícitamente incluir # de secuencia del paquete siendo confirmado con el ACK ACK duplicados en el Tx resulta en la misma acción que NAK: retransmitir paquete actual Transport Layer 3-3 rdt2.2: Fragmentos de transmisor y receptor Wait for call 0 from above 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) Wait for ACK 0 Fragmento transmisor FSM Wait for 0 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt)) udt_send(sndpkt) Fragmento receptor FSM Λ
  • 2.
    2 Transport Layer 3-4 rdt3.0:Canales con errores y pérdidas Suposición nueva: canal subyacente también puede perder paquetes (de datos o ACKs) checksum, # de secuencias, ACKs, y retransmisiones ayudan pero no son suficientes Estrategia: transmisor espera un tiempo “razonable” por el ACK Retransmitir si no se recibe ACK en este tiempo Si el paquete (o ACK) está retardado (no perdido): La retransmisión será un duplicado, pero el uso de #’s de secuencia ya maneja esto Receptor debe especificar el # de secuencia del paquete siendo confirmado en el ACK Se requiere un temporizador de cuenta regresiva Transport Layer 3-5 rdt3.0 Transmisor sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) Wait for ACK0 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) Wait for call 1 from above 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_timer stop_timer udt_send(sndpkt) start_timer timeout udt_send(sndpkt) start_timer timeout rdt_rcv(rcvpkt) Wait for call 0from above Wait for ACK1 Λ rdt_rcv(rcvpkt) Λ Λ Λ Transport Layer 3-6 rdt3.0 en acción a) Operación sin pérdidas b) Operación con pérdidas
  • 3.
    3 Transport Layer 3-7 rdt3.0en acción c) Pérdida de ACK d) Timeout prematuro Transport Layer 3-8 Desempeño de rdt3.0 rdt3.0 funciona, pero su desempeño es malo Ejemplo: enlace de 1 Gbps, 15 ms de retardo ext. a ext, paquetes de 1KB: s sb paquetekb R L Ttransmitir μ8 /10 /8 9 === U transmisor: utilización del transmisor o canal = fracción de tiempo que el transmisor/canal está ocupado transmitiendo 1 paquete de 1KB cada ~30 ms -> 33kB/s throughput en enlace de 1 Gbps Protocolo de red limita el uso de los recursos físicos! bpsenóntransmisideTasa: bitsenpaquetedelLargo: R L 00027.0 008.30 008.0 / / == + = RLRTT RL Utransmisor Transport Layer 3-9 rdt3.0: Operación stop-and-wait first packet bit transmitted, t = 0 transmisor receptor RTT last packet bit transmitted, t = L / R Primer bit del paquete llega Ultimo bit del paquete llega, envía ACK ACK llega, envía siguiente paquete, t = RTT + L / R U sender = .008 30.008 = 0.00027 L / R RTT + L / R =
  • 4.
    4 Transport Layer 3-10 Protocoloscon Pipeline Con Pipeline: Transmisor permite múltiples paquetes en tránsito con acuse de recibo pendiente El rango de los números de secuencia debe ser aumentado Se requiere buffers en el Tx y/o Rx Hay dos formas genéricas de protocolos con pipeline: go-Back-N, selective repeat (repetición selectiva) Transport Layer 3-11 Pipelining: incrementa la utilización first packet bit transmitted, t = 0 transmisor receptor RTT last bit transmitted, t = L / R first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R last bit of 2nd packet arrives, send ACK last bit of 3rd packet arrives, send ACK U sender = .024 30.008 = 0.0008 3 * L / R RTT + L / R = Incrementa la utilización en un factor de 3! Transport Layer 3-12 Protocolos de Pipelining Go-back-N: Transmisor puede tener hasta N paquetes unacked en el pipeline Rcvr solo envía acks acumulativos No hace un ack del paquete si hay una interrupción Transmisor tiene un timer para los paquetes viejos unacked Si el timer expira, se retransmite todos los paquetes unacked Selective Repeat: Transmisor puede tener hasta N paquetes unacked en el pipeline Rcvr acks paquetes individuales Transmisor mantiene un timer para cada uno de los paquetes unacked Cuando el timer expira, retransmite unicamente el paquete unack
  • 5.
    5 Transport Layer 3-13 Go-Back-N Transmisor: #de secuencia de k-bits en el encabezado del paquete Si k bits son reservados para el numero de secuencia entonces el rango va desde 0 hasta (modulo counter) “ventana” de hasta N, paquetes consecutivos con acuse de recibo pendiente ACK(n): da acuse de recibo a todos los paquetes hasta el con # de secuencia n; corresponde a un “acuse de recibo acumulado” Podría recibir ACKs duplicados Usa un timer por cada paquete en tránsito timeout(n): retransmitir paquete n y todos los paquetes que han sido enviados después de este pero no se ha recibido ack Próximo número de secuencia a usar Núm. Sec. más antiguo sin ACK: Base Tamaño de ventana N Con ACK recibidos ACK pendientes No usable Usable, aún no enviados Transport Layer 3-14 GBN: Extendido FSM del transmisor Wait start_timer udt_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_timer nextseqnum++ } else refuse_data(data) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt) Λ Transport Layer 3-15 GBN: Extendido FSM del receptor Sólo ACK: siempre envía ACK de paquete correctamente recibido con el # de secuencia Puede generar ACKs duplicados Sólo necesita recordar expectedseqnum Paquetes fuera de orden: descartarlos (no almacenar en buffer) => no requiere buffer en receptor! Re-envía ACK del más reciente paquete en orden recibido 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=1 sndpkt = make_pkt(expectedseqnum,ACK,chksum) Λ
  • 6.
    6 Transport Layer 3-16 GBNen acción Transport Layer 3-17 Selective Repeat (repetición selectiva) Receptor envía acuse de recibo individuales de todos los paquetes recibidos Almacena paquetes en buffer, según necesidad para su entrega en orden a la capa superior Transmisor sólo re-envía los paquetes sin ACK recibido Transmisor usa un timer por cada paquete sin ACK Ventana del Transmisor N # de secuencia consecutivos Nuevamente limita los #s de secuencia de paquetes enviados sin ACK Transport Layer 3-18 Selective repeat: Ventanas de Tx y Rx Con ACK recibidos ACK pendientes No usable Usable, aún no enviados Esperado, aún no recibido Fuera de orden (almacenados) con ACK enviado Aceptable (en ventana) No usable a) Vista del transmisor de los número de secuencia b) Vista del receptor de los número de secuencia
  • 7.
    7 Transport Layer 3-19 Selectiverepeat (repetición selectiva) Llega datos desde arriba: Si el próximo # de sec. está en ventana, enviar paquete timeout(n): Re-enviar paquete n, re- iniciar timer ACK(n) : Marcar paquete n como recibido Si n es el paquete más antiguo sin ACK, avanzar la base de la ventana al próximo # de sec. sin ACK. Transmisor Llega paquete n , Enviar ACK(n) Si está fuera de orden: almacenar en buffer en-orden: entregar a capa superior (también entregar paquetes en orden del buffer), avanzar ventana al paquete próximo aún no recibido Fuera de la ventana: ignórelo Receptor Transport Layer 3-20 Repetición Selectiva en Acción Transport Layer 3-21 Dilema de la repetición Selectiva Ejemplo: #s de sec.: 0, 1, 2, 3 Tamaño de ventana=3 Rx no ve diferencia en los dos escenarios! Pasa incorrectamente datos como nuevos en (a) Q: ¿Qué relación debe existir entre el # de sec. y el tamaño de ventana?
  • 8.
    8 Transport Layer 3-22 Q:¿Qué relación debe existir entre el # de sec. y el tamaño de ventana? La clave para evitar este problema es impedir que se pueda producir el escenario de la figura adjunta. Los tamaños de las ventanas del receptor y el transmisor deben ser: Donde k es el número de bit usados para definir la secuencia Transport Layer 3-23 Capítulo 3: Continuación 3.1 Servicios de la capa transporte 3.2 Multiplexing y demultiplexing 3.3 Transporte sin conexión: UDP 3.4 Principios de transferencia confiable de datos 3.5 Transporte orientado a la conexión: TCP Estructura de un segmento Transferencia confiable de datos Control de flujo Gestión de la conexión 3.6 Principios del control de congestión 3.7 Control de congestión en TCP Transport Layer 3-24 TCP: Generalidades RFCs: 793, 1122, 1323, 2018, 2581 Datos full duplex: Flujo de datos bi- directional en la misma conexión MSS: maximum segment size orientado-a la conexión: handshaking (intercambio de mensajes de control) init’s sender, estado del receptor antes del intercambio de datos Flujo controlado: Transmisor no saturará al receptor point-to-point: Un transmisor, un receptor confiabilidad, byte steam en orden: pipelined: Congestión TCP y control de flujo fijan el tamaño de la ventana Buffers transmisor & receptor socket door TCP send buffer TCP receive buffer socket door segment application writes data application reads data
  • 9.
    9 Transport Layer 3-25 Estructuradel segmentoTCP source port # dest port # 32 bits application data (variable length) sequence number acknowledgement number Receive window Urg data pnterchecksum FSRPAU head len not used Options (variable length) URG: datos urgente (generalmente no usado) ACK: ACK # valid PSH: push data now eneralmente no usado) RST, SYN, FIN: connection estab (setup, teardown commands) # bytes rcvr willing to accept Cuenta por bytes de datos (no segmentos!) Internet checksum (como en UDP) Transport Layer 3-26 TCP número de secuencia y ACKs #’s secuencia: “numero” del flujo de bytes definido por el primer byte en el segmento de datos ACKs: # secuencia del siguiente byte esperado por el otro lado ACK acumulativo Q: Como el receptor maneja los segmentos fuera de orden A: Los RFC no los mencionan, se lo dejan al programador Host A Host B Seq=42, ACK=79, data = ‘C’ Seq=79, ACK=43, data = ‘C’ Seq=43, ACK=80 Usuario teclea ‘C’ host ACKs recepción del echoed ‘C’ host ACKs de recepción ‘C’, echoes back ‘C’ tiempo Escenario telnet simple Transport Layer 3-27 TCP Round Trip Time y el Timeout Q: Como se puede fijar el valor de TCP timeout ? Más largo que RTT pero RTT varia Muy corto: timeout prematuro Retransmisiones no necesarias Muy largo: reacción lerda a la pérdida de segmentos Q: Como se estima RTT? SampleRTT: tiempo medido desde la transmisión del segmento hasta la recepción del ACK Ignorar las retransmisiones SampleRTT variará, quiere un estimado de RTT más pulido Promediar algunas medidas recientes no solamente la actual SampleRTT
  • 10.
    10 Transport Layer 3-28 TCPRound Trip Time yTimeout EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT Movimiento exponencial Influencia de las muestras pasadas decrementa rápidamente el exponencial Valor típico: α = 0.125 Transport Layer 3-29 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(milliseconds) SampleRTT Estimated RTT Transport Layer 3-30 TCP Round Trip Time y Timeout Fijando el timeout EstimtedRTT más “margen de seguridad” Variaciones largas en el EstimatedRTT -> margen de seguridad más largo DevRTT es un estimado de cuanto el SampleRTT se desvía del EstimatedRTT: TimeoutInterval = EstimatedRTT + 4*DevRTT DevRTT = (1-β)*DevRTT + β*|SampleRTT-EstimatedRTT| (tipicamente, β = 0.25) Luego fijar el intervalo de timeout:
  • 11.
    11 Transport Layer 3-31 Capítulo3: Continuación 3.1 Servicios de la capa transporte 3.2 Multiplexing y demultiplexing 3.3 Transporte sin conexión: UDP 3.4 Principios de transferencia confiable de datos 3.5 Transporte orientado a la conexión: TCP Estructura de un segmento Transferencia confiable de datos Control de flujo Gestión de la conexión 3.6 Principios del control de congestión 3.7 Control de congestión en TCP