¿El mismo puerto actúa como cliente y servidor?

¿El mismo puerto actúa como cliente y servidor?

Encuentro algo extraño en esta salida de netstat. la salida se toma usando netstat -a -n -o -p TCPel comando en win 7.

 Proto  Local Address          Foreign Address        State           PID
 TCP    127.0.0.1:55486        127.0.0.1:55487        ESTABLISHED     5808
 TCP    127.0.0.1:55487        127.0.0.1:55486        ESTABLISHED     5808

Tenga en cuenta estas dos líneas. Tanto la dirección local como la extranjera es localhost. pero ¿cómo es que están emparejados los puertos? de dos puertos 55486y 55487cuál es el puerto del servidor y cuál es el puerto del cliente?

Por lo que tengo entendido, la local-addresscolumna indica el lado del cliente de una conexión TCP y la foreign-adresscolumna indica el lado del servidor. A partir de este resultado parece que el mismo puerto se comporta como clienteyservidor.

No entiendo cómo es esto posible con TCP.

netstat con puertos emparejados

Respuesta1

Línea:TCP 127.0.0.1:55486 127.0.0.1:55487 ESTABLISHED 5808

Indica que el cliente se está conectando al puerto 55487 para el servidor mientras que el cliente usa el puerto 55486.

Línea: TCP 127.0.0.1:55487 127.0.0.1:55486 ESTABLISHED 5808

indica que el servidor se está conectando nuevamente al cliente en el puerto 55486 desde 55487.

TCP requiere el "apretón de manos de tres vías" para configurar la conexión entre un cliente y un servidor.

El cliente se conecta al servidor (parte 1 del protocolo de enlace de tres vías). El servidor responde reconociendo la conexión (parte 2). El cliente responde al reconocimiento con su propio reconocimiento (parte 3).

TL;DR: el cliente generalmente usa un puerto aleatorio para conectarse a un servidor con un puerto específico. El servidor responde a esa máquina utilizando el puerto aleatorio. El cliente y el servidor sonNOen el mismo puerto.

Respuesta2

No puedo decir cuánto entiendes de esto ahora, así que permíteme ser un poco pedante.

Claramente comprende el concepto de cliente y servidor, por lo que me sorprende que escriba: "la Local Addresscolumna indica el lado del cliente de una conexión TCP y la Foreign Addresscolumna indica el lado del servidor". Eso está mal; la Local Addresscolumna denota ellocallado de una conexión TCP y la Foreign Addresscolumna indica elextranjero(oremoto) lado. En otras palabras, la Local Addresscolumna denota el socket (TCP) que un procesoen tu ordenadorestá utilizando (es decir, un enchufe que su computadoraposee), y la Foreign Addresscolumna indica el socket al que está conectado el socket local. Como parece comprender, los procesos en su computadora pueden funcionar como servidores, por lo que los sockets locales pueden ser sockets de servidor, y luego el socket de cliente correspondiente aparecerá como "extranjero".

Las cosas empiezan a volverse confusas cuando un proceso de cliente en su computadora se conecta a un proceso de servidor en su computadora. Ahora, esta conexión representa dos sockets locales y netstatreporta una línea para cada uno; uno que muestra al cliente como local y el servidor como externo (aunque en realidad es un socket local), y el otro al revés.

Tu situación es un poco más confusa. Su servidor Jetty (proceso 5808), por supuesto, crea sockets y acepta conexiones en ellos; eso es lo que hacen los servidores. Pero está creando muchos enchufes a la vez. (Por necesidad, están en diferentes números de puerto; el sistema operativo no permitirá que coexistan múltiples sockets con el mismo protocolo y número de puerto). Y parece estar usando números de puerto aleatorios (asignados por el sistema operativo). Por ejemplo, como usted señaló, está escuchando en el puerto 55484. No estoy familiarizado con jetty, así que no sé si eso es normal.

Si examina su netstatresultado detenidamente, verá que el proceso local 184, que utiliza un socket en el puerto 8081, tiene una conexión con el proceso 5808/puerto 55482.

La parte que me parece realmente extraña es que el proceso 5808 se ha conectado.a sí mismoen varios de estos enchufes. Entonces tienes varias conexiones TCP donde se mantienen ambos sockets, no sólo en el mismo host, sinoen el mismo proceso. No creo que podamos saber con seguridad cuál es el cliente y cuál es el servidor. De hecho, supongo que es más probable que el número de puerto más bajo sea el servidor, pero eso es solo una suposición.

Respuesta3

No es una situación inusual. 127.0.0.1es la dirección IP válida que escucha su programa. El programa puede escuchar en esta dirección. El programa también puede conectarse a esta dirección. Esto cumple con la arquitectura Cliente-servidor. Tienes cliente y tienes servidor. Pueden estar en diferentes computadoras pero al mismo tiempo ambos pueden estar en una computadora.

Por ejemplo, cuando utiliza el sitio web de Google, su computadora es cliente y el servidor web de Google es servidor. Hay conexión entre su computadora y el servidor de Google.

Puede tener su propio servidor web ejecutándose en su computadora y escuchando en la interfaz 127.0.0.1. Abra su navegador y escriba 127.0.0.1; como resultado, verá la página web de su servidor web. En esta situación netstatse mostrará lo mismo.

Para responder tu pregunta:

A partir de este resultado parece que el mismo puerto se comporta como cliente y servidor.

No. Un puerto es cliente, otro es servidor. Notarlono esdecir

 TCP    127.0.0.1:55486        127.0.0.1:55486        ESTABLISHED     5808

Dice:

 TCP    127.0.0.1:55486        127.0.0.1:55487        ESTABLISHED     5808
 TCP    127.0.0.1:55487        127.0.0.1:55486        ESTABLISHED     5808

Lo cual tiene sentido.

información relacionada