TCP
2
3
Diagrama de estado de transición
Esperando el
Ambos cierre de la
extremos aplicación
cerrados a la
vez
2do fin enviado
4
5
Escenario común
El valor común de MSL está
entre 30 segundos y 1
minuto.
maximum segment lifetime
(MSL)
6
Handshake de tres fases - Handshake three way
7
Apertura Simultanea
8
Cierre Simultanea
maximum segment lifetime (MSL)
9
Denegar conexión
10
Abortar conexión
11
Control de Flujo
El control de flujo regula la cantidad de datos que una fuente puede enviar
antes de recibir una acuse de recibo del destino. TCP define una ventana
que se impone al búfer de datos entregados desde el programa de
aplicación.
Protocolo de ventana deslizante
Silly Window Syndrome
12
Ventana de envío
13
Ventana de recepción
14
Ventana Deslizante
Tamaño de ventana = mínimo (rwnd , cwnd)
contracción
Ventana deslizante
cerrando abriendo
Se utiliza una ventana deslizante para hacer que la transmisión sea
más eficiente, así como para controlar el flujo de datos para que el
destino no se vea abrumado por los datos.
Las ventanas deslizantes de TCP están orientadas a bytes.
15
Ejemplo 3
¿Cuál es el valor de la ventana del receptor (rwnd) para el host A si el
receptor, el host B, tiene un tamaño de búfer de 5000 bytes y 1000
bytes de datos recibidos y sin procesar?
Solución
El valor de rwnd = 5,000 - 1,000 = 4,000. El host B puede
recibir solo 4.000 bytes de datos antes de desbordar su búfer. El
anfitrión B anuncia este valor en su siguiente segmento a A.
Ejemplo 4
¿Cuál es el tamaño de la ventana para el host A si el valor de rwnd es
de 3000 bytes y el valor de cwnd es de 3500 bytes?
solución
El tamaño de la ventana es el menor de rwnd y cwnd, que es de 3000
bytes.
16
Ejemplo 5
En la figura muestra un ejemplo poco realista de una ventana deslizante. El
remitente ha enviado bytes hasta 202. Suponemos que cwnd es 20 (en realidad, este
valor son miles de bytes).
El receptor ha enviado un número de acuse de recibo de 200 con un rwnd de 9 bytes
(en realidad, este valor es de miles de bytes). El tamaño de la ventana del remitente
es el mínimo de rwnd y cwnd o 9 bytes. Los bytes 200 a 202 se envían, pero no se
reconocen. Los bytes 203 a 208 se pueden enviar sin preocuparse por el
reconocimiento. Los bytes 209 y superiores no se pueden enviar.
Tamaño de ventana = mínimo (20 , 9) = 9
Enviado no Puede ser enviado
reconocido inmediatamente
Enviado y No puede ser
Próximo byte para ser
reconocido enviado hasta abrir
enviado
la ventana
17
Ejemplo 6
En la figura anterior, el servidor recibe un paquete con un valor de confirmación
de 202 y un rwnd de 9.
El host ya ha enviado los bytes 203, 204 y 205. El valor de cwnd sigue siendo 20.
Muestre la nueva ventana.
Solución
La figura siguiente se muestra la nueva ventana. Tenga en cuenta que este es un caso
en el que la ventana se cierra desde la izquierda y se abre desde la derecha en un
número igual de bytes; el tamaño de la ventana no ha cambiado.
El valor de acuse de recibo, 202, declara que se han recibido los bytes 200 y 201 y que
el remitente no necesita preocuparse por ellos; la ventana puede deslizarse sobre ellos.
Enviado y No puede ser
reconocido Próximo byte para ser enviado hasta
enviado abrir la ventana
18
Ejemplo 7
En la figura anterior, el remitente recibe un paquete con un valor de acuse de recibo
de 206 y un rwnd de 12. El host no ha enviado ningún nuevo byte. El valor de cwnd
sigue siendo 20. Muestra la nueva ventana.
Solución El valor de rwnd es menor que cwnd, por lo que el tamaño de la ventana es
12. La figura muestra la nueva ventana. Tenga en cuenta que la ventana se ha abierto
desde la derecha en 7 y se ha cerrado desde la izquierda en 4; el tamaño de la
ventana ha aumentado.
Tamaño de ventana = mínimo (20 , 12) = 12
Enviado y No puede ser
reconocido enviado hasta
abrir la ventana
19
Ejemplo 8
El host recibe un paquete con un valor de reconocimiento de 210 y un rwnd de 5. El
host ha enviado los bytes 206, 207, 208 y 209. El valor de cwnd sigue siendo 20.
Muestre la nueva ventana.
Solución: El valor de rwnd es menor que cwnd, por lo que el tamaño de la ventana es
5. La figura 12.24 muestra la situación. Tenga en cuenta que este es un caso no
permitido por la mayoría de las implementaciones. Aunque el remitente no ha
enviado los bytes 215 a 217, el receptor no lo sabe.
Esta situación no es permitida en la
mayoría de implementaciones
Tamaño de ventana = 5
20
Ejemplo 9
¿Cómo puede el receptor evitar encoger la ventana en el ejemplo anterior?
Solución: El receptor necesita realizar un seguimiento del último número de
acuse de recibo y la última respuesta.
Si agregamos el número de reconocimiento a rwnd, obtenemos el número de bytes
que sigue a la pared derecha.
Si queremos evitar que la pared derecha se mueva hacia la izquierda
(encogiéndose), siempre debemos tener la siguiente relación.
nuevo ack + nuevo rwnd ≥ último ack + último rwnd
o
nuevo rwnd ≥ (último ack + último rwnd) − nuevo ack
Para evitar reducir la ventana del remitente, el receptor debe esperar hasta que
haya más espacio disponible en su búfer.
21
Algunos puntos sobre las ventanas deslizantes de TCP :
❏ El tamaño de la ventana es el menor entre rwnd y cwnd.
❏ La fuente no tiene que enviar los datos de una ventana completa.
❏ El receptor puede abrir o cerrar la ventana, pero no debe
encogerse.
❏ El destino puede enviar un acuse de recibo en cualquier momento
siempre que no se reduzca la ventana.
❏ El receptor puede apagar temporalmente la ventana; el remitente,
sin embargo, siempre puede enviar un segmento de un byte
después de cerrar la ventana.
22
Control de ERROR
TCP proporciona confiabilidad mediante el control de errores, que
detecta segmentos corruptos, perdidos, desordenados y duplicados.
El control de errores en TCP se logra mediante el uso de la suma de
comprobación, el reconocimiento y el tiempo de espera
Checksum
Acknowledgment
Acknowledgment tipo
Retransmisión
Segmentos fuera de orden
23
24
25
Los segmentos ACK no consumen números de secuencia y no se
reconocen.
En las implementaciones modernas, se produce una retransmisión si el
temporizador de retransmisión expira o si han llegado tres segmentos
ACK duplicados.
No se establece ningún temporizador de retransmisión para un
segmento ACK.
Los datos pueden llegar desordenados y ser almacenados
temporalmente por el TCP receptor, pero TCP garantiza que no se
entregue ningún segmento desordenado al proceso.
26
Operación Normal: Transmisión sin error
27
Segmentos pérdidos - temporizador RTO expirado
El receptor TCP entrega solo datos ordenados al proceso. 28
Retransmisión rápida - recepción de 3 ACKs
repetidos
29
acknowledgment pérdido - sin expirar el temporizador RTO
30
Reconocimiento perdido corregido reenviando un segmento - temporizador
RTO expirado
retransmission timeout (RTO)
Los reconocimientos perdidos pueden crear un punto muerto si no se manejan
correctamente. 31
CONGESTION CONTROL
El control de la congestión se refiere a los mecanismos y técnicas para
mantener la carga por debajo de la capacidad.
Desempeño de la red
Mecanismos de control de congestión
Control de congestion en TCP
colas
32
Retraso de paquetes y carga de la Rendimiento frente a carga de red
red
33
Inicio lento, aumento exponencial
En el algoritmo de inicio lento, el tamaño de la ventana de congestión aumenta
exponencialmente hasta que alcanza un umbral
34
Evitación de la congestión, aumento aditivo
En el algoritmo para evitar la congestión, el tamaño de la ventana de congestión aumenta de forma aditiva
hasta que se detecta la congestión.
La mayoría de las implementaciones reaccionan de manera diferente a la detección de congestión:
❏ Si la detección es por tiempo de espera, comienza una nueva fase de inicio lento.
❏ Si la detección se realiza mediante tres ACK, comienza una nueva fase para evitar la congestión. 35
Resumen de la política de congestión de TCP
36
Ejemplo de Congestion
37
Temporizadores TCP
Para realizar su operación sin problemas, la mayoría de las
implementaciones de TCP utilizan al menos cuatro temporizadores.
Temporizador de retransmisión
Temporizador de persistencia
Temporizador Keepalive
Temporizador de tiempo de espera
En TCP, solo puede haber una medición RTT en curso en cualquier momento
38
TCP usa 4 temporizadores para controlar una conexión
○ RTO, temporizador de retransmisión
○ Keepalive, evita mantener conexiones indefinidamente
■ Segundos que una conexión puede estar en silencio, tcp_keepalive_time
■ Expirado el temporizador se envían un máximo de tcp_keepalive_probes
sondas cada tcp_keepalive_intvl segundos.
■ Si no se recibe ningún ACK para las sondas se cierra la conexión.
■ Ej. 2horas, 10 sondas cada 75 segundos
○ TIMEWAIT, es útil en dos situaciones:
■ Volver a enviar el último ACK durante el cierre activo (se recibe FIN)
■ Previene la colisión de números de secuencia de dos conexiones
distintas (puerto y nº de secuencia no se pueden reutilizar)
■ 2 * MSL (maximum segment life-time). Eg. 30, 60, 120 segundos
○ Temporizador de persistencia:
■ Asociado a la recepción de un tamaño de ventana 0
■ Recupera la pérdida de un ACK posterior con el nuevo tamaño
■ Se envía una sonda que fuerza el envío de un ACK
■ Ej. 60 segundos 39
● La elección del tiempo de vencimiento del temporizador de
retransmisión
(timeout) está basada en los retardos observados en la red
● Los retardos en la red pueden variar dinámicamente, por tanto
los timeouts debe adaptarse a esta situación
● Las principales técnicas utilizadas para fijar los temporizadores
de retransmisión
son las siguientes:
○ Método de la media ponderada (algoritmo de Jacobson)
○ Método de la varianza (algoritmo de Jacobson/Karels)
○ Algoritmo de Karn
40
41
42
Ejemplo 10
Demos un ejemplo hipotético. En la figura siguiente muestra
parte de una conexión. La figura muestra el establecimiento de
la conexión y parte de las fases de transferencia de datos.
1. Cuando se envía el segmento SYN, no hay ningún valor para RTTM, RTTS
o RTTD. El valor de RTO se establece en 6,00 segundos. A continuación se
muestra el valor de estas variables en este momento:
RTTM = 1.5 RTTS = 1.5
RTTD = 1.5 / 2 = 0.75 RTO = 1.5 + 4 (0.75) = 4.5
2. Cuando llega el segmento SYN + ACK, se mide RTTM y es igual a 1,5
segundos. La siguiente diapositiva muestra los valores de estas variables:
RTTM (Round Trip Time Measurement)
43
Ejemplo 10
RTTM = 1.5 RTTS = 1.5
RTTD = 1.5 / 2 = 0.75 RTO = 1.5 + 4 (0.75) = 4.5
3. Cuando se envía el primer segmento de datos, comienza una
nueva medición RTT.
Tenga en cuenta que el remitente no inicia una medición RTT
cuando envía el segmento ACK, porque no consume un número de
secuencia y no hay tiempo de espera.
No se inicia ninguna medición RTT para el segundo segmento de
datos porque ya hay una medición en curso.
RTTM = 2.5
RTTS = 7/8 (1.5) + 1/8 (2.5) = 1.625
RTTD = 3/4 (7.5) + 1/4 |1.625 − 2.5| = 0.78
RTO = 1.625 + 4 (0.78) = 4.74 44
Ejemplo 10 Calcular los valores de los temporizadores:
α=⅛, β=1/4
TCP no considera el RTT de un segmento retransmitido en su 45
cálculo de un nuevo RTO
Ejemplo11
Cuando se envía el primer segmento de datos, comienza una nueva
medición RTT. En la figura siguiente es una continuación del ejemplo
anterior.
Hay retransmisión y se aplica el algoritmo de Karn. Se envía el
primer segmento de la figura, pero se pierde.
El temporizador RTO expira después de 4,74 segundos.
El segmento se retransmite y el temporizador se establece en 9.48, el
doble del valor anterior de RTO.
Esta vez se recibe un ACK antes del tiempo de espera. Esperamos
hasta que enviemos un nuevo segmento y recibamos el ACK antes de
volver a calcular el RTO (algoritmo de Karn).
46
Ejemplo 11
α=⅛, β=1/4
47
Opciones
El encabezado TCP puede tener hasta 40 bytes de información opcional.
Las opciones transmiten información adicional al destino o alinean otras
opciones.
48
Opción End-of-option
EOP se puede usar solo una vez
49
Opción No-operation
NOP se puede utilizar más de una vez
50
Opción Maximum-segment-size
El valor de MSS se determina durante el establecimiento de la conexión y no
cambia durante la conexión.
51
Opción Window-scale-factor
El valor del factor de escala de la ventana solo se puede determinar durante el
establecimiento de la conexión; no cambia durante la conexión.
52
Opción de Timestamp
Una aplicación de la opción de marca de tiempo (time stamp) es el cálculo del
tiempo de ida y vuelta (RTT).
53
Ejemplo 12
En la figura siguiente muestra un ejemplo que calcula el tiempo
de ida y vuelta para un extremo. Todo debe invertirse si
queremos calcular el RTT para el otro extremo.
El remitente simplemente inserta el valor del reloj (por ejemplo,
el número de segundos transcurridos desde la medianoche) en el
campo de marca de tiempo para el primer y segundo segmento.
Cuando llega un acuse de recibo (el tercer segmento), se
comprueba el valor del reloj y el valor del campo de respuesta
de eco se resta de la hora actual. RTT es de 12 s en este
escenario.
54
Ejemplo 12
La función del receptor está más involucrada. Realiza un seguimiento
del último acuse de recibo enviado (12000). Cuando llega el primer
segmento, contiene los bytes 12000 a 12099.
El primer byte es el mismo que el valor de lastack. Luego copia el
valor de la marca de tiempo (4720) en la variable tsrecent.
El valor de lastack sigue siendo 12000 (no se ha enviado ningún
nuevo acuse de recibo). Cuando llega el segundo segmento, dado que
ninguno de los números de bytes de este segmento incluye el valor de
lastack, se ignora el valor del campo de marca de tiempo.
Cuando el receptor decide enviar un acuse de recibo acumulativo con
acuse de recibo 12200, cambia el valor de lastack a 12200 e inserta el
valor de tsrecent en el campo de respuesta de eco. El valor de tsrecent
no cambiará hasta que sea reemplazado por un nuevo segmento que
lleve el byte 12200 (siguiente segmento).
55
Ejemplo 12
Tenga en cuenta que, como muestra el ejemplo, el RTT calculado
es la diferencia de tiempo entre enviar el primer segmento y
recibir el tercer segmento.
Este es en realidad el significado de RTT: la diferencia de tiempo
entre un paquete enviado y el acuse de recibo recibido.
El tercer segmento lleva el acuse de recibo del primer y segundo
segmento.
56
Ejemplo 12
La opción de marca de tiempo también se puede utilizar para PAWS.
PAWS : Protection against Wrapped Sequence Numbers 57
SACK
TCP Selective Acknowledgment Options 58
Ejemplo 13
Veamos cómo se usa la opción SACK para listar bloques fuera de orden. En la
siguiente figura, un extremo ha recibido cinco segmentos de datos.
El primer y segundo segmento están en orden consecutivo. Se puede enviar un acuse
de recibo acumulativo para informar de la recepción de estos dos segmentos.
Los segmentos 3, 4 y 5, sin embargo, están desordenados con un espacio entre el
segundo y el tercero y un espacio entre el cuarto y el quinto.
Un ACK y un SACK juntos pueden despejar fácilmente la situación para el remitente.
El valor de ACK es 2001, lo que significa que el remitente no necesita preocuparse
por los bytes 1 a 2000. El SACK tiene dos bloques.
El primer bloque anuncia que los bytes 4001 a 6000 llegaron desordenados.
El segundo bloque muestra que los bytes 8001 a 9000 también llegaron
desordenados. Esto significa que los bytes 2001 a 4000 y los bytes 6001 a 8000 se
pierden o se descartan. El remitente solo puede reenviar estos bytes.
59
Ejemplo 13
60
Ejemplo 14
El ejemplo de la figura siguiente muestra cómo se puede detectar
un segmento duplicado con una combinación de ACK y SACK. En
este caso, tenemos algunos segmentos desordenados (en un
bloque) y un segmento duplicado.
Para mostrar tanto los datos desordenados como los duplicados,
SACK usa el primer bloque, en este caso, para mostrar los datos
duplicados y otros bloques para mostrar los datos desordenados.
Tenga en cuenta que solo el primer bloque se puede utilizar para
datos duplicados.
La pregunta natural es cómo el remitente, cuando recibe estos
valores ACK y SACK, sabe que el primer bloque es para datos
duplicados (compare este ejemplo con el ejemplo anterior). La
respuesta es que los bytes del primer bloque ya están reconocidos
en el campo ACK; por lo tanto, este bloque debe ser un duplicado 61
Ejemplo
62
Ejemplo 15
El ejemplo de la figura siguiente muestra lo que sucede si uno de
los segmentos de la sección fuera de orden también se duplica.
En este ejemplo, uno de los segmentos (4001: 5000) está
duplicado.
La opción SACK anuncia estos datos duplicados primero y
luego el bloque fuera de orden.
Esta vez, sin embargo, el bloque duplicado aún no es reconocido
por ACK, pero debido a que es parte del bloque fuera de orden
(4001: 5000 es parte de 4001: 6000), el remitente entiende que
define el datos duplicados.
63
Ejemplo 15
64
Paquete TCP
Un paquete TCP básico y simplificado para simular el corazón de TCP. El
paquete incluye tablas llamadas bloques de control de transmisión, un
conjunto de temporizadores y tres módulos de software.
Transmission Control Blocks (TCBs)
Timers
Main Module
Input Processing Module
Output Processing Module
65
TCP package
66
TCBs
67