2010-02-28 62 views

Respuesta

26

Esto depende en parte de su sistema operativo.

Sin embargo, no hay límite en un puerto específico. Sin embargo, existe un límite en el número de conexiones concurrentes, generalmente limitado por la cantidad de descriptores de archivos que admite el kernel (por ejemplo, 2048).

Lo que hay que recordar es que una conexión TCP es única y una conexión es un par de puntos finales (dirección IP y puerto local y remoto) así que no importa si 1000 conexiones se conectan al mismo puerto en un servidor porque las conexiones son todas únicas porque el otro extremo es diferente.

El otro límite a tener en cuenta es que una máquina solo puede realizar conexiones de salida de aproximadamente 64K o el kernel limita las conexiones, cualquiera que sea menor. Eso es porque el puerto es un número de 16 bits sin firmar (0-65535) y cada conexión de salida usa uno de esos puertos.

Puede ampliar esto dando a una máquina direcciones IP adicionales. Cada dirección IP es otro espacio de direcciones de 64K direcciones.

+0

Otra cosa para mencionar es la gama de puertos efímeros para el lado del cliente. –

+0

Al continuar mi búsqueda, llegué al siguiente enlace wrt BSD que brinda algunos buenos puntos sobre kern.maxfiles ya que cada archivo abierto, socket o fifo usa un descriptor de archivo y un servidor de producción a gran escala puede requerir fácilmente muchos miles de descriptores de archivos, dependiendo del tipo y la cantidad de servicios que se ejecutan al mismo tiempo: http://www.freebsd.org/doc/handbook/configtuning-kernel-limits.html ¿El enlace rápido no juega un papel importante? Creo que eso también juega un papel importante aquí. –

+0

Por lo tanto, parece que los descriptores de archivos es uno de los principales factores que determina el número de conexiones concurrentes en un puerto particular en un servidor en Linux. El siguiente enlace parece transmitir el método para aumentar el número máximo de descriptores de archivos en Linux - http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/ http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html –

3

Más de lo que te importa. O mejor.

  • más de su código en realidad puede manejar (por otras razones)
  • más de sus clientes van a hacer realmente
  • Más de lo que puede manejar en una sola caja por razones de rendimiento
  • más de lo necesario en una sola caja porque sus balanceadores de carga los distribuirán entre varios por razones de disponibilidad de todos modos

Puedo garantizar que es más que todo eso. Existen limitaciones de escalabilidad con un gran número de sockets, que se pueden solucionar (Google para el problema c10k). En la práctica, es posible tener más de 10.000 sockets utilizados de manera útil por un solo proceso en Linux. Si tiene múltiples procesos por servidor, puede aumentarlo nuevamente.

No es necesario utilizar un solo puerto, ya que sus equilibradores de carga dedicados podrán usar varios puertos en caso necesario.

Si está ejecutando un servicio durante muchos 10s de miles de procesos de cliente, probablemente sea bastante importante que siga funcionando, por lo tanto necesitará de todos modos varios servidores para redunion. Por lo tanto, no tendrá problemas para implementar algunos servidores más.

+1

¡Es interesante saber que los equilibradores de carga estarían haciendo varios robos en varios puertos! –

+0

Uno puede usar fácilmente cientos de miles (si estuvieran disponibles) sockets en un solo sistema (Linux). Definitivamente todos los disponibles. Estás haciendo suposiciones que son incorrectas. – lucian303

-2

Hice una prueba en Windows, realizando múltiples conexiones de bucle invertido en un solo socket. Windows se negó a asignar nada después de la marca 16372.

+6

Las conexiones de bucle tienen sus propias limitaciones. Por un lado, el sistema operativo del cliente generalmente solo usará puertos efímeros en un cierto rango (y por lo tanto, solo creará un número dado de ellos). Por otro lado, las conexiones a 127.0.0.1 (la dirección de bucle invertido) generalmente usarán la misma dirección de origen (concretamente, 127.0.0.1) para todas ellas. Tendría que vincular explícitamente el extremo local a una dirección diferente para evitar estas limitaciones. – cHao

Cuestiones relacionadas