Вы находитесь на странице: 1из 68

Nivel de transporte: UDP y TCP

Arquitectura de Redes de Ordenadores y Arquitectura de Internet

Departamento de Sistemas Telemáticos y Computación (GSyC)

Marzo de 2014

GSyC - 2014 Nivel de transporte: UDP y TCP 1


2014
c Grupo de Sistemas y Comunicaciones.
Algunos derechos reservados.
Este trabajo se distribuye bajo la licencia
Creative Commons Attribution Share-Alike
disponible en http://creativecommons.org/licenses/by-sa/2.1/es

GSyC - 2014 Nivel de transporte: UDP y TCP 2


Contenidos

1 Nivel de transporte

2 UDP

3 TCP: Fundamentos

4 TCP: Opciones

5 TCP: Plazos de retransmisión

6 Referencias

GSyC - 2014 Nivel de transporte: UDP y TCP 3


Nivel de transporte

Contenidos

1 Nivel de transporte

2 UDP

3 TCP: Fundamentos

4 TCP: Opciones

5 TCP: Plazos de retransmisión

6 Referencias

GSyC - 2014 Nivel de transporte: UDP y TCP 4


Nivel de transporte

Introducción

El Nivel de Red ofrece servicio best-effort:


Se pueden perder mensajes
Se pueden desordenar mensajes
Se pueden duplicar mensajes
El Nivel de Transporte se encarga de gobernar el acceso
múltiple a la red de los diversos procesos de la misma
máquina que quieran usarla: En TCP/IP se hace a través de
los puertos.
Hay dos protocolos principales que ofrecen un servicio de nivel
de transporte:
UDP: no orientado a conexión y no fiable.
TCP: orientado a conexión y fiable.

GSyC - 2014 Nivel de transporte: UDP y TCP 5


Nivel de transporte

Multiplexación, demultiplexación
El Nivel de Transporte TCP/IP:
multiplexa las unidades de datos que envı́an las aplicaciones a través de
los puertos, encapsulándolas en unidades de datos de UDP o TCP
demultiplexa las unidades de datos de UDP y TCP, pasando los datos a
las aplicaciones.

Multiplexación Demultiplexación
p1 p2 p3 p4 p1 p2 p3 p4

5000 6000 6000 7000 5000 6000 6000 7000

in out in out in out in out in out in out in out in out

UDP TCP UDP TCP

IP IP

Envı́o de datos en el nivel de Recepción de datos en el nivel de


transporte transporte
GSyC - 2014 Nivel de transporte: UDP y TCP 6
UDP

Contenidos

1 Nivel de transporte

2 UDP

3 TCP: Fundamentos

4 TCP: Opciones

5 TCP: Plazos de retransmisión

6 Referencias

GSyC - 2014 Nivel de transporte: UDP y TCP 7


UDP

UDP

Servicio de entrega de datagramas no fiable


y no ordenado Formato del datagrama UDP
Proporciona multiplexación 0 16 31

No proporciona control de flujo SrcPort DstPort

Length Checksum
Los extremos se identifican mediante puertos
Data

Checksum opcional de todo el datagrama


UDP. Si se utiliza y no se pasa la
comprobación, se descarta el datagrama.

© GSyC 2009

GSyC - 2014 Nivel de transporte: UDP y TCP 8


UDP

UDP

Los datagramas UDP se encapsulan dentro de la parte de


datos de un datagrama IP.
Una aplicación que utilice UDP para transmitir datos,
producirá exactamente un datagrama UDP cada vez que la
aplicación quiera enviar datos. Dicho datagrama UDP se
encapsulará en un datagrama IP. Si ese datagrama IP va a
exceder el tamaño máximo de la unidad de datos del nivel de
enlace (ej: Trama Ethernet), se fragmentará.
Es un protocolo mucho más ligero que TCP y para
aplicaciones de red que se ejecuten dentro de una subred (no
hay encaminadores, luego las pérdidas son poco probables),
puede compensar.

GSyC - 2014 Nivel de transporte: UDP y TCP 9


UDP

UDP: interfaz de programación


Proceso X Proceso Y
1 Bind(8000)

Send(B, 8000, m1) 2


4 Buffer_B := Receive(8000)

5 Bind(6000)
m1 Send(A, 6000, m2) 6
Lectura de
7 Buffer_A := Receive(6000) bytes
m2
Lectura de
bytes
Escritura de
m1 Escritura de
6000 bytes
8000 m2 bytes

in out in out

UDP UDP

IP IP

Ethernet m1 3 Ethernet
Máquina A 8 m2
Máquina B

