tener telefono solo servicios puertos puerto puede numero movil mismo microsoft dispositivo cuentas con como altos sockets tcp udp port communication

sockets - telefono - se puede tener dos whatsapp con el mismo numero



¿Pueden dos aplicaciones escuchar el mismo puerto? (16)

¿Se pueden unir dos aplicaciones en la misma máquina al mismo puerto y dirección IP? Yendo un paso más allá, ¿puede una aplicación escuchar solicitudes provenientes de una determinada IP y la otra a otra IP remota? Sé que puedo tener una aplicación que comience con dos subprocesos (o bifurcaciones) para tener un comportamiento similar, pero ¿pueden dos aplicaciones que no tienen nada en común hacer lo mismo?


Cuando crea una conexión TCP, solicita conectarse a una dirección TCP específica, que es una combinación de una dirección IP (v4 o v6, dependiendo del protocolo que esté usando) y un puerto.

Cuando un servidor escucha las conexiones, puede informar al kernel que le gustaría escuchar una dirección IP y un puerto específicos, es decir, una dirección IP, o en todas las direcciones IP de los hosts, cada una en un puerto específico, que es efectivamente escuchando en muchas "direcciones TCP" diferentes (por ejemplo, 192.168.1.10:8000, 127.0.0.1:8000, etc.)

No, no puede tener dos aplicaciones escuchando en la misma "dirección TCP", porque cuando llega un mensaje, ¿cómo sabría el kernel a qué aplicación enviar el mensaje?

Sin embargo, en la mayoría de los sistemas operativos puede configurar varias direcciones IP en una sola interfaz (por ejemplo, si tiene 192.168.1.10 en una interfaz, también puede configurar 192.168.1.11, si nadie más en la red lo está usando) y, en esos casos, podría tener aplicaciones separadas que escuchen en el puerto 8000 en cada una de esas dos direcciones IP.


En principio, no.

No está escrito en piedra; pero es la forma en que se escriben todas las API: la aplicación abre un puerto, recibe un identificador y el sistema operativo lo notifica (a través de ese identificador) cuando llega una conexión de cliente (o un paquete en el caso de UDP).

Si el SO permitiera que dos aplicaciones abran el mismo puerto, ¿cómo sabría cuál notificar?

Pero ... hay maneras de evitarlo:

  1. Como noted Jed, podría escribir un proceso ''maestro'', que sería el único que realmente escucha en el puerto y notifica a los demás, utilizando cualquier lógica que desee para separar las solicitudes de los clientes.
    • En Linux y BSD (al menos) puede configurar reglas de "reasignación" que redirigen los paquetes desde el puerto "visible" a diferentes (donde las aplicaciones están escuchando), según cualquier criterio relacionado con la red (tal vez red de origen, o algunos formas simples de balanceo de carga).

He intentado lo siguiente, con socat :

socat TCP-L:8080,fork,reuseaddr -

Y aunque no he hecho una conexión al socket, no puedo escuchar dos veces en el mismo puerto, a pesar de la opción reuseaddr .

Recibo este mensaje (que esperaba antes):

2016/02/23 09:56:49 socat[2667] E bind(5, {AF=2 0.0.0.0:8080}, 16): Address already in use


No. Solo una aplicación puede vincularse a un puerto a la vez, y el comportamiento si el enlace es forzado es indeterminado.

Con los sockets de multidifusión, que no parecen estar cerca de lo que desea, más de una aplicación se puede enlazar a un puerto siempre que SO_REUSEADDR esté configurado en las opciones de cada socket.

Puede lograr esto escribiendo un proceso "maestro", que acepta y procesa todas las conexiones, luego las entrega a sus dos aplicaciones que necesitan escuchar en el mismo puerto. Este es el enfoque que los servidores web y tales toman, ya que muchos procesos necesitan escuchar 80.

Más allá de esto, nos estamos metiendo en detalles específicos: usted etiquetó tanto TCP como UDP, ¿cuál es? Además, ¿qué plataforma?


Otra forma es usar un programa que escucha en un puerto que analiza el tipo de tráfico (ssh, https, etc.) que redirige internamente a otro puerto en el que escucha el servicio "real".

Por ejemplo, para Linux, sslh: https://github.com/yrutschle/sslh


Para TCP, no. Solo puede tener una aplicación escuchando en el mismo puerto a la vez. Ahora, si tuviera 2 tarjetas de red, podría hacer que una aplicación escuche en la primera IP y la segunda en la segunda IP utilizando el mismo número de puerto.

Para UDP (Multicasts), múltiples aplicaciones pueden suscribirse al mismo puerto.


Puede hacer que dos aplicaciones escuchen el mismo puerto en la misma interfaz de red.

Solo puede haber un zócalo de escucha para la interfaz de red y el puerto especificados, pero ese zócalo se puede compartir entre varias aplicaciones.

Si tiene un zócalo de escucha en un proceso de solicitud y lo fork , el zócalo se heredará, por lo que técnicamente ahora habrá dos procesos escuchando el mismo puerto.


Puede tener una aplicación escuchando en un puerto para una interfaz de red. Por lo tanto usted podría tener:

  1. httpd escucha en una interfaz de acceso remoto, por ejemplo, 192.168.1.1:80
  2. Otro demonio escuchando en 127.0.0.1:80

