Trabajo en un lugar donde cada una de nuestras aplicaciones internas se ejecuta en una instancia individual de Tomcat y usa 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 puerto 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 como las veo actualmente:
- Puertos del sistema (0-1023): no quiero usar ninguno de estos puertos porque el servidor puede estar ejecutando servicios en puertos estándar en este rango
- 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 otro proceso utilice el mismo puerto, por ejemplo, Oracle Net Listener en 1521.
- 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
b. 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,
c. 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 respecta al sistema operativo, y
d. La aplicación no se inicia porque el puerto X ya está en uso
fuente
Respuestas:
No veo por qué te importaría. Aparte de la regla de privilegio "no usar puertos por debajo de 1024", debería poder utilizar cualquier puerto porque sus clientes deberían ser configurables para comunicarse con cualquier dirección IP y puerto.
Si no es así, no se ha hecho muy bien. Vuelve y hazlos correctamente :-)
En otras palabras, ejecute el servidor en la dirección IP
X
y el puerto yY
luego configure los clientes con esa información. Luego, si encuentra que debe ejecutar un servidor diferenteX
que entre en conflicto con el suyoY
, simplemente vuelva a configurar su servidor y sus clientes para usar un nuevo puerto. Esto es cierto ya sea que sus clientes sean código o personas que ingresen URL en un navegador.Yo, como usted, no trataría de que IANA me asignara números, ya que se supone que es para servicios tan comunes que muchos, muchos entornos los usarán (piense en SSH, FTP o TELNET).
Su red es su red y, si desea que sus servidores estén en el puerto 1234 (o incluso en los puertos TELNET o FTP), eso es asunto suyo. Por ejemplo, en nuestra área de desarrollo de mainframe, el puerto 23 se usa para el servidor de terminal 3270, que es una bestia muy diferente a telnet. Si desea hacer telnet al lado UNIX del mainframe, use el puerto 1023. 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 telnet y hágalo correctamente:
Si realmente no puede hacer que el lado del cliente sea configurable, elija uno en el segundo rango, como 48042, y utilícelo, declarando que cualquier otro software en esas cajas (incluido cualquier agregado en el futuro) debe mantenerse fuera de su camino .
fuente
Decidí descargar los números de puerto asignados de IANA, filtrar los puertos usados y ordenar cada rango "No asignado" en el orden de la mayoría de los puertos disponibles, en orden descendente. Esto no funcionó, ya que el archivo csv tiene rangos marcados como "Sin asignar" que se superponen con otras reservas de números de puerto. Expandí 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.
Dado que esta página de stackoverflow.com ocupó un lugar muy alto en mi búsqueda sobre el tema, pensé que publicaría los rangos más grandes aquí para cualquier otra persona que esté interesada. Estos son para TCP y UDP donde la cantidad de puertos en el rango es al menos 500.
Fuente (a través del botón de descarga de CSV):
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
fuente
44100-44199
parece fácil de recordar porque el muestreo de audio 44100 tanto en udp como en tcp es seguro. ¿Tanto el udp 44100-44199 como el tcp 44100-44199 son gratuitos?Respuesta corta: use un puerto de usuario no asignado
La respuesta del triunfador: seleccione e implemente una solución de descubrimiento de recursos. Haga que el servidor seleccione un puerto privado de forma dinámica. Haga que los clientes utilicen 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. Otro servicio o un cliente pueden 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 provenga de otro servicio es mínimo si utiliza un puerto de usuario. El riesgo de un puerto no asignado es solo que otro servicio esté configurado (o dinámicamente) use ese puerto. Pero al menos eso probablemente esté 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 .
fuente