32
GSyC - 2014 Nivel de transporte: UDP y TCP 10
TCP: Fundamentos

Contenidos

1 Nivel de transporte

2 UDP

3 TCP: Fundamentos

4 TCP: Opciones

5 TCP: Plazos de retransmisión

6 Referencias

GSyC - 2014 Nivel de transporte: UDP y TCP 11


TCP: Fundamentos

Caracterı́sticas del protocolo TCP


Orientado a conexión: Fases de establecimiento de conexión, intercambio de
datos y cierre de la conexión.
Envı́o de datos de forma fiable: el proceso receptor recibe los datos sin
pérdidas, duplicados ni desorden
Envı́o de datos como flujo de bytes:
El proceso emisor escribe un flujo de bytes.
TCP envı́a segmentos del tamaño que considera adecuado.
El proceso receptor lee un flujo de bytes.

El proceso emisor p El proceso receptor q realiza


realiza X operaciones de p q Z operaciones de lectura
escritura
puerto 6000 puerto 8000

in out in out

TCP TCP
in: buffer de envío in: buffer de envío
out: buffer de recepción Se transmiten Y segmentos TCP out: buffer de recepción

Las conexiones son full duplex: ambos lados pueden enviar datos
simultáneamente.
GSyC - 2014 Nivel de transporte: UDP y TCP 12
TCP: Fundamentos

Servicio Orientado a Conexión

La transmisión de datos en una conexión TCP presenta las


fases:
establecimiento de la conexión
intercambio de datos
finalización de la conexión.
Una vez establecida la conexión, funciona en ambos sentidos:
ambos extremos pueden transmitir y recibir datos
simultáneamente.

GSyC - 2014 Nivel de transporte: UDP y TCP 13


TCP: Fundamentos

Servicio Fiable
Éste es el primer nivel (de abajo a arriba) en TCP/IP en el que se
proporciona fiabilidad.
Objeto: Recuperarse de las posibles pérdidas y desorden producido
por IP.

Idea básica:
Los segmentos con datos llevan un número
de secuencia.
Nº sec=1001
El receptor de los datos debe mandar
Nº ACK=1101
asentimientos (ACKs). 100 bytes

Para cada segmento con datos transmitido


se espera un plazo de tiempo a que llegue Nº sec=2001

su ACK. Si vence el plazo y no se ha Nº ACK=2201 200 bytes

recibido su ACK se retransmite el segmento.


Para asentimientos y retransmisiones se
utiliza un protocolo de ventana.
El receptor reordena segmentos y descarta
duplicados.
Como ambos extremos pueden transmitir datos, cada lado usa sus
propios números de secuencia.
GSyC - 2014 Nivel de transporte: UDP y TCP 14
TCP: Fundamentos Formato de segmento

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 15
TCP: Fundamentos Formato de segmento

TCP: formato de segmento


G' H' IG' IJ' KI'

!"#$%&'&$()#*' !"#$%&'+#,-*&'

*./#$&'+#',#0"#*0(1'
913#0#$1'>9;'

*./#$&'+#'1,#*-/(#*%&'

