socket que puertos protocolos logicos listado lista informatica funciones alternativos networking tomcat

networking - que - El mejor rango de números de puertos TCP para aplicaciones internas



puertos y sockets (3)

Decidí descargar los números de puerto asignados de IANA, filtrar los puertos usados ​​y ordenar cada rango "No asignado" en orden de la mayoría de los puertos disponibles, descendiendo. Esto no funcionó, ya que el archivo csv tiene rangos marcados como "Sin asignar" que se superponen a otras reservas de números de puerto. Extendí manualmente los rangos de números de puerto asignados , dejándome con una lista de todos los números de puerto asignados. Luego ordené esa lista y generé mi propia lista de rangos no asignados.

Como esta página de stackoverflow.com ocupaba un lugar muy alto en mi búsqueda sobre el tema, calculé que publicaría los rangos más grandes aquí para cualquier persona que esté interesada. Estos son para TCP y UDP donde el número de puertos en el rango es de al menos 500.

Total Start End 829 29170 29998 815 38866 39680 710 41798 42507 681 43442 44122 661 46337 46997 643 35358 36000 609 36866 37474 596 38204 38799 592 33657 34248 571 30261 30831 563 41231 41793 542 21011 21552 528 28590 29117 521 14415 14935 510 26490 26999

Fuente (a través del botón de descarga CSV):

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

Trabajo en un lugar donde cada una de nuestras aplicaciones internas se ejecuta en una instancia individual de Tomcat y utiliza un puerto TCP específico. ¿Cuál sería el mejor rango de puertos de IANA para estas aplicaciones a fin de evitar colisiones de números de puertos con cualquier otro proceso en el servidor?

Basado en http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , estas son las opciones tal como las veo actualmente:

  1. Puertos del sistema (0-1023): no quiero utilizar ninguno de estos puertos porque el servidor puede estar ejecutando servicios en puertos estándar en este rango
  2. Puertos de usuario (1024-49151): Dado que las aplicaciones son internas, no pretendo solicitar a IANA que reserve un número para ninguna de nuestras aplicaciones. Sin embargo, me gustaría reducir la probabilidad de que el mismo puerto sea utilizado por otro proceso, por ejemplo, Oracle Net Listener en 1521.
  3. Puertos dinámicos y / o privados (49152-65535): este rango es ideal para números de puerto personalizados. Mi única preocupación es si esto sucediera:

    a. Configuro una de mis aplicaciones para usar el puerto X
    segundo. La aplicación está inactiva por unos minutos u horas (dependiendo de la naturaleza de la aplicación), dejando el puerto sin usar por un tiempo,
    do. El sistema operativo asigna el número de puerto X a otro proceso, por ejemplo, cuando ese proceso actúa como un cliente que requiere una conexión TCP a otro servidor. Esto tiene éxito dado que se encuentra dentro del rango dinámico y X no se utiliza actualmente en lo que se refiere al sistema operativo, y
    re. La aplicación no se inicia porque el puerto X ya está en uso


No puedo entender por qué te importaría. Además de la regla de privilegio "no usar puertos por debajo de 1024", ¡debería poder usar cualquier puerto porque sus clientes deberían ser configurables para hablar con cualquier dirección IP y puerto!

Si no lo son, entonces no se han hecho muy bien. Vuelve y hazlos correctamente :-)

En otras palabras, ejecute el servidor en la dirección IP X y el puerto Y luego configure clientes con esa información. Luego, si encuentra que debe ejecutar un servidor diferente en X que entra en conflicto con su Y , simplemente vuelva a configurar su servidor y clientes para usar un nuevo puerto. Esto es cierto ya sea que sus clientes sean códigos o personas que digiten direcciones URL en un navegador.

Yo, como usted, no trataría de obtener los números asignados por IANA, ya que se supone que es para servicios tan comunes que muchos, muchos entornos los usarán (piense en SSH o FTP o TELNET).

Su red es su red y, si quiere sus servidores en el puerto 1234 (o incluso los puertos TELNET o FTP para ese asunto), esa es su tarea. Por ejemplo, en nuestra área de desarrollo de mainframe, el puerto 23 se usa para el servidor de la terminal 3270, que es una bestia muy diferente a telnet. Si desea hacer telnet en el lado UNIX del mainframe, use el puerto 1023. Eso a veces es molesto si usa clientes telnet sin especificar el puerto 1023, ya que lo conecta a un servidor que no sabe nada del protocolo telnet. Tenemos que romper fuera del cliente de telnet y hacerlo correctamente:

telnet big_honking_mainframe_box.com 1023

Si realmente no puede configurar el lado del cliente configurable, elija uno en el segundo rango, como 48042, y simplemente úselo, declarando que cualquier otro software en esos cuadros (incluidos los que se agreguen en el futuro) tiene que mantenerse fuera de su camino .


Respuesta corta: use un puerto de usuario no asignado

Sobre la respuesta del cumplidor: seleccione e implemente una solución de descubrimiento de recursos. Haga que el servidor seleccione un puerto privado dinámicamente. Haga que los clientes usen el descubrimiento de recursos.

El riesgo de que un servidor falle porque el puerto en el que quiere escuchar no está disponible es real; al menos me ha pasado a mí. Otro servicio o cliente podría llegar primero.

Puede reducir casi por completo el riesgo de un cliente evitando los puertos privados, que se entregan dinámicamente a los clientes.

El riesgo de que otro servicio sea mínimo si usa un puerto de usuario. El riesgo de un puerto no asignado es que otro servicio que se configura (o dinámicamente) usa ese puerto. Pero al menos eso es probablemente bajo tu control.

El enorme documento con todas las asignaciones de puertos, incluidos los Puertos de usuario, está aquí: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt busque el token Sin asignar .