¿Cuál es el número máximo teórico de conexiones TCP abiertas que puede tener una máquina Linux moderna?

Resuelto fadedbee asked hace 14 años • 3 respuestas

Suponiendo un rendimiento infinito del hardware, ¿puede una caja Linux admitir >65536 conexiones TCP abiertas?

Entiendo que la cantidad de puertos efímeros (<65536) limita la cantidad de conexiones desde una IP local a un puerto en una IP remota.

La tupla (ip local, puerto local, ip remota, puerto remoto) es lo que define de forma única una conexión TCP; ¿Implica esto que se pueden admitir más de 65K conexiones si más de uno de estos parámetros está libre? por ejemplo, conexiones a un único número de puerto en múltiples hosts remotos desde múltiples IP locales.

¿Existe otro límite de 16 bits en el sistema? ¿Quizás el número de descriptores de archivos?

fadedbee avatar Feb 25 '10 15:02 fadedbee
Aceptado

Un único puerto de escucha puede aceptar más de una conexión simultáneamente.

Hay un límite de '64K' que se cita con frecuencia, pero es por cliente por puerto de servidor y es necesario aclararlo.

Cada paquete TCP/IP tiene básicamente cuatro campos para direccionar. Estos son:

source_ip source_port destination_ip destination_port
<----- client ------> <--------- server ------------>

Dentro de la pila TCP, estos cuatro campos se utilizan como una clave compuesta para hacer coincidir paquetes con conexiones (por ejemplo, descriptores de archivos).

Si un cliente tiene muchas conexiones al mismo puerto en el mismo destino, entonces tres de esos campos serán iguales; solo source_portvarían para diferenciar las diferentes conexiones. Los puertos son números de 16 bits, por lo tanto, el número máximo de conexiones que cualquier cliente puede tener a cualquier puerto de host determinado es 64K.

Sin embargo, varios clientes pueden tener cada uno hasta 64K de conexiones al puerto de algún servidor, y si el servidor tiene múltiples puertos o tiene múltiples servidores, entonces puede multiplicar eso aún más.

Entonces, el verdadero límite son los descriptores de archivos. A cada conexión de socket individual se le asigna un descriptor de archivo, por lo que el límite es en realidad la cantidad de descriptores de archivos que el sistema ha sido configurado para permitir y los recursos para manejar. El límite máximo suele ser superior a 300 K, pero se puede configurar, por ejemplo, con sysctl .

Los límites realistas de los que se jactan las cajas normales son de alrededor de 80K, por ejemplo, servidores de mensajería Jabber de un solo subproceso.

Will avatar Feb 25 '2010 09:02 Will

Si está pensando en ejecutar un servidor y tratar de decidir cuántas conexiones se pueden atender desde una máquina, es posible que desee leer sobre el problema del C10k y los problemas potenciales que implica atender a muchos clientes simultáneamente.

Spaceghost avatar Sep 07 '2010 18:09 Spaceghost