¿Existe un límite estricto de 65536 conexiones TCP abiertas por dirección IP en Linux?

23

¿Existe un límite estricto de 65536 conexiones TCP abiertas por dirección IP en Linux? Leí en alguna parte que había, pero alguien está pidiendo confirmación y simplemente no puedo encontrarla.

¿Me parece recordar que fue algo acerca de que los descriptores de archivo eran un entero de 16 bits que lo limita de alguna manera?

¿O es esto hokum, y simplemente no hay límite más que cuán fornido es el servidor?

Chris
fuente

Respuestas:

35

Puede estar pensando en la cantidad de puertos. Hay 65536 puertos disponibles en el TCP en las versiones actuales de IPv4. Esto no es solo una limitación de Linux, es parte del protocolo. Su dirección IP identifica su máquina y el puerto identifica un programa en su máquina.

Pero, el número de conexiones no está limitado por eso. Una conexión consta de 5 piezas de información, en geek hablan una tupla de 5. Está determinado por el protocolo (TCP, UDP), la dirección IP local y el puerto, y la dirección IP remota y el puerto. Entonces, toma un servidor web. Puede dar servicio a muchas conexiones en el mismo puerto (probablemente 80). Su servidor web puede incluso soportar múltiples conexiones a la misma máquina cliente. Digamos que te estás conectando a google.com desde dos ventanas. Su máquina elegirá un puerto no utilizado para cada conexión. Por lo tanto, el servidor de Google deberá realizar un seguimiento de (TCP, google.com, 80, yourmachine, someport1) y (TCP, google.com, 80, yourmachine, someport2). En algún momento te toparías con límites, pero no es un límite difícil y depende mucho del sistema.

Y sí, cada socket es un descriptor de archivo, pero no todas las máquinas usan short para la tabla fd. En mi sistema, un sistema no sintonizado en absoluto, cat /proc/sys/fs/file-maxda 323997. Estoy seguro de que podría aumentarlo si fuera necesario.

Entonces, hay un límite de 65336, pero tiene que ver con el direccionamiento, no con el número de conexiones. El número de conexiones es limitado, pero más por la configuración del sistema y la cantidad de memoria que tiene.

Rich Homolka
fuente
2
Entonces, veamos la tupla de 5: aunque estoy limitado a 65536 puertos, eso solo me limita a 64k conexiones por dirección IP entrante , ¿es correcto? Entonces, ¿el único límite son los descriptores de archivo, pero no son necesariamente de 16 bits? Entonces, ¿básicamente lo que estás diciendo es que no hay límites?
Chris
1
sí. Ver también: en.wikipedia.org/wiki/Transmission_Control_Protocol sección "Uso de recursos"
user12889
3
@ Chris: 64k conexiones por dirección IP entrante en un solo puerto local , sí.
Grawity
@ Chris lo que dijo Grawity. La tupla de 5 tendrá hasta (pero nunca alcanzará) 65536 combinaciones con la otra máquina. En realidad, nunca llegará allí porque una máquina no puede usar ningún puerto antiguo para una conexión; algunos están reservados por razones específicas.
Rich Homolka