Más datos!

Anuncio
Capa de transporte en
Internet
Protocolos TCP y UDP
Tipos de servicios ofrecidos
TCP (Transmission Control Protocol)


Orientado a conexión
Confiable
UDP (User Datagram Protocol)


No orientado a conexión
No confiable
2
TCP: Transmission Control
Protocol
Objetivo: Flujo confiable de bytes sobre una
red no confiable



Debe funcionar sobre IP (que no da garantías)
Diferentes tecnologías de red en el medio
Robusto frente a problemas de la red
Recibe flujo de la capa superior y lo divide en
bloques que envía en segmentos
independientes (uno en cada paquete IP)
El receptor lo re-ensambla
3
Modelo de servicio de TCP
Conexión entre 2 “sockets”

Servicio full-duplex y punto a punto
Identificación de los sockets formada por:


dirección de capa de red (dirección IP)
puerto (equivalente a TSAP)
Las conexiones se identifican con las
direcciones de los sockets de ambos
extremos:
 IP origen
 puerto de origen
 IP destino
 puerto destino
4
Mensajes y bytes
TCP no mantiene las fronteras entre los
bloques recibidos de la capa de aplicación, ni
los recibidos de la red
Ejemplo: Un mensaje (ABCD) es enviado en 4
paquetes de capa 3 separados, pero devuelto
a la aplicación destino como un conjunto de
bytes ABCD
5
Protocolo TCP
Unidad de datos (TPDU) = Segmento
Número de secuencia de 32 bits
Se numeran los bytes, no los segmentos
Encabezado de 20 bytes (+ opciones)
Tamaño máximo del segmento


carga del paquete IP: máximo 64 Kbytes
MTU (maximun transfer unit) de la red, típico
1500 bytes. TCP trata de evitar fragmentación
en capas inferiores
Usa protocolo de ventanas deslizantes de
tamaño de ventana variable
6
Formato del segmento TCP
Puerto de origen
Puerto de destino
Número de secuencia
Número de reconocimiento
Largo
encab.
U A P R S F
Suma comprobación
Tamaño de ventana
Puntero de urgente
Opciones (opcional)
Datos (opcional)
32 bits
7
Asignación de puertos
16 bits o sea 0 a 65535
Puertos 0 - 1023: puertos bien conocidos
(definidos en la RFC 1700)
Puertos 1024 al 65535: se pueden usar
libremente
8
Detección de errores
Simple suma de comprobación (16 bits)


El mensaje se divide en palabras de 16 bits, y
se hace la suma en complemento a 1
Se hace el complemento a 1 (invertir 1s y 0s)
Se hace sobre los datos, el encabezado, y un
"pseudoencabezado" de capa 3
9
Pseudo encabezado para
suma de comprobación
Se utiliza en el cálculo del checksum de
TCP

Checksum se hace sobre pseudoencabezado + todo
el contenido del segmento (incluyendo datos)
Viola la independencia de capas
Se modifica al cambiar de versión de IP!
Dirección IP de origen
Dirección IP de destino
00000000
Protocolo
Largo del segmento (encabezado+datos)
32 bits
10
Banderas
S - Syn (sincronización inicial de números de
secuencia en el establecimiento de conexión)
F - Fin (solicitud de fin de conexión)
R - Reset (cierre abrupto de conexión)
A - Campo de reconocimiento válido
U - datos urgentes (prácticamente en desuso)
P - Push (se pide celeridad para enviar los
datos a la capa de aplicación, prácticamente
en desuso)
11
Opciones
El campo de Opciones permite intercambiar
datos no obligatorios
Se han ido agregando nuevas opciones






Maximum Segment Size (MSS)
Escala de la ventana (WSCALE)
Asentimiento selectivo (SACK)
Timestamp
Asentimiento negativo (NAK)
Otras
12
Opciones (cont.)
MSS: observamos el tamaño máximo de
paquete que podemos mandar (dado por las
capas inferiores), y descontamos los
encabezados. Se envía en primer segmento

