Establecimiento
Aunque es posible que un par de entidades finales comiencen una
conexión entre ellas simultáneamente, normalmente una de ellas abre un socket en un determinado puerto TCP
y se queda a la escucha de nuevas conexiones. Es común referirse a esto
como apertura pasiva, y determina el lado servidor de una conexión. El
lado cliente de una conexión realiza una apertura activa de un puerto
enviando un paquete SYN
inicial al servidor como parte de la negociación en tres pasos. En el
lado del servidor se comprueba si el puerto está abierto, es decir, si
existe algún proceso escuchando en ese puerto. En caso de no estarlo, se
envía al cliente un paquete de respuesta con el bit RST
activado, lo que significa el rechazo del intento de conexión. En caso
de que sí se encuentre abierto el puerto, el lado servidor respondería a
la petición SYN válida con un paquete SYN/ACK. Finalmente, el cliente
debería responderle al servidor con un ACK, completando así la negociación en tres pasos (SYN, SYN/ACK y ACK) y la fase de establecimiento de conexión.
Es interesante notar que existe un número de secuencia generado por
cada lado, ayudando de este modo a que no se puedan establecer
conexiones falseadas (spoofing).
Fin de la conexión
La fase de finalización de la conexión usa una negociación en cuatro
pasos (four-way handshake), terminando la conexión desde cada lado
independientemente. Cuando uno de los dos extremos de la conexión desea
parar su "mitad" de conexión transmite un paquete FIN,
que el otro interlocutor asentirá con un ACK. Por tanto, una
desconexión típica requiere un par de segmentos FIN y ACK desde cada
lado de la conexión.
Una conexión puede estar "medio abierta" en el caso de que uno de los
lados la finalice pero el otro no. El lado que ha dado por finalizada
la conexión no puede enviar más datos pero la otra parte si podrá.
No hay comentarios:
Publicar un comentario