Hola Daniel!
Ten en cuenta que por defecto los routers NO hablan hasta la capa 4, es decir, los routers no se entrometen en la sesión TCP entre 2 dispositivos finales; el establecimiento de la conexión se da solo entre los dispositivos finales, ellos son los que establecen el proceso 3 way-handshake, los routers intermedios simplemente son un transporte de los datos que se intercambian entre esos dispositivos finales.
Pongamos un ejemplo… supongamos que estas iniciando una sesión web desde tu computadora con un servidor… ahí utilizas al protocolo TCP en la capa de Transporte y a través de DNS (lo aprendes más adelante) obtienes la IP del servidor, entonces en este caso tu computadora es la que inicia la conexión TCP directamente CON EL SERVIDOR, ese inicio de sesión no está pensado para los routers. Cuando tu computadora inicie la sesión, esos datos TCP irán encapsulados en un paquete IP que serán entregados (a tu gateway) supongamos a tu primer router, este router no necesita iniciar ningún tipo de sesión TCP con tu computadora o algún tipo de sesión IP con otro router vecino, simplemente se limita a recibir el paquete, analiza el header IP… analiza la IP de destino del paquete donde debe ir tu solicitud de sesión, y envía el paquete hacía el siguiente salto gracias al enrutamiento que también lo aprendes más adelante; el router no participa de la capa 4, no analizara el requerimiento de sesión TCP interno que se tenga dentro del paquete, y lo mismo ocurre con todos los otros routers que se encuentren entre tu computadora y el servidor web. Siempre y cuando tu router tenga una interface con una IP habilitada, recibirá y procesara paquetes sin necesidad de establecer una sesión de algún tipo con routers o dispositivos finales.
Es otra la situación cuando utilizas protocolos como BGP ENTRE los routers, BGP si utiliza al protocolo TCP y por ende los 2 routers que quieren comunicarse a nivel de BGP sí tienen que establecer una sesión 3 Way Handshake.
Respecto al fin de la comunicación, mucho depende de la aplicación utilizada… cuando tu cierras el navegador, o cuando dejas de utilizar la aplicación por un determinado periodo de tiempo (dependiendo de la aplicación), en ese momento TCP inicia el cierre de la sesión a través de los mensajes FIN que vimos en la clase. En el caso de los routers no existe una «finalización» de sesión, ya que de nuevo, a ellos no les interesa nada de eso, simplemente reciben paquetes, y los envían a su siguiente salto sea de quien sea y vayan a donde vayan.
Respecto a tu segunda consulta, todo depende, en algunos casos depende de cómo programaron la aplicación, algunas aplicaciones como «telnet», esperan un determinado tiempo por algún tipo de actividad en la sesión, sino existe actividad o algún intercambio de paquetes, de manera inmediata se da la orden a TCP para finalizar el uso de la aplicación y comenzar a intercambiar las tramas FIN. En TCP por su lado existe lo que se denomina «TCP Keepalive», lo que ocurre acá es que constantemente se están enviando pequeños mensajes denominados «probes» a los dispositivos vecinos para determinar si la sesión sigue activa, cuando nosotros enviamos un Keep alive, en teoría deberíamos recibir una respuesta a ese mensaje, si no recibimos respuesta del dispositivo vecino, se asume que se perdió la conexión y se procede a cerrarla. Este KeepAlive también sirve en algunas situaciones para NO cerrar la sesión a pesar que no se intercambien datos en un determinado periodo de tiempo, esto sirve por ejemplo en situaciones donde los firewalls cierran sesiones que no tengan actividad, el keepalive evitaría que se cierre la sesión.
Finalmente, en tu caso supongamos que tenemos un cliente A y un cliente B que establecen una sesión TCP, si el cliente B se reinicia por algún motivo se pierden todas las sesiones TCP que hayan existido, lógicamente el cliente A no sabrá que el cliente B sufrió un error y creerá que la sesión sigue activa, cuando el cliente B vuelta a estar online y reciba algún mensaje del cliente A, el cliente B se dará cuenta que NO existe una sesión con ese cliente y mandara una trama denominada «Reset» para que vuelva a iniciar la sesión desde 0 con ese cliente; eso es lo que ocurre por defecto con TCP. Sin embargo las aplicaciones podrían tener ciertos mecanismos para lidiar con estas pérdidas de sesión y con datos que ya fueron transmitidos previamente, por ejemplo las aplicaciones de descargas de archivos, en las tradicionales descargas que hacemos de cliente servidor, nosotros estamos descargando TODO el archivo a través de una sesión TCP (una única pieza), por lo tanto si se pierde la sesión TCP todo el archivo esta corrupto y tenemos que reiniciar nuevamente la descarga; pero por otro lado en aplicaciones de descarga de archivos como Torrents, ellos dividen el archivo en «piezas», entonces en cada sesión TCP tú vas descargando diferentes piezas del archivo, si tu sesión se pierde, no importa ya que en otra sesión TCP que hagas con la aplicación Torrent, la aplicación superior (protocolo de capa de Aplicación) se da cuenta de qué piezas ya descargaste y por ende puedes continuar descargando otra pieza del archivo lo que hace que no tengas que descargar nuevamente TODO el archivo desde 0.
Lastimosamente con TCP no hay una respuesta “absoluta”, TCP es un protocolo gigantesco que ha sufrido muchísimas actualizaciones al pasar del tiempo, esto quiere decir que no todos los dispositivos implementan al protocolo de la misma forma, además muchos sistemas operativos implementan sus propias modificaciones a TCP lo que altera el comportamiento por defecto que dicta el estándar; a esto hay que sumarle el cómo utilizan las aplicaciones y los protocolos de la capa de Aplicación a este protocolo de Transporte-
Espero haberte ayudado un poco.
Estoy atento a tus comentarios/dudas.
Saludos! =)
-
Esta respuesta fue modificada hace 3 años, 10 meses por
AlvaroM.