Por ejemplo, en ethernet el máximo es 1500
bytes, por lo que MSS es 1460
NACK: avisar que no recibí un determinado
segmento (no se usa)
Otras: veremos luego
13
Problemas con los
segmentos
Pérdidas de segmentos por rutas
congestionadas, enlaces caídos o errores
Segmentos que llegan fuera de orden
Segmentos que se duplican por retardos que
obligan a la retransmisión o por problemas en
las capas inferiores
14
Establecimiento de
conexión en TCP
Originador
Destinatario
Solicitud de conexión
Bandera SYN = 1
Bandera ACK = 0
Secuencia = x
Respuesta
Bandera SYN = 1
Bandera ACK = 1
Secuencia = y
Reconocimiento = x + 1
Confirmación
Bandera SYN = 0
Bandera ACK = 1
Secuencia = x + 1
Reconocimiento = y + 1
En este punto el originador
da por establecida la
conexión
En este punto el destinatario
da por establecida la
conexión
15
Corte de conexiónIndicación
en TCP
de corte de A
Host A
Host B
Datos (sec=z)
+datos
ACK
En este punto el host A
da por cortada la conexión
(él no va a enviar más datos)
Bandera FIN = 1
Bandera ACK = 1
Secuencia = w
Reconocimiento = z + 1
Confirmación de corte
Bandera FIN = 0
Bandera ACK = 1
Secuencia = z + 1
Reconocimiento = w + 1
Más datos!
B puede
seguir enviando
datos
Indicación
de corte
de B
Bandera FIN = 1
Bandera ACK = 1
Secuencia = t
Reconocimiento = w + 1
Confirmación de corte
Bandera FIN = 0
Bandera ACK = 1
Secuencia = w + 1
Reconocimiento
= t + B1
En
este punto el host
da por cortada la conexión
(él no va a enviar más datos)16
Corte abrupto de conexión
Host A
Host B
Datos (sec=z)
Indicación de corte de A
Bandera FIN = 1
Bandera ACK = 1
Secuencia = w
Reconocimiento = z + 1
Confirmación de corte
Bandera FIN = 0
Bandera ACK = 1
Secuencia = z + 1
Reconocimiento = w + 1
+datos
RST
La aplicación en el host A cierra
la conexión y deja de escuchar
(por ejemplo termina)!!
Reset de conexión
Bandera FIN = 0
Bandera ACK = 1
Bandera RST = 1
Secuencia = w+1
Reconocimiento = z+1
17
Corte abrupto de conexión
Los datos enviados luego de la confirmación
de corte de B hacia A se pierden
Los últimos datos enviados por B y
reconocidos son hasta el byte “z”, cualquier
otro dato posterior debe asumirse que se
perdió (a menos que recibamos ACK)
18
Manejo de los números de
secuencia y reconocimiento
En TCP se numeran los bytes, no los
segmentos

Un segmento sin datos no incrementa el
número de secuencia
El establecimiento y fin de conexión
consumen un (1) número de secuencia
En el reconocimiento se indica el próximo nº
de secuencia esperado
19
Ejemplo: establecimiento
Flags: SYN=1
, ACK=0
Seq=11, Ack=
?, 0 bytes carg
a útil
CK=1
A
,
1
=
N
Y
S
:
Flags
arga útil
c
s
e
t
y
b
0
,
=12
Seq=32, Ack
Flags: SYN=0
, ACK=1
Seq=12, Ack=
33, 0 bytes ca
rga útil
20
Ejemplo: transmisión de
datos
Seq=12, Ack=
33, 15 bytes
carga útil
ga útil
r
a
c
s
e
t
y
b
0
=27,
Seq=33, Ack
Seq=27, Ack=
33, 1000 byte
s carga útil
Seq=1027, A
ck=33, 10 by
tes carga útil
rga útil
a
c
s
e
t
y
b
4
=1037,
Seq=33, Ack
Seq=1037, A
ck=37, 0 byte
s carga útil
21
Ejemplo: FIN simétrico
Flags: FIN=1,
ACK=1
Seq=1037, A
ck=37, 0 byte
s carga útil
, ACK=1
carga útil
Flags: FIN=0
s
e
t
y
b
0
,
8
=103
Seq=37, Ack
, ACK=1
carga útil
Flags: FIN=1
s
e
t
y
b
0
,
8
=103
Seq=37, Ack
B podría
enviar
datos
Flags: FIN=0,
ACK=1
Seq=1038, A
ck=38, 0 byte
s carga útil
22
Estados de la conexión
Punteado:
camino del
servidor
Continuo:
camino del
cliente
23
Significado de los estados
24
Control de Flujo
Control de flujo: adaptar la velocidad de envío
a la capacidad del receptor
El que recibe informa sobre el tamaño de la
ventana (tamaño de buffer disponible)
 Campo "Tamaño de ventana” en encabezado TCP
De esta manera, el receptor controla la
cantidad máxima de datos que el transmisor
puede enviarle en cada momento
Si la aplicación no lee los datos
suficientemente rápido, la ventana del
receptor decrecerá
 Puede llegar a “0” si se llena todo el buffer
25
Posible bloqueo por anuncio
de ventana de tamaño 0
Problema:




El receptor anuncia ventana = 0
Más tarde cuando tiene ventana disponible
anuncia el nuevo valor de ventana
Este nuevo anuncio se pierde
Se produce un bloqueo
Solución:

El emisor enviará un segmento que fuerce una
respuesta del receptor y así obtener un nuevo
anuncio de ventana:


Enviar un segmento con número de secuencia menor al
actual (y sin datos)
O enviar el próximo byte (que podría ser descartado) 26
Manejo de ventana en TCP
27
Problemas de performance
Si se envían segmentos con pocos datos de
usuario, el peso de los encabezados es alto y
por tanto la performance baja
Cómo evitar enviar muchos segmentos
“chicos”?



