Documente Academic
Documente Profesional
Documente Cultură
COMPUTADORAS 2
Clase 8
Agenda
Servicios de la capa Transporte orientado a la
transporte conexión: TCP
Multiplexing y • Estructura de un
demultiplexing segmento
• Transferencia confiable
Transporte sin conexión: de datos
UDP • Control de flujo
Principios de • Gestión de la conexión
transferencia confiable de Principios del control de
datos congestión
Control de congestión en
TCP
TCP: Generalidades. RFCs: 793, 1122, 1323,
2018, 2581
Es una comunicación Punto-a punto: Transferencia full duplex (dos
Un Tx y un Rx sentidos):
• Flujo de datos bi-
flujo de bytes confiable y en orden: direccionales en la misma
No hay “límites del inicio/término de conexión
mensaje” • MSS: maximum segment
Usa pipeline: size, depende del Maximum
Transmission Unit de la capa
El tamaño de la ventana TCP es enlace)
definido por el control de Orientado a la conexión:
congestión y control de flujo
• Handshaking (intercambio de
Usa buffer en Tx & Rx mensajes de control)
inicializa al Tx y Rx antes del
intercambio de datos
application application Tiene control de flujo:
socket
writes data reads data • Tx no sobrecargará al Rx
socket
door door También tiene control de
TCP TCP congestión
send buffer receive buffer
segment
Estructura de un segmento TCP
32 bits Cuenta bytes
URG: urgent data
de datos
(generalmente no usado) # puerto origen # puerto dest. (no segmentos)
ACK: mensaje Número de secuencia Sec: flujo ida
Ack: flujo vuelta
porta ACK válido
Número de acknowledgement
PSH: push data now largo No # bytes que el
(entregar datos a aplic. head usado UA P R S F RcvWindow Rx está
ahora – gen. no usado) checksum Puntero dato urgente dispuesto a
aceptar
Establecimiento de
conexión
(comandos de inicio Datos de la Usado para
y cierre) aplicación negociar MSS
o para factor
checksum (largo variable)
de escalamiento
(como en UDP) ventana
Un autodidacta de Internet dice “Como el campo
número de puerto es de 16 bits, un servidor TCP no
pueden atender más de 216 clientes
simultáneamente.” ¿Está usted de acuerdo?
Justifique.
No es correcto. El rango para el número de puerto no
limita el número de clientes conectados a un
servidor. En general los clientes vienen desde
distintas máquinas y el servidor creará un nuevo
socket (no puerto) por cada cliente. Ciertamente hay
un límite pero no está relacionado con el rango para
los puertos pues todos los sockets usan único puerto
en el servidor.
Ejemplo: Uso de # de sec. Y ACKs en
Telnet (Aplicación sobre TCP)
# de Sec.:
Host A Host B
• “número” del byte dentro
del flujo correspondiente Usuario
al primer byte del escribe
segmento de datos ‘C’
host acusa
ACKs: recibo de
• # sec. del próximo byte ‘C’ y envía
esperado desde el otro echo de ‘C’
lado
• ACK es acumulativo
host acusa
¿Cómo el receptor maneja recibo de
segmentos fuera de orden? eco ‘C’
• la especificación de TCP
lo deja a criterio del
implementador
tiempo
Escenario telnet simple
Con conexión ya establecida
Round-Trip Time y Timeout en TCP
¿Cómo fijar valor de ¿Cómo estimar el RTT?
SampleRTT: mide tiempo
timeout en TCP? desde tx del segmento hasta
Mayor que RTT recibo de ACK
• pero RTT varía Ignora retransmisiones
Muy corto: timeout SampleRTT varía, hay que
prematuro suavizar el RTT estimado
• Retransmisiones Promediar varias medidas
innecesarias recientes, no considerar sólo el
Muy largo: lenta último SampleRTT
reacción a pérdidas de Estimación de RTT no
segmentos considera tamaño de
paquetes.
¿Por qué en la estimación de RTT, TCP omite
la medición de SampleRTT de segmentos
retransmitidos?
350
300
250
RTT (milliseconds)
200
150
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
DevRTTi=(1-)*DevRTTi-1 + *|SampleRTTi-EstimatedRTTi|
(típicamente, = 0.25)
No es desviación estándar,
pero es más rápido de calcular.
loop (forever) {
Tx TCP
switch(event) (simplificado)
event: datos recibidos desde la aplicación
Crear segmento TCP con número de sec. NextSeqNum Comentarios:
if (timer actualmente no está corriendo) • SendBase: Byte más
iniciar timer antiguo sin ACK
pasar segmento a IP (capa red) • SendBase-1: último Byte
NextSeqNum = NextSeqNum + length(data) con ACK recibido
break;
Ejemplo:
event: timeout del timer • SendBase = 71 y se
retransmitir segmento con menor # de sec. sin acuse recibe ACK con x = 72
iniciar timer • El Rx quiere nuevos
break; bytes con seq = 72
• Como x > SendBase, llegó
event: recepción de ACK con campo ACK de valor x
acuse de recibo
if (x > SendBase) {
de dato (seq = 71)
SendBase = x
if (hay segmentos sin acuse de recibo aún)
iniciar timer Notar que evento de
else detener timer timeout envía sólo el
} paquete más antiguo.
} /* end of loop forever */
TCP: escenarios de retransmisión
Pérdida de ACK Timeout prematuro
Host A Host B Host A Host B
SendBase SendBase
= 92 = 92
Seq=92 timeout
timeout
X
loss
Sendbase
= 100
Seq=92 timeout
SendBase
= 120
SendBase
= 100 SendBase
= 120
time time
TCP: escenarios de retransmisión
Host A Host B
SendBase = 92
timeout
X
loss ACK acumulado
SendBase = 120
time
X
timeout
time
TCP: Algoritmo de Retransmisión Rápida
event: Llega ACK, con campo ACK de valor x
if (x > SendBase) {
SendBase = x
if (hay segmentos sin acuse de recibo aún)
iniciar timer
else detener timer
}
else { // x == SendBase
incrementar cuenta de ACKs de x duplicados
if (cuenta de ACKs de x duplicados == 3) {
re-enviar segmento con # de secuencia x
iniciar timer
}
client server
Connection
request
Connection
granted
ACK
Administración de conexión en TCP-3
Cerrando una conexión:
client server
Cliente cierra socket: close 1
clientSocket.close(); closing
Ciclo de vida
del servidor TCP
Close/FIN ESTABLISHED