567'
89:'
;<='
<?@'
6<>'
2&*)(%"+'

AB@'
013#0#$1' $#,#$41+&' 4#*%1*1'1*"*0(1+1'

0C#0D,"/',#)/#*%&' !"*%#$&'1'+1%&,'"$)#*%#,'
&!0(&*#,'
'!"##$%&'()*&%#+,-./0''
E1%&,'>9;'

E8>F<'>9;'

GSyC - 2014 Nivel de transporte: UDP y TCP 16


TCP: Fundamentos Formato de segmento

TCP: formato de segmento

Puertos: TCP los asocia con la aplicación origen y destino del


segmento (como UDP).
Cada conexión se identifica con una 4-tupla:
(SrcPort, SrcIPAddr, DstPort, DstIPAddr)
Longitud cabecera: Tamaño de la cabecera en palabras de
32 bits. La cabecera sin opciones tiene longitud 5 (20 bytes).
Checksum: Obligatorio, sobre todo el segmento TCP. Si no
se pasa la comprobación, se descarta el segmento.

GSyC - 2014 Nivel de transporte: UDP y TCP 17


TCP: Fundamentos Formato de segmento

Flags
SYN: Establecimiento de conexión
FIN: Finalización de conexión
ACK: Hay información en el campo número de ACK
RST: Situación de error.
Ejemplo: Una aplicación cliente quiere establecer una conexión con una
aplicación que escucha en el puerto 6000 de otra máquina, y en esa máquina
no hay ninguna aplicación esperando conexiones en ese puerto 6000.
PSH: El receptor debe ”entregar los datos a la aplicación”.
No sólo se entrega ese segmento, sino también todos los datos anteriores
asentidos que el receptor tuviera pendientes de entregar a la aplicación.
URG: Pueden enviarse datos denominados urgentes que el receptor debe
pasar inmediatamente a la aplicación, lo antes posible, incluso fuera de orden.
Ejemplo: Envı́o de un CTRL-C.
Se indican mediante el empleo del flag URG: Cuando está activado, el campo
puntero a datos urgentes apunta al último byte de datos urgentes del segmento.
No está especificado dónde empiezan los datos urgentes. Se deja a la aplicación.

GSyC - 2014 Nivel de transporte: UDP y TCP 18


TCP: Fundamentos Formato de segmento

Número de secuencia

Cada segmento con datos lleva un número de secuencia,


SequenceNum, de 32 bits.
El número de secuencia numera bytes, y NO segmentos:
identifica el número de orden del primer byte de datos que
lleva el segmento.
Al establecerse una conexión se elige aleatoriamente un
número de secuencia inicial para que no se confundan
segmentos aún en tránsito procedentes de conexiones
diferentes.
A 100 Mbps los números de secuencia darı́an la vuelta en 6
minutos.

GSyC - 2014 Nivel de transporte: UDP y TCP 19


TCP: Fundamentos Formato de segmento

Número de asentimiento

El receptor de segmentos de datos tiene que asentir los que le


llegan correctamente, activando el flag ACK y rellenando el
campo AcknowledgmentNum.
NO es necesario enviar un asentimiento por cada segmento
con datos que se recibe. Se puede esperar a asentir varios
segmentos de una sola vez.
El número de asentimiento indica el número de secuencia del
próximo byte que se espera recibir, asintiéndose de esta
manera hasta el byte anterior incluido.
En TCP básico no hay “rechazo selectivo”: No hay forma en
que el receptor le diga al emisor que tiene los bytes del 300 al
700 excepto el trozo 400-500.
Una opción de TCP permite usar acks selectivos (SACKs) en
una conexión si emisor y receptor soportan dicha opción.
Aquı́ no estudiaremos esta opción.

GSyC - 2014 Nivel de transporte: UDP y TCP 20


TCP: Fundamentos Formato de segmento

Número de asentimiento

Siempre que hay datos que enviar, se


aprovecha para mandar en ese mismo
Nº sec=1001
Nº ACK=1101
Nº sec=1001 Nº sec =2001
FLAGS =ACK Nº ACK=1101
100 bytes
segmento la información del número de 100 bytes FLAGS =ACK

200 bytes
asentimiento. Es decir se envı́an los datos y
el asentimiento de los datos recibidos
(piggybacking).
Si el lado que ha recibido datos no tiene
Nº sec=1001
nada que enviar, construirá un segmento Nº ACK=1101
FLAGS =ACK
100 bytes
(sólo con la cabecera de TCP) donde
enviará el número de asentimiento que le
corresponda.
Importante: Cada lado de la conexión utiliza sus números de
secuencia (partiendo de su número de secuencia inicial) y
asiente los números de secuencia que está usando el otro
extremo.
GSyC - 2014 Nivel de transporte: UDP y TCP 21
TCP: Fundamentos Formato de segmento

Ventana anunciada (o ventana de flujo)


Se usa un protocolo de ventana para coordinar el envı́o de segmentos
de datos, este mecanismo se denomina control del flujo.
El receptor indica en el campo AdvertisedWindow (ventana
anunciada o ventana de flujo) el número de bytes (a partir del
indicado en el número de asentimiento) que está dispuesto a recibir
del emisor. Esta cantidad de bytes está directamente relacionada con
el tamaño del buffer de recepción que tiene reservado la
implementación de TCP.
El emisor puede transmitir esos bytes aunque no reciba asentimientos,
pero una vez transmitidos tendrá que parar hasta recibir nuevos
asentimientos del receptor.
Cuando el lado receptor envı́e nuevos valores para número de ACK y
ventana anunciada, el lado emisor podrá continuar con la transmisión
de datos nuevos.

Como ambos extremos pueden enviar datos, hay dos ventanas de flujo
diferentes, una para cada sentido de la comunicación.

GSyC - 2014 Nivel de transporte: UDP y TCP 22


TCP: Fundamentos Establecimiento y cierre de la conexión

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 23
TCP: Fundamentos Establecimiento y cierre de la conexión

Establecimiento y cierre de la conexión

stablecimiento
Establecimiento de
de laconexión
conexión Cierre de la conexión
Cierre de conexión
Cliente Servidor
Cliente Servidor FIN,
SYN, Sequ
ence
S equ Num
ence = p
Num
= x

m = y,
ceNu dgment =
p + 1
S e quen nt =x+1 ACK, Ackn
owle
ACK, dgme
SYN+ cknowle enceNu m = q
A FIN, Sequ
ACK,
Ackno
wledg ACK, Acknow
ment ledgme nt = q + 1
= y +1

© GSyC 2009 13

GSyC - 2014 Nivel de transporte: UDP y TCP 24


TCP: Fundamentos Ejemplo

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 25
TCP: Fundamentos Ejemplo

Ejemplo
p1 p2
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

GSyC - 2014 Nivel de transporte: UDP y TCP 26


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

Datos enviados y no asentidos


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 27


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos

…# 100 bytes

Datos enviados y no asentidos


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 28


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 29


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…#
…#

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 30


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…#

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 31


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 32


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in  
cab
FLAGS =ACK

out   …  
Nº sec=1001
…   cab datos

…   Nº sec=1101
100 bytes
out   cab datos
Nº ACK=1101 in  
FLAGS =ACK
…  
cab
100 bytes AdvertisedWindow =100

out  
…   in  

…   in  
in  

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 33


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 34


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos
100 bytes

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 35


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes

Nº sec=1301 cab datos


…# 100 bytes

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 36


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes


Nº ACK=1301
FLAGS =ACK in#
Nº sec=1301 cab datos
cab
AdvertisedWindow =100
…# 100 bytes

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 37


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes


Nº ACK=1301
FLAGS =ACK in#
Nº sec=1301 cab datos
cab
AdvertisedWindow =100
…#
…# 100 bytes
in#

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 38


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes


Nº ACK=1301
FLAGS =ACK in#
Nº sec=1301 cab datos
cab
AdvertisedWindow =100
…# 100 bytes
in#
cab
Nº ACK=1401 in#
FLAGS =ACK
AdvertisedWindow =100

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 39


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes


Nº ACK=1301
FLAGS =ACK in#
Nº sec=1301 cab datos
cab
AdvertisedWindow =100
…#
…# 100 bytes
in#
out#
cab
Nº ACK=1401 in#
…# FLAGS =ACK
AdvertisedWindow =100

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 40


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes


Nº ACK=1301
FLAGS =ACK in#
Nº sec=1301 cab datos
cab
AdvertisedWindow =100
…#
…# 100 bytes
in#
out#
cab
Nº ACK=1401 in#
…# FLAGS =ACK
AdvertisedWindow =100
…#
out#
…#

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 41


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes


Nº ACK=1301
FLAGS =ACK in#
Nº sec=1301 cab datos
cab
AdvertisedWindow =100
…#
…# 100 bytes
in#
out#
cab
Nº ACK=1401 in#
…# FLAGS =ACK
AdvertisedWindow =100
…#
out#
…#

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 42


TCP: Fundamentos Ejemplo

Ejemplo
Send p1 p2 Receive
Nº sec=1000 cab
FLAGS =SYN
Nº sec=9000
cab Nº ACK=1001
FLAGS =SYN+ACK
AdvertisedWindow =200
Nº ACK=9001 in#
cab
FLAGS =ACK

out# …#
Nº sec=1001
…# cab datos

…# Nº sec=1101
100 bytes
out# cab datos
Nº ACK=1101 in#
FLAGS =ACK
…#
cab
100 bytes AdvertisedWindow =100

out#
…# in#

…# in#
in#
out#
…# cab
Nº ACK=1201
FLAGS =ACK
AdvertisedWindow =200
…# Nº sec=1201
cab datos

out# …# 100 bytes


Nº ACK=1301
FLAGS =ACK in#
Nº sec=1301 cab datos
cab
AdvertisedWindow =100
…#
…# 100 bytes
in#
out#
cab
Nº ACK=1401 in#
…# FLAGS =ACK
AdvertisedWindow =100
…#
out#
Nº sec=1401
…# FLAGS =FIN
cab

Nº sec=9001
cab Nº ACK=1402
FLAGS =FIN+ACK

Nº ACK=9002
cab
FLAGS =ACK

Datos enviados y no asentidos Datos recibidos en orden


Datos no enviados
Vacío

GSyC - 2014 Nivel de transporte: UDP y TCP 43


TCP: Fundamentos Efecto de la Ventana Anunciada en el Emisor

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 44
TCP: Fundamentos Efecto de la Ventana Anunciada en el Emisor

Efecto de la Ventana Anunciada en el Emisor (I)

!"#$%&%$'()
*+%,$-$*(./).&0/+)
(5"132316*.
!"#$%&#'$/)341#-.
785"'8'*#2316*.,'.9:;.

!"#$%&#'$()'*+,-. !"#$%&#'$/*012,-.

120*+)*(3$&./+)2)(/)&+*(4./+) 120*+)"*(.$*(0*+).*)*(35/)

