¿Qué significa “una conexión está abierta”?

De acuerdo, creo que tengo un control sobre esta pregunta:

Cuando un protocolo de capa de aplicación se comunica, se comunica a través de un protocolo subyacente, por ejemplo, tcp o udp. (principalmente tcp). Ahora echemos un vistazo al modelo OSI:

Ahora puede ver eso directamente, debajo del protocolo de la capa de aplicación, como http, websockets, etc. Tiene la capa de presentación, y debajo de eso, tiene la capa de sesión, luego la capa tcp.

Ahora, la idea: cuando desea comunicarse con otro sistema a través de una red, necesita establecer una conexión con esa computadora, cuando se comunica a través de tcp, se llama apretón de manos tcp:

Cuando se hace esto, se dice que se establece una conexión, y lo que eso significa es que el servidor retiene cierta información sobre el cliente, por lo que cuando el cliente continúa enviando la solicitud, el servidor sigue respondiendo sin tener que realizar la triple operación. apretón de manos de nuevo, en cada solicitud,

Un ejemplo con http:

cliente A: escribe Google en un navegador valiente

a.) el navegador valiente resuelve Google a su dirección IP usando dns.

b.) brave browser inicia el apretón de manos tcp con brave browser

c.) Cuando se realiza el protocolo de enlace TCP (se establece la conexión), envía una solicitud al servidor de Google para la página de inicio de Google

Aviso: que en ese ejemplo, el navegador valiente establece esta conexión implícitamente, por eso no es obvio porque es una actividad muy transparente, sin embargo, tenga en cuenta que algunas conexiones no tienen que tener estado como tal, y no todos implementan servicios orientados a la conexión de tcp layer.

Y para una implementación rápida, tenga en cuenta que toda esta complejidad de estado en tcp se realiza en los sockets, por lo que puede probar esto con

sockets + http, sockets + websockets, sockets + (su propio protocolo de aplicación)

Una “conexión abierta” es una abstracción. Para un desarrollador de aplicaciones , implica que puede usar esa conexión para enviar o recibir datos desde el otro lado de la conexión. En el caso de WebSocket, significa que puede enviar * y * recibir datos desde el otro lado, ya que WebSocket es full-duplex (enviar y recibir al mismo tiempo). Por cierto, no todos los protocolos son full-duplex, por ejemplo, HTTP es half-duplex (enviar y recibir, pero no al mismo tiempo).

Hablando en términos generales, una “conexión abierta” se realiza típicamente siguiendo capas de conectividad estándar bien entendidas como Oluwalana señala con el modelo OSI. Se supone que cada capa (en ambos lados de la conexión) se comunica con la siguiente capa para proporcionar interoperabilidad. En cada capa, hay estructuras de datos que ayudan en la interacción entre las capas. Y, por supuesto, estas estructuras de datos suelen estar en RAM (o en hardware dedicado). Si estas estructuras de datos en ambos lados de la conexión están haciendo su trabajo y permitiendo que las aplicaciones envíen / reciban datos, entonces la conexión está “abierta”. Si hay algún problema, las estructuras de datos se pueden desasignar y consideramos que la conexión está “cerrada”. Existe la noción de “medio abierto / cerrado”, pero ese es otro hilo …

En el caso de WebSocket (que se encuentra encima de TCP), no es solo una conexión abierta. Es una conexión abierta * persistente *. Una vez abierto, se supone que debe permanecer abierto (con lo que el mundo real interfiere …). Lo que significa que puede hacer todo tipo de programación interesante basada en eventos en la web. HTTP es una conexión abierta, pero es una conexión abierta transitoria, es decir, un cliente HTTP generalmente se conecta a un servidor HTTP, realiza una solicitud de datos, la recupera (o recupera un código de error) y luego la conexión se interrumpe.

Espero que esto ayude.