Publicado el 5 de Julio del 2017
676 visualizaciones desde el 5 de Julio del 2017
159,0 KB
22 paginas
Creado hace 17a (06/11/2007)
Bloque III: El nivel de transporte
Tema 6: Conexiones TCP
Índice
• Bloque III: El nivel de transporte
– Tema 6: Conexiones TCP
• Establecimiento de conexión
• Finalización de conexión
• Diagrama de estados
• Segmentos de reset
• Establecimiento y cierre simultáneos
• Referencias
– Capítulo 3 de “Redes de Computadores: Un enfoque
descendente basdado en Internet”. James F. Kurose, Keith
W. Ross. Addison Wesley, 2ª edición. 2003.
– Capítulo 18 de “TCP/IP Illustrated, Volume 1: The
Protocols”, W. Richard Stevens, Addison Wesley, 1994.
RC - Bloque III - Tema 6
2
Conexión TCP: Establecimiento
Las conexiones las inicia, normalmente, el cliente (apertura activa) El
servidor hace una apertura pasiva.
•
• Protocolo de establecimiento de conexión:
– El emisor (cliente) envía un segmento SYN especificando el nº de puerto
del servidor al que quiere conectarse y el nº de secuencia inicial (segmento
1).
– El servidor responde con su propio segmento SYN que contiene el nº de
secuencia inicial del servidor (segmento 2). También asiente (ACK) el SYN
del cliente + 1 (los mensajes SYN consume un nº de secuencia).
– El cliente asiente el SYN del servidor con un nº de ack igual al ISN del
servidor +1 (segmento 3).
Cliente:2768
Servidor:discard
Segmento 1
Segmento 3
SYN 13281:13281(0)
<MSS 1024>
S Y N 4 5 8 2 7 : 4 5 8 2 7 ( 0 )
A C K 1 3 2 8 2 , < M S S 1 0 2 4 >
ACK 45828
Segmento 2
RC - Bloque III - Tema 6
3
Conexión TCP: Finalización
• Se intercambian 4 segmentos para cerrar una conexión.
– Una conexión TCP es full-duplex y cada dirección se cierra
independientemente.
– Cada extremo envía un FIN cuando a finalizado el envío de datos
El otro extremo puede continuar enviando datos (half-close).
• El extremo que envía el primer FIN realiza el cierre activo, y el otro
extremo el cierre pasivo.
– Cualquiera de los dos extremos puede iniciar el cierre.
• Protocolo de finalización de conexión:
– El cliente finaliza la aplicación El cliente TCP envía un FIN
(segmento 4) con el número de secuencia correspondiente (cierre
del flujo de datos cliente a servidor).
– El servidor responde con un ACK (segmento 5) del nº de secuencia
+ 1 (los mensajes FIN consumen un nº de secuencia).
– A continuación, el servidor envía un FIN (segmento 6).
– El cliente confirma la recepción del FIN, con un ACK del nº de
secuencia recibido + 1 (segmento 7).
RC - Bloque III - Tema 6
4
Conexión TCP: Finalización
Cliente:2768
Servidor:discard
SYN 13281:13281(0)
<MSS 1024>
S Y N 4 5 8 2 7 : 4 5 8 2 7 ( 0 )
A C K 1 3 2 8 2 , < M S S 1 0 2 4 >
ACK 45828
Segmento 1
Segmento 3
Segmento 4
FIN 13282:13282(0)
ACK 45828
A C K 1 3 2 8 3
F I N 4 5 8 2 8 : 4 5 8 2 8 ( 0 )
A C K 1 3 2 8 3
Segmento 7
RC - Bloque III - Tema 6
ACK 45829
Segmento 2
Segmento 5
Segmento 6
Para animación
5
Conexión TCP: Timeout
• Tiempo que ha de transcurrir para que un cliente tratando de
establecer una conexión indique que dicha conexión no puede
ser establecida.
– No se especifica el motivo en la aplicaciones estándares.
• Este timeout varía de unas implementaciones a otras.
• En el caso del UNIX BSD y derivados, este timeout vale 75
segundos en los que se suelen mandar entre 3 y 5 paquetes de
establecimiento.
• Funciona en base a ticks de 500 mseg.
11 10 9 8 7 6 5 4 3 2 1 0
La aplicación establece el timeout
RC - Bloque III - Tema 6
500 msegs
6
Conexión TCP: MSS
• Cuando se establece una conexión TCP, cada extremo anuncia el MSS que
espera recibir:
– La opción MSS sólo aparece en un segmento SYN.
– Si no se declara, se toma por defecto el valor 536 (datagrama IP de 576
– MSS no incluye las longitudes de cabecera IP y TCP (MTU – 20 – 20 =
bytes).
MSS)
de los dos.
MSS de 536.
• En general es preferible un MSS grande que amortice el coste de cabeceras.
Pero, obviamente, interesa evitar fragmentación.
• No se realiza una negociación del MSS, el tamaño de segmento será el menor
• Cuando la dirección IP de destino “no es local” Se asume por defecto un
173.197.15.10
MTU = 296 bytes
173.197.24.1
173.197.15.4
MTU = 1500 bytes
SYN, <MSS 1460>
SYN, <MSS 256>
RC - Bloque III - Tema 6
7
Conexión TCP: Half-close
• Una parte termina la conexión (da por finalizado su emisión de datos)
mientras todavía está recibiendo datos (half-close).
– No puede enviar más datos, pero si ACKs, ...
• Pocas aplicaciones se beneficien de esta utilidad:
– rsh servidor sort < ficheroEntrada.txt
Servidor:discard
Cliente:2768
FIN 13282:13282(0)
ACK 45828
A C K 1 3 2 8 3
A C K 1 3 2 8 3
P S H 4 5 8 2 8 : 4 6 8 5 2 ( 1 0 2 4 )
P S H 4 6 8 5 2 : 4 7 8 7 6 ( 1 0 2 4 )
ACK 47876
A C K 1 3 2 8 3
F I N 4 7 8 7 6 : 4 7 8 7 6 ( 0 )
A C K 1 3 2 8 3
RC - Bloque III - Tema 6
ACK 47877
8
TCP: Diagrama de estados
CLOSED
appl: apertura pasiva
enviar: <nada>
LISTEN
appl: cerrar
o timeout
a
p
e
n
via
pl: a
r: S
a
p
e
n
pl: e
via
n
via
r: S
r d
p
e
Y
N
rtu
r
a a
ctiv
a
Y
N
ato
s
SYN_SENT
C
K
N , A
K
C
Y
c i b ir : S
r : A
v i a
n
e
r
enviar: SY N, A C K
recibir: SY N
recibir: RST
recibir: ACK
enviar: <nada>
recibir: SYN
enviar: SYN, ACK
Apertura simultánea
ESTABLISHED
Transferencia de datos
e
SYN_RCVD
appl: cerrar
enviar: FIN
FIN_WAIT_1
RC - Bloque III - Tema 6
9
TCP: Diagrama de estados
SYN_RCVD
appl: cerrar
enviar: FIN
FIN_WAIT_1
recibir: ACK
enviar: <nada>
Cierre pasivo
recibir: FIN
enviar: ACK
CLOSE_WAIT
ESTABLISHED
r
a
r
I N
F
p
a
r
e
:
c
r
p l:
v i a
n
e
recibir: FIN
enviar: ACK
Cierre simultáneo
CLOSING
appl: cerrar
enviar: FIN
LAST_ACK
r
e
e
n
ci
b
v
i
a
r
:
A
ir
:
F
I
C
N
,
K
A
recibir: ACK
enviar: <nada>
recibir: ACK
enviar: <nada>
C
K
FIN_WAIT_2
recibir: FIN
enviar: ACK
Cierre activo
RC - Bloque III - Tema 6
TIME_WAIT
Timeout 2MSL
CLOSED
10
TCP: Diagrama de estados
Cliente:2768
Servidor:discard
SYN_SENT
ESTABLISHED
FIN_WAIT_1
FIN_WAIT_2
TIME_WAIT
SYN 13281:13281(0)
<MSS 1024>
S Y N 4 5 8 2 7 : 4 5 8 2 7 ( 0 )
A C K 1 3 2 8 2 , < M S S 1 0 2 4 >
ACK 45828
FIN 13282:13282(0)
ACK 45828
A C K 1 3 2 8 3
F I N 4 5 8 2 8 : 4 5 8 2 8 ( 0 )
A C K 1 3 2 8 3
ACK 45829
SYN_RCVD
ESTABLISHED
CLOSE_WAIT
LAST_ACK
RC - Bloque III - Tema 6
11
TCP: Diagrama de estados
• Estado TIME_WAIT: estado de espera durante 2 MSL
– MSL (Maximum Segment Lifetime): tiempo máximo que un
segmento puede estar en la red antes de ser descartado.
– Permite a TCP reenviar el ACK en caso de que se haya perdido (el
otro extremo reenviará el FIN).
– Mientras la conexión está en este estado, no se pueden reutilizar el
par de sockets de esa conexión Cualquier segmento retrasado
recibido es descartado Garantiza que no aparecen
reencarnaciones de segmentos en futuras conexiones.
• Quiet time: un host permanecerá durante MSL sin crear ninguna
conexión después de reiniciarse.
• Estado FIN_WAIT_2:
– Permanecerá en este estado hasta recibir el FIN del otro extremo.
– El otro extremo está en el estado CLOSE_WAIT y debe esperar a
que se cierre la aplicación.
– Para evitar una espera infinita las implementaciones suelen
establecer un tiempo de espera (p.e. 10 minutos), tras el cual pasa
directamente al estado CLOSED.
RC - Bloque III - Tema 6
12
TCP: Segmentos de Reset
• Un segmento es de Reset cuando se activa en la
cabecera TCP el flag RST.
• Se activa el bit de Reset en una conexión TCP
cuando el paquete que ha llegado no parece, en
principio, estar relacionado con la conexión a la que
está referido el paquete.
• Las causas de generar un paquete con este bit para
una conexión TCP pueden ser varias:
– Intento de conexión a un puerto no existente
– Abortar una conexión
– Respuesta ante conexiones semi-abiertas
RC - Bloque III - Tema 6
13
•
TCP: Segmentos de Reset
Intento de conexión a un puerto no existente:
– Si se trata de realizar una conexión a un puerto
sin aplicación asociada No hay ningún proceso
escuchando una posible llegada de conexiones.
Cliente:2768
Servidor:47322
SYN 13281:13281(0)
<MSS 1024>
R S T 0 : 0 ( 0 )
A C K 1 3 2 8 2
RC - Bloque III - Tema 6
14
TCP: Segmentos de Reset
• Abortar conexión
– Existe la posibilidad de acabar mediante un paquete con el
bit de RST (terminación anormal) Cualquier dato
esperando ser enviado será descartado automáticamente.
Cliente:2768
Servidor:discard
SYN 13281:13281(0)
<MSS 1024>
S Y N 4 5 8 2 7 : 4 5 8 2 7 ( 0 )
A C K 1 , < M S S 1 0 2 4 >
ACK 1
PSH 1:14(13)
ACK 1
A C K 1 4
RST 14:14 (0)
ACK 1
RC - Bloque III - Tema 6
15
TCP: Segmentos de Reset
• Respuesta ante conexiones semi-abiertas
– Sucede cuando el servidor se cae y se vuelve a levantar, después
de lo cual recibe datos del cliente.
– La respuesta en este caso es un segmento de RESET
Cliente:2768
SYN 13281:13281(0)
<MSS 1024>
S Y N 4 5 8 2 7 : 4 5 8 2 7 ( 0 )
A C K 1 , < M S S 1 0 2 4 >
Servidor:discard
ACK 45828
PSH 1:11(10)
ACK 45828
A C K 1 1
PSH 11:25(14)
ACK 45828
R S T 4 5 8 2 8 : 4 5 8 2 8 ( 0 )
A C K 2 5
RC - Bloque III - Tema 6
El servidor se cae y
se vuelve a levantar
16
TCP: Establecimiento simultáneo
•
La posibilidad de establecimiento de conexión simultáneo es mínima
aunque posible:
– Dos aplicaciones en dos hosts se envían mensajes de conexión
– No existe una figura clara de cliente y servidor, ahora hay dos
simultáneamente.
“clien-servidor”.
• TCP está diseñado para manejar correctamente esta posibilidad.
• Este tipo de apertura requiere el envío de 4 segmentos (uno más de lo
habitual) y sigue algunas variantes sobre el diagrama de transición de
estados habitual.
• ¿Esto es una apertura simultánea?
– host1% telnet host2 host2% telnet host1
host1:1111
host2:23
host2:2222
host1:23
SYN J
SY
Comentarios de: Tema 6 - Conexiones TCP (0)
No hay comentarios