El caso de uso de ejemplo podría ser usar httpd como un equilibrador de carga o un proxy.


Sí.

  1. Múltiples sockets TCP de escucha, todos enlazados al mismo puerto, pueden coexistir, siempre y cuando todos estén enlazados a diferentes direcciones IP locales. Los clientes pueden conectarse a lo que necesiten. Esto excluye 0.0.0.0 ( INADDR_ANY ).

  2. Múltiples sockets aceptados pueden coexistir, todos aceptados desde el mismo socket de escucha, todos mostrando el mismo número de puerto local que el socket de escucha.

  3. Múltiples sockets UDP vinculados al mismo puerto pueden coexistir siempre que se cumpla la misma condición que en (1) o que todos tengan la opción SO_REUSEADDR establecida antes del enlace.

  4. Los puertos TCP y los puertos UDP ocupan diferentes espacios de nombres, por lo que el uso de un puerto para TCP no impide su uso para UDP, y viceversa.

Referencia: Stevens & Wright, TCP / IP Illustrated, Volumen II.


Sí.

De este artículo:
SO_REUSEPORT

La nueva opción de socket permite que múltiples sockets en el mismo host se unan al mismo puerto


Si al menos una de las IP remotas ya es conocida, estática y está dedicada a hablar solo con una de sus aplicaciones, puede usar la regla de iptables (table nat, chain PREROUTING) para redirigir el tráfico entrante desde esta dirección al puerto local "compartido" para Cualquier otro puerto donde la aplicación apropiada realmente escuche.


Si por aplicaciones te refieres a múltiples procesos, entonces sí, pero generalmente NO. Por ejemplo, el servidor Apache ejecuta varios procesos en el mismo puerto (generalmente 80). Se realiza al designar uno de los procesos para vincularlo al puerto y luego usar ese proceso para hacer transferencias a varios procesos que aceptan conexiones.


Si y no. Solo una aplicación puede escuchar activamente en un puerto. Pero esa aplicación puede legar su conexión a otro proceso. Así que podrías tener múltiples procesos trabajando en el mismo puerto.


Respuesta corta:

Siguiendo la respuesta dada here . Puede tener dos aplicaciones escuchando en la misma dirección IP y número de puerto, siempre que uno de los puertos sea un puerto UDP, mientras que otro sea un puerto TCP.

Explicación:

El concepto de puerto es relevante en la capa de transporte de la pila TCP / IP, por lo tanto, mientras esté usando diferentes protocolos de capa de transporte de la pila, puede tener múltiples procesos escuchando en la misma <ip-address>:<port> combinación.

Una duda que tienen las personas es que si dos aplicaciones se ejecutan en la misma combinación <ip-address>:<port> , ¿cómo distinguirá un cliente que se ejecuta en una máquina remota entre las dos? Si observa el encabezado del paquete de la capa IP ( https://en.wikipedia.org/wiki/IPv4#Header ), verá que los bits 72 a 79 se utilizan para definir el protocolo, así es como se puede hacer la distinción.

Sin embargo, si desea tener dos aplicaciones en la misma combinación <ip-address>:<port> TCP, entonces la respuesta es no (un ejercicio interesante será lanzar dos VM, darles la misma dirección IP, pero diferentes direcciones MAC, y ver Qué sucede: notará que algunas veces VM1 obtendrá paquetes, y otras veces VM2 recibirá paquetes (dependiendo de la actualización de caché ARP).

Siento que al hacer que dos aplicaciones se ejecuten en la misma <op-address>:<port> usted quiere lograr algún tipo de equilibrio de carga. Para esto, puede ejecutar las aplicaciones en diferentes puertos y escribir reglas de tabla de IP para bifurcar el tráfico entre ellos.

Ver también la respuesta de @ user6169806.


Sí, definitivamente . Hasta donde recuerdo Desde el kernel versión 3.9 (No estoy seguro de la versión) en adelante, se introdujo el soporte para SO_REUSEPORT . SO_RESUEPORT permite enlazar exactamente con el mismo puerto y dirección, siempre que el primer servidor establezca esta opción antes de enlazar su socket.

Funciona tanto para TCP como para UDP . Consulte el enlace para más detalles: SO_REUSEPORT

Nota : la respuesta aceptada ya no es válida según mi opinión.


Sí (para TCP) puede hacer que dos programas escuchen en el mismo socket, si los programas están diseñados para hacerlo. Cuando el primer programa crea el socket, asegúrese de que la opción SO_REUSEADDR esté establecida en el socket antes de bind() . Sin embargo, esto puede no ser lo que quieres. Lo que esto hace es que una conexión TCP entrante se dirigirá a uno de los programas, no a ambos, por lo que no duplica la conexión, solo permite que dos programas atiendan la solicitud entrante. Por ejemplo, los servidores web tendrán múltiples procesos escuchando en el puerto 80, y el O / S envía una nueva conexión al proceso que está listo para aceptar nuevas conexiones.

SO_REUSEADDR

Permite que otros sockets se bind() a este puerto, a menos que ya haya un socket de escucha activo enlazado al puerto. Esto le permite sortear los mensajes de error de "Dirección que ya está en uso" cuando intenta reiniciar su servidor después de un bloqueo.