• No se han encontrado resultados

Capítulo 3 Capa de Transporte

N/A
N/A
Protected

Academic year: 2018

Share "Capítulo 3 Capa de Transporte"

Copied!
11
0
0

Texto completo

(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ícitamenteincluir # 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)

(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)

Λ Λ

Λ

rdt3.0 en acción

a) Operación sinpé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

s

b

paquete

kb

R

L

T

transmitir

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!

bps

en

ón

transmisi

de

Tasa

:

bits

en

paquete

del

Largo

:

R

L

00027

.

0

008

.

30

008

.

0

/

/

=

=

+

=

R

L

RTT

R

L

U

transmisor

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

(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 2ndpacket arrives, send ACK

last bit of 3rdpacket 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!

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

(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_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_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

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

(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)

(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

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 TCP

socket door

application writes 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 pnter checksum F S R P A U head

len usednot

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, d ata = ‘C’

Seq=79, A CK=43, d

ata = ‘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

ˆ SampleRTTvariará, quiere un estimado de RTT más pulido

Promediar algunas medidas

(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)

R

TT

(m

illi

se

conds

)

SampleRTT Estimated RTT

TCP Round Trip Time y Timeout

Fijando el timeout

ˆ EstimtedRTTmá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)

(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

Referencias

Documento similar

[r]

[r]

SECUNDARIA COMPRENDE LOS

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

En junio de 1980, el Departamento de Literatura Española de la Universi- dad de Sevilla, tras consultar con diversos estudiosos del poeta, decidió propo- ner al Claustro de la

[r]

SVP, EXECUTIVE CREATIVE DIRECTOR JACK MORTON