Encuentro algo extraño en esta salida de netstat. la salida se toma usando netstat -a -n -o -p TCP
el 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 55486
y 55487
cuál es el puerto del servidor y cuál es el puerto del cliente?
Por lo que tengo entendido, la local-address
columna indica el lado del cliente de una conexión TCP y la foreign-adress
columna 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.
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 Address
columna indica el lado del cliente de una conexión TCP y la Foreign Address
columna indica el lado del servidor". Eso está mal; la Local Address
columna denota ellocallado de una conexión TCP y la Foreign Address
columna indica elextranjero(oremoto) lado. En otras palabras, la Local Address
columna denota el socket (TCP) que un procesoen tu ordenadorestá utilizando (es decir, un enchufe que su computadoraposee), y la Foreign Address
columna 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 netstat
reporta 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 netstat
resultado 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.1
es 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 netstat
se 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.