TCP va almacenando los datos que escribe la aplicación y los va enviando.


Según llegan asentimientos, avanza el Últ_Byte_Asentido
Bytes entre Últ_Byte_Asentido + 1 y Últ_Byte_Enviado: enviados y aún no
asentidos.
Bytes entre Últ_Byte_Enviado + 1 y Últ_Byte_Escrito: recibidos de la
aplicación y aún no enviados.
Últ_Byte_Asentido ≤ Últ_Byte_Enviado
Últ_Byte_Enviado ≤ Últ_Byte_Escrito

GSyC - 2014 Nivel de transporte: UDP y TCP 45


TCP: Fundamentos Efecto de la Ventana Anunciada en el Emisor

Efecto de la Ventana Anunciada en el Emisor (II)

546172718(&
$07%191$('+&'2-+0&
(5"132316*.
!"#$%&#'$/)341#-.
785"'8'*#2316*.,'.9:;.

!"#$%&'$&$()*+&,+"-.&
!"#$%&#'$()'*+,-. !"#$%&#'$/*012,-.

!/-$0&$()12'+0&/&(+&20$(3'+0& !/-$0&4$('1$(-$0&'$&$()*+&

Los bytes entre Últ_Byte_Asentido + 1 y Últ_Byte_Escrito se almacenan en


el Buffer de envı́o (out):
Tama~no_Buffer_Envı́o ≥ Últ_Byte_Escrito − Últ_Byte_Asentido
La aplicación queda bloqueada cuando quiere escribir B bytes, siendo B más
bytes que el hueco disponible en el Buffer de envı́o:
B > Tama~ no_Buffer_Envı́o - (Últ_Byte_Escrito - Últ_Byte_Asentido)
Cuando lleguen más asentimientos, habrá más hueco en el Buffer de envı́o y la
aplicación se desbloqueará.

GSyC - 2014 Nivel de transporte: UDP y TCP 46


TCP: Fundamentos Efecto de la Ventana Anunciada en el Emisor

Efecto de la Ventana Anunciada en el Emisor (III)

4+5)(%()6#&
"0(-)7)"#*,&*%$,0&
(5"132316*.
!"#$%&#'$/)341#-.
785"'8'*#2316*.,'.9:;.

.'8"-&*"&"#13,&9,'$:&
!"#$%&#'$()'*+,-. !"#$%&#'$/*012,-.
!"#$%#%&%#'#()%*%&+,-&-"("+$,-&
./$"0&"#1)%*,0&/&#,&%0"#2*,0& ./$"0&+"#*)"#$"0&*"&"#13,&

La Ventana anunciada por el receptor establece los máximos bytes que pueden
estar enviados y no asentidos:
Últ_Byte_Enviado - Últ_Byte_Asentido ≤ Tama~ no_Ventana_Anunciada
Cuando avanza el Últ_Byte_Asentido, la Ventana anunciada se va deslizando
hacia la derecha. Por esta razón la ventana de TCP se llama también “ventana
deslizante”.
El extremo derecho de la ventana no puede ir hacia atrás. Sı́ puede quedarse
parado mientras avanza el extremo izquierdo, estrechándose la ventana (incluso
hasta llegar a ventana cero).

GSyC - 2014 Nivel de transporte: UDP y TCP 47


TCP: Fundamentos Efecto de la Ventana Anunciada en el Emisor

Efecto de la Ventana Anunciada en el Emisor (IV)

5+6)(%()7#&
"3(-)8)"#*,&*%$,3&
(5"132316*.
!"#$%&#'$/)341#-.
785"'8'*#2316*.,'.9:;.

1'9"-&*"&"#04,&:,'$;&
!"#$%&#'$()'*+,-. !"#$%&#'$/*012,-.
!"#$%#%&%#'#()%*%&+,-&-"("+$,-&
12$"3&"#0)%*,3&2&#,&%3"#/*,3& 12$"3&+"#*)"#$"3&*"&"#04,& !"#$%#%&"."(/0%&

Ventana efectiva: Parte de la Ventana anunciada que aún está disponible para
que el emisor envı́e nuevos bytes:
no_Ventana_Efectiva = Tama~
Tama~ no_Ventana_Anunciada −
− (Últ_Byte_Enviado − Últ_Byte_Asentido)
Último byte que puede enviarse =
= Últ_Byte_Asentido + Tama~
no_Ventana_Anunciada =
= Últ_Byte_Enviado + Tama~
no_Ventana_Efectiva

GSyC - 2014 Nivel de transporte: UDP y TCP 48


TCP: Fundamentos Efecto de la Ventana Anunciada en el Receptor

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 49
TCP: Fundamentos Efecto de la Ventana Anunciada en el Receptor

Ventana Anunciada en el Receptor (I)

!"#$%&%$'()
#*+*(,-),&.-/)
8*143,349:/
01#%&'#$%6$7-./
;<*1$<$:#,349:/-$/=>?/

!"#$%&'#$%()*$+,-./ 01#%&'#$%2$3454-./

0+.*/)1*%$2$,-/)*()-1,*() 0+.*/)1*%$2$,-/)34*1&),*)-1,*()

TCP va recibiendo datos del emisor, y la aplicación va leyendo los bytes


recibidos en orden.
Según va leyendo la aplicación avanza el Últ_Byte_Leı́do.
El receptor envı́a como número de ACK el valor de Sgte_Byte_Esperado.
Bytes entre Últ_Byte_Leı́do y Sgte_Byte_Esperado - 1: bytes recibidos en
orden y aún no leı́dos por la aplicación.
Bytes sueltos entre Sgte_Byte_Esperado y Últ_Byte_Recibido: bytes recibidos
fuera de orden.
Últ_Byte_Leı́do ≤ Sgte_Byte_Esperado
Sgte_Byte_Esperado ≤ Últ_Byte_Recibido + 1

GSyC - 2014 Nivel de transporte: UDP y TCP 50


TCP: Fundamentos Efecto de la Ventana Anunciada en el Receptor

Ventana Anunciada en el Receptor (II)

6)7*(5(*+,&
7$/$,'3&'5031&
8*143,349:/
01#%&'#$%6$7-./
;<*1$<$:#,349:/-$/=>?/

!"#$%&'$&%$($)(*+,&-*,.&
!"#$%&'#$%()*$+,-./ 01#%&'#$%2$3454-./

!/0$1&%$(*2*'31&$,&3%'$,& !/0$1&%$(*2*'31&4"$%5&'$&3%'$,&

Los bytes entre Últ_Byte_Leı́do y Últ_Byte_Recibido se almacenan en el


Buffer de recepción (in):
Tama~no_Buffer_Recepción ≥ Últ_Byte_Recibido − Últ_Byte_Leido
La aplicación queda bloqueada cuando quiere leer B bytes, siendo B más bytes
que los bytes en orden que ya han llegado:
B > Sgte_Byte_Esperado - Últ_Byte_Leı́do
Cuando lleguen suficientes bytes consecutivos la aplicación se desbloqueará.

GSyC - 2014 Nivel de transporte: UDP y TCP 51


TCP: Fundamentos Efecto de la Ventana Anunciada en el Receptor

Ventana Anunciada en el Receptor (III)

234)(%()5#&
4","#*0&*%$0-&
8*143,349:/
01#%&'#$%6$7-./
;<*1$<$:#,349:/-$/=>?/

+'6".&*"&."("3()5#&7)#8&
!"#$%&'#$%()*$+,-./ 01#%&'#$%2$3454-./
!"#$%#%&%#'#()%*%&
+,$"-&."()/)*0-&"#&0.*"#& +,$"-&."()/)*0-&1'".%&*"&0.*"#&

La Ventana anunciada del receptor establece los bytes aún caben Buffer de
recepción a partir del Sgte_Byte_Esperado:
Tama~no_Ventana_Anunciada = Tama~ no_Buffer_Recepción −
− ((Sgte_Byte_Esperado-1) - Últ_Byte_Leı́do)
Cuando avanza el Últ_Byte_Leı́do, el tamaño de la Ventana anunciada
aumenta.
Cuando avanza el Sgte_Byte_Esperado, si la aplicación no lee más bytes
avanzará el extremo izquierdo de la Ventana anunciada, estrechándose la
ventana (incluso hasta llegar a ventana cero).

GSyC - 2014 Nivel de transporte: UDP y TCP 52


TCP: Fundamentos Sondas de ventana

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 53
TCP: Fundamentos Sondas de ventana

Sondas de ventana
Si la aplicación en el lado receptor no lee los datos que se están
recibiendo, la implementación de TCP en el lado del receptor irá llenando
su buffer de recepción e irá anunciando un valor de ventana (ventana de
flujo) cada vez menor, incluso llegando a valer cero.
Si el emisor recibe del receptor AdvertisedWindow = 0, el emisor no
puede seguir enviando datos nuevos. El receptor ”ha cerrado la ventana”.
En esta situación, el emisor va a enviar periódicamente un segmento con
un número secuencia igual al último que tiene asentido y longitud 0
bytes para provocar el envı́o de asentimientos desde el receptor. Estos
segmentos se denominan sondas de ventana.
Cuando la aplicación en el lado receptor lea los datos que se están
recibiendo el buffer irá vaciándose y la implementación de TCP en el lado
receptor podrá guardar nuevos datos en dicho buffer y se lo comunicará al
emisor rellenando el valor correspondiente en el campo
AdvertisedWindow de los asentimientos que esté enviando como
respuesta a las sondas de ventana.

GSyC - 2014 Nivel de transporte: UDP y TCP 54


TCP: Fundamentos Interfaz de programación

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 55
TCP: Fundamentos Interfaz de programación

TCP: interfaz de programación


Cliente Servidor
1 c := Accept(8000)

2 c:=Connect(B,8000) SYN bloqueado


bloqueado
SYN + ACK
ACK
3 Send(c, m1) m1
m1 in
out m1
ACK

4 Buffer_B := Receive(c)

6 Send(c, m2)
5 Buffer_A := Receive(c) m2
m2
out
bloqueado m2
in ACK
7 Close (c) FIN
bloqueado
ACK
FIN 8 Close (c)
ACK bloqueado
bloqueado

Máquina B

Máquina A 33
© GSyC 2009
GSyC - 2014 Nivel de transporte: UDP y TCP 56
TCP: Opciones

Contenidos

1 Nivel de transporte

2 UDP

3 TCP: Fundamentos

4 TCP: Opciones

5 TCP: Plazos de retransmisión

6 Referencias

GSyC - 2014 Nivel de transporte: UDP y TCP 57


TCP: Opciones

Extensiones de TCP

Se implementan como opciones de la cabecera, que van en el


segmento detrás de los campos fijos de la cabecera.
No todas las implementaciones de TCP entienden todas las
posibles opciones
Opciones más habituales:
Marcas de tiempo (timestamps):
Almacenar hora de envı́o (timestamp) en los segmentos
enviados: el receptor lo copia a la vuelta. Permite granularidad
fina en la medición del RTT (timer de 500ms en muchas
implementaciones)
Extensión del espacio de números de secuencia
Para que tarde más en dar la vuelta se utiliza el timestamp +
número de secuencia como identificador de segmento
Escalado de la ventana anunciada (Window Scale).
Tamaño máximo de segmento (MSS: Maximum Segment
Size).

GSyC - 2014 Nivel de transporte: UDP y TCP 58


TCP: Opciones Window Scale

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 59
TCP: Opciones Window Scale

Extensiones de TCP
Window Scale

La ventana anunciada, para aprovechar al máximo la


capacidad del canal, deberı́a ser >= RTT x Bandwidth.
A 100 Mbps con 100ms de RTT la ventana deberı́a ser >= 1.25
MBytes
Con 16 bits en el campo AdvertisedWindow la ventana
máxima serı́a de 64 KBytes:
en medios rápidos, el emisor no podrı́a transmitir todo lo
rápido que le permitirı́a el medio por culpa de la ventana.
La opción Window Scale aumenta el tamaño de la ventana:
En el segmento SYN se incluye esta opción, junto con un factor
Si el receptor está dispuesto a usar esta opción, en su segmento
SYN+ACK incluirá también esta opción junto con un factor.
A partir de entonces:
Ventana Anunciada Real = 2factor × AdvertisedWindow
Si factor es 1, la ventana anunciada real es el doble del valor
que viaja en el campo AdvertisedWindow de la cabecera TCP
GSyC - 2014 Nivel de transporte: UDP y TCP 60
TCP: Opciones MSS

Contenidos
1 Nivel de transporte
2 UDP
3 TCP: Fundamentos
Formato de segmento
Establecimiento y cierre de la conexión
Ejemplo
Efecto de la Ventana Anunciada en el Emisor
Efecto de la Ventana Anunciada en el Receptor
Sondas de ventana
Interfaz de programación
4 TCP: Opciones
Window Scale
MSS
5 TCP: Plazos de retransmisión
6 Referencias
GSyC - 2014 Nivel de transporte: UDP y TCP 61
TCP: Opciones MSS

Extensiones de TCP
MSS

Se intenta encontrar para la conexión el mayor tamaño de segmento


posible que no requiera fragmentación.
MSS (Maximum Segment Size): en una máquina, máximo tamaño de
la parte de datos del segmento TCP que no causa fragmentación,
suponiendo que la cabecera IP y la cabecera TCP no tengan
opciones.
Ej: en Ethernet, el máximo tamaño de un datagrama IP es 1500 bytes:
MSS = 1500 - 20 (cabecera IP sin opciones) - 20 (cabecera TCP sin opciones) = 1460 bytes

Cada lado de una conexión, por su parte, hace segmentos de tamaño


menor o igual a su MSS.
Si se usa la opción de TCP, en el segmento SYN cada lado incluye su
MSS para indicar al otro lado que haga segmentos de tamaño menor
o igual a ese valor.
Si ambos lados de la conexión usan esta opción, la consecuencia es
que ambos lados usarán segmentos con la parte de datos de tamaño
igual al menor de los dos MSS.
GSyC - 2014 Nivel de transporte: UDP y TCP 62
TCP: Plazos de retransmisión

Contenidos

1 Nivel de transporte

2 UDP

3 TCP: Fundamentos

4 TCP: Opciones

5 TCP: Plazos de retransmisión

6 Referencias

GSyC - 2014 Nivel de transporte: UDP y TCP 63


TCP: Plazos de retransmisión

Plazos de retransmisión
Cuando se envı́a un segmento se arranca un temporizador para esperar su
asentimiento. Transcurrido el plazo marcado en el temporizador (timeout), si no se ha
recibido el ACK de ese segmento, se retransmite. Problema: ¿qué plazo ponemos?
Si el plazo es muy grande, puede tardarse mucho tiempo en retransmitir un segmento
que se ha perdido.
Si el plazo es muy pequeño, puede que no de tiempo a que se reciba el ACK e
innecesariamente se retransmita un segmento.

Temporizador muy Temporizador muy


grande pequeño

Nº sec=1001 Nº sec=1001

100 bytes 100 bytes


Nº ACK=1101
Nº sec=1001

100 bytes

Nº sec=1001

100 bytes

GSyC - 2014 Nivel de transporte: UDP y TCP 64


TCP: Plazos de retransmisión

Retransmisión adaptativa

Para cada segmento se calcula el tiempo de ronda


(Round-Trip-Time, RTT): tiempo entre que se envı́a el
segmento y se recibe el asentimiento. Se va tomando su media
en el tiempo.
Estas medidas de RTT se calculan para cada pareja
(segmento / ACK)
El Timeout se calcula en función de cada medida de RTT y la
varianza de dichas medidas. Suele ser aproximadamente igual
al doble del RTT.

GSyC - 2014 Nivel de transporte: UDP y TCP 65


Retransmisión adaptativa
TCP: Plazos de retransmisión

Retransmisión adaptativa: algoritmo de Karn/Partridge


Algoritmo de Karn/Partridge
Sender Receiver Sender Receiver
Orig Orig
inal inal
trans trans
miss miss
ion ion
SampleR TT

SampleR TT
Retr
ansm
issio ACK
n Retr
ansm
issio
n
ACK

! No se toman muestras del RTT cuando se retransmite, pues no


sabemos si el ACK ha venido muy rápido (izda) o muy lento (drcha)
No se toman medidas del RTT cuando se retransmite, pues no
! Exponential
sabemos siBackoff:
el ACK ha sevenido
dobla el timeout
muy rápidocuando
(dcha) se retransmite.
o muy Se
lento (izqda).
supone que sólo
Exponential se pierden
Backoff: paquetes
se dobla por congestión
el timeout cuando se => doblando Se
retransmite.
timeout
suponecontribuimos a que decrezca
que sólo se pierden paquetes por congestión → doblando
29
timeout contribuimos a que decrezca.
© GSyC 2009
Es el algoritmo usado por defecto en la mayorı́a de implementaciones
(p.ej., en Linux).

GSyC - 2014 Nivel de transporte: UDP y TCP 66


Referencias

Contenidos

1 Nivel de transporte

2 UDP

3 TCP: Fundamentos

4 TCP: Opciones

5 TCP: Plazos de retransmisión

6 Referencias

GSyC - 2014 Nivel de transporte: UDP y TCP 67


Referencias

Referencias

L. Peterson, Computer Networks: A Systems Approach


(3rd ed): apartado 5.2
A. Tanembaum, Computer Networks (4th ed): apartado 6.5

GSyC - 2014 Nivel de transporte: UDP y TCP 68

Вам также может понравиться