Hay muchas piezas diferentes en juego. Como una conexión está definida por (Src IP, Src Port, Dest IP, Dest Port)
tuplas, se permiten 65536^2 conexiones entre dos pares dados en un momento dado: de 1 a 1, de 1 a 2, ... de 1 a 65535, etc. Y eso es solo entre dos pares: por supuesto, puede tener muchas conexiones abiertas para muchos compañeros al mismo tiempo.
PERO, la mayoría de los sistemas operativos limitan la cantidad de descriptores/identificadores de archivo abiertos por proceso. Este límite era históricamente bajo (20), pero ahora a menudo es más alto (1024 en mi sistema, ulimit -a
mostrará los límites por proceso en bash(1)
).
Además de los límites de setrlimit(3)
en los sistemas Unix, también existen límites para todo el sistema; /proc/sys/fs/file-max
en un sistema Linux informará la cantidad máxima de archivos abiertos permitidos en todo el sistema. (Esto es 596118 en mi sistema.) Otros sistemas tendrán límites diferentes.
Y, puede haber un límite en el número de conexiones abiertas impuestas por un stateful firewall en el medio. Dado que cada estado requiere memoria en las tablas del firewall, cualquiera probablemente imponga algún límite arbitrario para evitar quedarse sin memoria.
'65536^2' es el número de conexiones entre ** 2 especificado ** IP, ¿verdad? – DriverBoy
No es necesario aumentar el número de descriptores de archivos para usar muchos puertos porque los sockets LINGER están activos después de que se cierran. – ikegami
@DriverBoy, sí, ese es el máximo teórico entre dos direcciones IP. En la práctica, el máximo puede ser más bajo. – ikegami