2 3-TCP
2 3-TCP
2 3-TCP
Transmission Control
Protocol
Basado en Kurose & Ross – “Computer Networking. A Top-Down Approach”
TCP: RFC: 793, 1122, 1323, 2018, 2581
ECP
2
SEGMENTO TCP
OPCIONES (0 –
DATOS
ECP
3
ENCABEZADO TCP
■ PUERTO ORIGEN: Puerto del emisor
■ PUERTO DESTINO: Puerto del receptor
■ NUMERO DE SECUENCIA
– Numero de secuencia inicial (si SYN == 1)
– Número de secuencia del primer byte datos del segmento (si SYN == 0)
■ NUMERO DE CONFIRMACION
– Si ACK == 1, next sequence number que el emisor del ACK espera. Este confirma
la recepción de todos los bytes previos (ACK acumulativo)
– El primer ACK enviado por las partes confirma el número de secuencia inicial del
otro, peo no datos
ECP
4
ENCABEZADO TCP
■ HEADER LENGHT: Tamaño del encabezado TCP expresado en palabras de 32 bits
– El tamaño mínimo es 5 y el máximo 15, permitiéndose hasta 40 bytes para el
campo de OPCIONES
■ RESERVADO: Reservado para uso futuro
■ BANDERAS
– NS (Nonce Sum): protección ante ocultamiento de paquetes
– CWR (Congestion Window Reduce): notificación de recepción de segmento con
bandera ECE
– ECE (ECN-Echo): Notifica si el par TCP soporta ECN (Explicit Congestion
Notification)
– URG: Valida el campo URGENT POINTER
ECP
5
ENCABEZADO TCP
■ … BANDERAS
– ACK: Valida el campo NUMERO DE CONFIRMACION
– PSH: Indica urgencia de procesar el segmento, sin ponerlo en buffer
– RST (Reset): Reiniciar la conexión
– SYN (Synchronize): se usa solamente al enviar el primer segmento entre pares TCP
durante el 3 way handshake
– FIN (Finished): se usa en el ultimo segmento del emisor
■ TAMAÑO DE VENTANA: tamaño de la ventana de recepción. Especifica el número de unidades
de tamaño de ventana que el emisor del segmento desea recibir actualmente
■ CHECKSUM: Suma de control similar al de UDP
■ URGENT POINTER: Apuntador a la posición donde terminan los datos urgentes.
ECP
6
ENCABEZADO TCP
■ OPCIONES
– MSS (Maximum Segment Size): usado durante la fase SYN y SYN-ACK del 3-
way-handshake para definir el tamaño máximo de segmento que se usará durante
una conexión (ocupa 4 bytes)
– Windows Scaling:
– SACK (Selective Acknowledgements)
– Timestamps
– Nop
ECP
7
#sec y ACKs TCP
#Sec:
“número” de byte en el flujo del
primer byte en el segmento de
datos
ACKs:
Número de secuencia del siguiente
byte esperado del otro lado
ACK acumulativos
P: ¿Cómo maneja el receptor los
segmentos fuera de orden?
R: TCP deja esto al implementador
ECP
ESCENARIO SIMPLE DE TELNET
8
TCP: Round Trip Time y Timeout
P: Como establecer el valor del P: Como estimar RTT?
timeout de TCP?
• SampleRTT: tiempo medido desde la
• Mayor que RTT transmisión del segmento hasta la
pero RTT varía recepción del ACK
Ignorar retransmisiones
• Muy corto: timeout prematuro
Retransmisiones innecesarias • SampleRTT variará , se requiere un
RTT estimado “suave”
• Muy largo: reacción lenta ante la pérdida Promediar varias mediciones
de segmentos recientes, no solo el SampleRTT
actual
ECP
9
TCP: Round Trip Time y Timeout
ECP
10
Ejemplo de estimación RTT:
ECP
11
TCP: Round Trip Time y Timeout
Establecimiento del timeout
ECP
𝑇𝑖𝑚𝑒𝑜𝑢𝑡𝐼𝑛𝑡𝑒𝑟𝑣𝑎𝑙 = 𝐸𝑠𝑡𝑖𝑚𝑎𝑡𝑒𝑑𝑅𝑇𝑇 + 4 × 𝐷𝑒𝑣𝑅𝑇𝑇
12
TCP: Round Trip Time y Timeout
Valores iniciales
ECP
TOI (Algoritmo de Khan)
13
TCP: Round Trip Time y Timeout
Algoritmo de Khan
• El ACK de un segmento retransmitido no se toma en consideración para el cálculo del
𝑇𝑖𝑚𝑒𝑜𝑢𝑡𝐼𝑛𝑡𝑒𝑟𝑣𝑎𝑙 pues puede conducir a resultados erróneos
ECP
14
Transferencia de datos fiable TCP
• TCP crea un servicio TDF sobre • Las retransmisiones ocurren
el servicio no fiable de IP cuando:
Ocurre un timeout
• Segmentos encauzados Se recibe Acks duplicados
• ACKs acumulativos • Considere inicialmente un emisor
• TCP utiliza un temporizador de TCP simplificado:
retransmisión único Ignora Acks duplicados
Ignora control de flujo y control de
congestionamiento
ECP
15
Eventos del emisor TCP:
Datos recibidos de la aplicación: timeout:
• Crear segmento con seq# • Retransmitir el segmento que ocasionó
el timeout
• seq# es el número en el flujo de bytes del
primer byte de datos del segmento • Reiniciar timer
• Iniciar timer si éste aún no esta activado (el
timer se asocia al segmento no confirmado
más antiguo) ACK recibido:
ECP
16
Emisor TCP (simplificado)
NextSeqNum=InitialSeqNumber
SendBase=InitialSeqNumber
loop (eternamente) {
switch(event)
event: Datos recibidos desde desde aplicacion
Crear segmento TCP con numero de secuencia NextSeqNum
if (timer no esta corriendo)
Iniciar timer
pasar segmento a IP
NextSeqNum = NextSeqNum + length(datos)
break;
event: Timeout de timer
Retransmitir segmento aun-no-confirmado con el menor numero de secuencia
Iniciar timer
break;
event: ACK recibido, con campo ACK igual a y SendBase-1: último byte confirmado
if (y > SendBase) { acumulativamente
SendBase=y
if (existen segmentos aun-no-reconocidos)
Ejemplo:
Iniciar timer
} Si SendBase-1 = 71; y = 73, entonces el
ECP
break; receptor espera 73+ ;
} Si y > SendBase, entonces se confirma segmentos
previamente no confirmados
17
TCP: Escenarios de retransmisión
La pérdida de un ACK
SendBase = 100 obliga una retransmisión
ECP
ACK PERDIDO
18
TCP: Escenarios de retransmisión
Sendbase = 100
El segmento 100 no se
SendBase = 120 retransmite
SendBase = 120
ECP
TIMEOUT PREMATURO
19
TCP – Escenarios de retransmisión
SendBase = 120
ECP
ACK ACUMULATIVO
20
Recomendaciones para la generación de ACK TCP [RFC 5681]
ECP
completamente un hueco en datos recibidos que el segmento comience en el limite
inferior del hueco
21
Retransmisión rápida
• Periodo de Timeout suele ser relativamente largo:
Retardo largo antes de reenviar un paquete perdido
• Si el emisor recibe 3 ACKs para el mismo dato, este supone que el segmento
después de los datos confirmados se perdió:
ECP
22
Retransmisión rápida
Reenvio de un segmento después
de un ACK duplicado TRES veces
ECP
23
Algoritmo de Retransmisión Rápida:
event: ACK recibido, con campo ACK igual a y
if (y > SendBase) {
SendBase = y
if (existen segmentos aun-no-confirmados)
Iniciar timer
}
else { /* un ACK duplicado para un segmento ya confirmado */
Incrementar contador de ACKs duplicados recibidos para y
if (numero de ACKs duplicados para y == 3)
/* Retransmisión rápida TCP */
reenviar segmento con numero de secuencia y
}
break;
Un ACK duplicado
Retransmisión rápida
para un segmento ya
confirmado
ECP
24
Control de flujo TCP
ECP
25
Control de flujo TCP
Propósito: El emisor no desbordará el buffer del receptor transmitiendo demasiado a
excesiva velocidad
ECP
26
Control de flujo TCP
ECP
𝐸𝑠𝑝𝑎𝑐𝑖𝑜 𝐿𝑖𝑏𝑟𝑒 𝑒𝑛 𝑏𝑢𝑓𝑓𝑒𝑟 = 𝑟𝑤𝑛𝑑
27
Control de flujo TCP
• El receptor notifica espacio libre incluyendo el valor de rwnd en los segmentos enviados
al emisor
• El emisor limita datos no confirmados a rwnd
• Garantiza que el buffer de recepción no se desbordará
ECP
𝐿𝑎𝑠𝑡𝐵𝑦𝑡𝑒𝑆𝑒𝑛𝑡 − 𝐿𝑎𝑠𝑡𝐵𝑦𝑡𝑒𝐴𝑐𝑘𝑒𝑑 ≤ 𝑟𝑤𝑛𝑑
28
Gestión de conexión TCP
ECP
29
Gestión de conexión TCP
ECP
Socket connectionSocket = welcomeSocket.accept();
30
Gestión de conexión TCP
Three way handshake:
ECP
segmento ACK, que puede contener datos
31
Gestión de conexión TCP
Cierre de conexión:
Cliente cierra socket: cliente servidor
clientSocket.close(); close
timed wait
Paso 3: cliente recibe FIN, responde con ACK.
Ingresa en “timed wait” – responderá con ACK a los FINs
recibidos
closed
Paso 4: servidor, recibe ACK. Conexión cerrada.
ECP
32
Gestión de conexión TCP
ECP
33
Gestión de conexión TCP
ECP
34
PRINCIPIOS DE CONTROL DE
CONGESTIONAMIENTO
ECP
35
PRINCIPIOS DE CONTROL DE CONGESTIONAMIENTO
Congestión:
• Manifestación de la congestión:
Paquetes perdidos (desbordamiento de buffers en los enrutadores)
Retardos largos (encolamiento en buffer de enrutadores)
ECP
36
CAUSAS/COSTOS DE CONGESTIÓN: ESCENARIO 1
• Sin retransmisión
ECP
37
CAUSAS/COSTOS DE CONGESTION: ESCENARIO 2
ECP
38
CAUSAS/COSTOS DE CONGESTIÓN: ESCENARIO 2
ECP
39
CAUSAS/COSTOS DE CONGESTIÓN: ESCENARIO 2
El emisor retransmite paquetes que sabe con certeza que se han perdido (timeout grande)
• La carga ofertada (la tasa de transmisión original mas retransmisiones) = R/2:
𝜆𝑜𝑢𝑡 = 𝑅/3 , entonces, de 0.5R unidades de dato transmitidos, 0.333R bytes/s son datos originales y 0.166R
bytes/s son datos retransmitidos
“Costo” de congestión:
ECP
■ El emisor debe retransmitir para compensar paquetes perdidos por desbordamiento de buffer
40
CAUSAS/COSTOS DE CONGESTIÓN: ESCENARIO 2
• El emisor genera timeout prematuros y podría retransmitir paquetes aun no perdidos (en
cola de espera)
• Si cada paquete se retransmite 2 veces (en promedio), entonces:
Cuando 𝜆′𝑖𝑛 = 𝑅/2, 𝜆𝑜𝑢𝑡 = 𝑅/4
“Costos” de congestión:
ECP
Retransmisiones innecesarias: el enlace transporta múltiples copias de un paquete
41
CAUSAS/COSTOS DE CONGESTIÓN: ESCENARIO 3
• Cuatro emisores
• Rutas multi-salto
• Timeout / retransmisión
• Enlaces con capacidad R bytes/s
ECP
desperdiciada
42
ENFOQUES PARA EL CONTROL DE CONGESTIONAMIENTO
ECP
Tasa de transmisión explicita a la cual debe transmitir el emisor
43
ENFOQUES PARA EL CONTROL DE CONGESTIONAMIENTO
ECP
44
CONTROL DE
CONGESTIONAMIENTO TCP
ECP
45
CONTROL DE CONGESTIONAMIENTO TCP
ECP
46
CONTROL DE CONGESTIONAMIENTO TCP
• ¿Cómo limita, el emisor, la tasa de envío de datos a su conexión?
Cada extremo de una conexión TCP comprende:
Buffer de recepción y envío
Variables:
LastByteRead
rwnd
etc.
El mecanismo de control de congestionamiento TCP en el emisor vigila una variable adicional:
La ventana de congestionamiento
Ventana de congestión (cwnd): impone una restricción en la tasa a la que un emisor TCP puede enviar
datos a la red
La cantidad de datos no confirmados en el emisor no puede exceder el mínimo de cwnd y rwnd
ECP
47
CONTROL DE CONGESTIONAMIENTO TCP
■ Emisor limita la transmisión:
𝑐𝑤𝑛𝑑
𝑇𝑎𝑠𝑎 𝑑𝑒 𝑡𝑟𝑎𝑛𝑠𝑚𝑖𝑠𝑖ó𝑛 = 𝑏𝑦𝑡𝑒𝑠/𝑠
𝑅𝑇𝑇
ECP
48
CONTROL DE CONGESTIONAMIENTO TCP
ECP
49
CONTROL DE CONGESTIONAMIENTO TCP
• ¿Qué algoritmo debe usar el emisor para cambiar su tasa de envío como
función del congestionamiento extremo a extremo percibido?
Un segmento perdido implica congestión, por tanto, la tasa del emisor debe
decrementarse
Un segmento confirmado indica que la red esta entregando los segmentos del emisor
al receptor, entonces, puede incrementarse la tasa cuando llega un ACK por un
segmento previamente no confirmado
Prueba de ancho de banda. La estrategia de TCP es incrementar la tasa mientras
reciba ACKs hasta que ocurra un “loss event”, en cuyo caso reduce su tasa. El emisor
entonces, incrementa su tasa para explorar la tasa a la que comienza la congestión,
luego retrocede y luego comienza a probar nuevamente
ECP
Cada emisor TCP actúa de forma independiente de los demás
50
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
ECP
51
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
• Ejercicio
En Ethernet
MSS = 1460 bytes y RTT = 0.025 ms
Tasa inicial = ?
ECP
52
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
• SLOW START:
ECP
53
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
ECP
54
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
• CONGESTION AVOIDANCE
ECP
55
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
ECP
56
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
• FAST RECOVERY
En fast recovery, cwnd se incrementa en 1 MSS por cada ACK duplicado que se
recibe por el segmento perdido que causó que TCP pase al estado fast – recovery
Cuando llega un ACK por el segmento perdido, TCP pasa al estado CA después de
reducir cwnd
Si ocurre un timeout, fast recovery transita al estado slow – start luego de realizar las
mismas acciones que en slow start y CA: el valor de cwnd se fija en 1 MSS y el valor
de ssthresh se fija en la mitad del valor que tenia cwnd al momento de ocurrir “loss
event“
TCP Tahoe, reduce cwnd a 1 MSS incondicionalmente y pasa a la fase SS luego de
un timeout o 3 ACK duplicados
TCP Reno incorpora fast recovery
ECP
57
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO TCP
ECP
▪ En TCP Tahoe, cwnd = 1 MSS y crece exponencialmente hasta alcanzar ssthresh desde donde
crece linealmente
58
AIMD – INCREMENTO ADITIVO, DECREMENTO MULTIPLICATIVO
ECP
59
AIMD – INCREMENTO ADITIVO, DECREMENTO MULTIPLICATIVO
ECP
a la investigación
60
RESUMEN: CONTROL DE CONGESTIONAMIENTO TCP
• Cuando CongWin esta por debajo del Threshold, el emisor esta en fase slow-
start, la ventana crece exponencialmente
• Cuando CongWin esta por encima del Threshold, el emisor esta en fase
congestion-avoidance, la ventana crece linealmente
ECP
61
CONTROL DE CONGESTIONAMIENTO EN EMISOR TCP
SS o CA ACK duplicado Incrementar contador de ACK duplicados para el CongWin y Threshold no cambian
segmento que se esta confirmando
ECP
62
ALGORITMO DE CONTROL DE CONGESTIONAMIENTO
Th = ?
CongWin = 1 MSS
/* slow start o incremento exponencial */
While (No Packet Loss & CongWin < Th) {
Enviar CongWin segmentos TCP
Por cada ACK incrementar CongWin en 1
}
/* congestion avoidance o incremento lineal */
While (No Packet Loss) {
Enviar CongWin segmentos TCP
Para CongWin ACKs, incrementar CongWin en 1
}
Th = CongWin/2
ECP
If (3 Dup ACKs) CongWing = Th;
If (timeout) CongWin=1;
63
MEF DE CONTROL DE CONGESTIONAMIENTO TCP
ECP
64
RENDIMIENTO TCP
ECP
65
EQUIDAD DE TCP
Objetivo de equidad: Si K sesiones TCP comparten el mismo enlace con ancho de banda
R, cada uno debe tener una tasa promedio de R/K
ECP
66
EQUIDAD DE TCP
ECP
67
EQUIDAD TCP
ECP
68
EJERCICIOS
ECP
4. Estudie el mecanismo de control de congestionamiento ABR de ATM
69