2008-10-20 7 views
23

He escrito un servicio WCF alojado por un servicio de Windows y necesita escuchar en un puerto TCP/IP conocido. ¿Desde qué rango puedo asignar con seguridad un puerto para usar dentro de mi organización? Ese puerto se integrará en los archivos de configuración para el servicio y los clientes que están consumiendo el servicio.Asignación de puertos TCP/IP para uso de aplicaciones internas

+0

Duplicado de http://stackoverflow.com/questions/10476987/best-tcp-port-number-range-for-internal-applications – matt2000

+0

Esta es una pregunta útil, y otros respondedores hacen un buen caso que el "aceptado "respuesta (por Jorge Ferreira) es incorrecta o al menos incompleta, al igual que las respuestas a la pregunta de que este es un duplicado. ¿Es posible "no aceptar" esa respuesta? –

Respuesta

26

elegir un número de puerto 49152 a 65535.

IANA publica una lista de los puertos asignados actualmente.

http://www.iana.org/assignments/port-numbers

El dinámico y/o los puertos privados son los de 49152 a 65535. Este es el rango desde donde se debe escoger un puerto para sus aplicaciones en la casa. Por supuesto, se puede usar cualquier puerto que pertenezca a uno de los rangos no asignados en la lista publicada. Pero tenga en cuenta que al elegir un número de puerto de esos rangos no asignados no hay ninguna garantía de que el puerto que elija no será un puerto reservado en el futuro.

NÚMEROS DE PUERTO SIN ASIGNACIÓN NO DEBE SER UTILIZADOS. LA IANA ASIGNARÁ EL NÚMERO PARA EL PUERTO DESPUÉS DE QUE SE HAYA APROBADO SU APLICACIÓN .

Y asegúrese de que el número de puerto que elija se puede configurar como ha afirmado:

Ese puerto se incrusta en las archivos de configuración para el servicio y los clientes que están consumiendo el servicio .

Esto evitará dolores de cabeza en caso de que algún otro software de terceros que no pueda tocar esté utilizando su número de puerto. Si eso sucede, simplemente sigue adelante y cámbialo en el archivo de configuración y simplemente funciona.

+5

_ Por otro lado, el software de aplicación NO DEBE asumir que un número de puerto específico en el rango de Puertos dinámicos siempre estará disponible para la comunicación en todo momento, y un número de puerto en ese rango ** NO DEBE ** ser utilizado como un identificador de servicio. [RFC 6335] (http://tools.ietf.org/html/rfc6335#page-20) – Bolu

+2

Bolu es correcto. ** No use un número de puerto dentro del rango dinámico **. Ver mi explicación en otro lugar en esta página. – adrianwadey

+0

No es sabio. Como el sistema puede elegir asignar el puerto que está utilizando en un momento dado. Por lo tanto, su servidor podría parecer que funciona solo para fallar en una última carga. – rxantos

0

Aquí hay una buena list of common application ports. Haga su propia elección en un espacio vacío. Tal vez también debería escanear su red para cualquier aplicación especial interna.

Normalmente hay puertos de números altos disponibles y yo los sugeriría, pero podrían ser bloqueados por firewalls.

+0

el enlace está roto. Corrija – German

3

Además de las otras sugerencias sobre cómo elegir un puerto de aplicación común, le sugiero que configure el puerto dentro de su aplicación. Los números de puerto codificados son una mala idea, especialmente si más tarde encuentra un conflicto de puerto con otra aplicación y necesita cambiar el suyo.

4

Respuesta corta: evite todo hasta 1023 o incluso 49152, y pruebe el puerto elegido contra servicios en su red.

Si ha tomado las precauciones razonables que parece tener (poner el número de puerto en un archivo de configuración), no debería ser una interrupción enorme si más tarde descubre un conflicto.

Pero (para que pueda agregar algo a las otras sugerencias que aparecieron mientras escribía) ¡asegúrese de que sea fácil de cambiar! Si está en archivos de configuración, hazlo obvio. Documentarlo y señalarlo en la resolución de problemas. Es el tipo de problema que podría salir mal, por lo que es fácil depurarlo si es necesario cambiarlo.

+7

Espera, me estás diciendo que * evite * los puertos por encima de 49152, pero la respuesta principal dice que debes * solo * elegir los puertos 49152 y superiores. ¿Qué? –

+1

@CamiloMartin Vea también la respuesta de adrianwadey. La respuesta principal es un buen consejo para las aplicaciones punto a punto (por ejemplo, BitTorrent), ya que tienden a utilizar puertos dinámicos de todos modos, a menudo con algún tipo de servicio de descubrimiento; no tanto para las aplicaciones cliente-servidor, que necesitan un número de puerto razonablemente estable: incluso si el número de puerto está almacenado en un archivo de configuración, necesita reconfigurar el servidor y sus clientes cada vez que cambie. – criptych

0

Como nota, recuerde comprobar esos puertos mediante netstat/a/n para ver si está utilizando otra aplicación o no. Me parece que Vista usó el 49152 ... por alguna razón de nivel de aplicación. Básicamente, debido a que la mayoría del oyente de nivel del sistema no implementa el uso compartido de puertos, es mucho más seguro utilizar los puertos que no se utilizan en absoluto.

tienen buen día de programación Amir

17

Puertos 0-1023 son los puertos conocidos y son asignados por la IANA. Estos solo deben usarse para los protocolos asignados en redes públicas.

Los puertos 1024-65535 solían llamarse números de puerto registrados (consulte rfc1700) pero ahora se dividen en dos áreas (consulte rfc6335).

Los puertos 1024-49151 son los puertos de usuario y son los que se utilizan para sus propios protocolos.

Los puertos 49152-65535 son los puertos dinámicos y no se deben prescribir a un protocolo.

Los puertos de usuario se pueden utilizar para cualquier protocolo, pero hay un número finito, por lo que su uso entrará en conflicto con el uso de otra persona en alguna red en alguna parte. IANA mantiene un registro de los números de puerto registrados (0-49151). Si su protocolo se utilizará en redes públicas, entonces debe buscar registrarlo con IANA. Si solo lo está usando dentro de su propia red, seleccione un puerto dentro de esta área (1024-49151) y verifique ese puerto con el IANA register para asegurarse de que no sea utilizado por un protocolo que pueda usarse en su red. Para uso privado, probablemente sea mejor elegir un número que está asignado a un protocolo que usted sabe que no se usará, que elegir uno que no esté asignado y que pueda asignarse en el futuro.

No utilice un número de puerto dentro del rango dinámico. Estos puertos son asignados por el sistema operativo, dinámicamente y de forma algo aleatoria. Si abre una conexión de cliente (usando bind() con puerto = 0) se le asignará un puerto no utilizado desde el rango dinámico. No hay forma de garantizar que un puerto en este rango siempre será libre para su protocolo.

Cuestiones relacionadas