¿Cuál es el número máximo de conexiones TCP que puedo tener en Windows Server 2008?

11

Me gustaría tener tantas conexiones (conexiones únicas de muchos clientes diferentes) como sea humanamente posible en un servidor que se ejecuta en Windows Server 2008, para admitir una aplicación de estilo Comet. La aplicación está escrita en C #. Las conexiones no serán habladoras, solo necesitan estar abiertas (y permanecer abiertas). Comprar grandes cantidades de memoria y CPU rápidas no es un problema.

Hasta donde puedo decir, estaré limitado a 65k conexiones abiertas simultáneas por NIC, el número máximo de puertos. ¿Es esto exacto? ¿O puedo ir más allá de 65k conexiones / NIC de alguna manera? Parece que al menos hay productos de servidor para Linux que admiten cientos de miles de conexiones. ¿Cómo lo hacen?


fuente

Respuestas:

9

Puede ir más allá de las conexiones de 65k; ya que puede tener múltiples conexiones por puerto (una vez aceptado, el oyente puede conectarse a otro cliente). Un extremo u otro tiene que tener alguna diferencia, generalmente el cliente elige un puerto aleatorio. Windows está limitado por defecto a unos pocos más de 3000 de estos puertos aleatorios; así que tu cliente típico aprovechará al máximo eso. Sin embargo, es posible configurar el cliente de manera diferente, y muchos * nix están limitados a muchos más que Windows.

Hay una configuración de registro que limita el número máximo de conexiones a 16 millones. Pero hay otros problemas más prácticos que generalmente lo limitarán a menos (puede cambiar el valor del registro).

  • Windows ocupa aproximadamente 1 KB de RAM por conexión (Eso es ~ 16 GB para conexiones de 16 M); y su aplicación también tendrá que realizar un seguimiento de sus conexiones activas de alguna manera (más memoria).
  • Windows también buscará conexiones que no respondan cada 2 horas. Con conexiones de 16M, esto es aproximadamente cada 0,5 ms; ocuparía un ancho de banda significativo simplemente haciendo esas comprobaciones.
Chris S
fuente
1
@evilfred: los puertos efímeros son para conexiones TCP salientes, lo que significa que una máquina cliente usará un puerto efímero cuando se conecte a su servidor web en el puerto 80. Como dijo Chris S, una vez que se establece esa sesión, el servidor web puede establecer otro conexión en el puerto 80 desde un cliente diferente. Además, creo que mencionó el límite de puerto efímero del cliente al tratar de ser exhaustivo en su respuesta, este límite de puerto efímero del cliente no es asunto suyo, es asunto de los clientes. @ Chris S: Espero no decir mal lo que quisiste decir en tu respuesta.
joeqwerty
1
Entonces, ¿no hay un límite real en la cantidad de conexiones entrantes que un servidor puede admitir en una sola IP? ¿Cómo sabe el servidor dónde enviar los datos que recibe de un cliente si se comparte el puerto de destino?
1
No me importa el cliente.
1
@evilfred: cada sesión TCP se "gestiona" a través de lo que se denomina 4 tuplas, que es cliente ip | cliente puerto <> servidor ip | puerto del servidor. Así es como el servidor gestiona el tráfico entre cada sesión en un puerto "compartido", como el puerto 80 en un servidor web.
joeqwerty
1
Yo sé eso. Solo hay 65k puertos de servidor posibles por IP. Por lo tanto, hay un máximo de 65k sockets activos por IP.