Piggybacking
Algoritmo de Nagle
Síndrome de ventana tonta y solución de Clark
28
Piggybacking
Evitar enviar segmentos que solamente
tengan reconocimientos
Se permite a TCP la posibilidad de retardar el
envío de reconocimiento (hasta 500 ms) para
esperar a tener datos para transmitir
29
Algoritmo de Nagle
Se aplica en el transmisor
La idea es que en tránsito no haya más de un
segmento “chico”
Se envía el primer segmento y se espera el ACK
Mientras tanto se acumulan los datos de la
capa superior de modo que el próximo
segmento vaya más lleno
Se puede enviar también cuando se llena media
ventana o el tamaño máximo del segmento
(MSS)
Malo en aplicaciones interactivas remotas
(mouse)
30
Síndrome de la ventana
tonta: Solución de Clark
Si el receptor anuncia 1 byte o un tamaño de
ventana muy pequeño, está obligando al
transmisor a enviar segmentos “chicos”
La Solución de Clark es No avisar
disponibilidad de ventana hasta tener libre un
segmento de tamaño máximo (MSS) o la
mitad del buffer
31
Síndrome de Ventana tonta
32
Control de congestión
No mandar más datos que los que la red
puede aceptar

Complementario al control de flujo
Idea: Entubado


Si tenemos disponible un ancho de banda B, y
el retardo de ida y vuelta es 2T, queremos
mandar:
V = B*2T
Problema: Cómo conocer B
33
Control de congestión en
TCP
Hipótesis: las pérdidas de paquetes son por
congestión (los enlaces son buenos)

Problema en enlaces inalámbricos con muchas
pérdidas
El transmisor maneja una ventana de
congestión, que actualiza dinámicamente de
acuerdo a las condiciones de la red

Mantiene también un valor "Umbral"
El transmisor no permite que haya en tránsito
más bytes que los que indica la ventana de
congestión
34
Ventana de congestión
El tamaño de la Ventana comienza en 1 MSS
(hay variantes) y 64 Kbytes como umbral
Fase “Slow start”: agrega 1 byte a la ventana
por cada byte reconocido

Al reconocerse toda la ventana enviada, esta se duplica
A partir del umbral sigue linealmente

Se aumenta 1 segmento por cada ventana completa
reconocida
Si hay pérdidas (timeout):

Se fija el umbral a la mitad del valor de la
ventana actual (NO a la mitad del umbral
actual), y baja la ventana a 1 segmento
35
Ventana de congestión
36
Variantes modernas
Fast retransmit/fast recovery

Si me doy cuenta que se perdió un solo
segmento (recibo SACK o recibo ACKs
duplicados), retransmito y bajo umbral, pero la
ventana la pongo en el valor del umbral
 La suposición es que se perdió por un evento aislado,
o que la congestión es “leve”
Se están investigando nuevas maneras de
realizar el control de congestión


Eficiencia
Equidad en el reparto de recursos
37
Otras opciones "modernas"
Window Scale: ventana máxima de 64 KB
“quedó chica”


Calcular la velocidad máxima de transmisión
en un enlace de 1Gbps y 100ms de RTT con
una ventana de receptor de 64 KB
La "escala de ventana" indica cuantos bits "0"
agregar a la derecha
SACK (Reconocimiento selectivo)

Permite indicar qué segmentos se recibieron
correctamente posteriores al indicado en el
campo ACK del segmento
38
Reuso de los números de
secuencia
Enlace de 56 Kbps -> los números de
secuencia se reutilizan en 3.6 días
1 Gbps -> se reutilizan en 17 segundos!!

Tiempo de vida máximo asumido por TCP de un
paquete en la red: 120 Segundos!
Solución: Se utiliza el número de secuencia
junto con una opción Timestamp para
detectar duplicados viejos

Receptor debe verificar que el valor de timestamp sea
monótono creciente, descartando segmentos antiguos

Timestamp también sirve para mejorar el cálculo del RTT
39
Gestión de temporizadores
TCP maneja varios temporizadores, el más
importante es el de retransmisión
Jacobson:



RTT[n] = a RTT[n-1] + (1-a) M[n]
D[n] = b D[n] + (1-b) |RTT[n] – M[n]|
Timeout = RTT + 4 * D
a = 7/8
b = 3/4
Karn:

No calcular sobre retransmisiones

Se duplica el timeout a cada pérdida
Moderno: se utiliza la opción Timestamp para
mejorar el cálculo del RTT
40
UDP: User Datagram Protocol
Servicio de datagramas, no orientado a
conexión
Básicamente es un paquete IP con un
encabezado mínimo de capa de transporte
Puerto de origen
Puerto de destino
Largo del segmento
Checksum
Datos (opcional)
32 bits
41
Descargar