Un solo puerto de escucha puede aceptar más de una conexión simultáneamente.
hay un límite '64K' que se cita a menudo, pero que es por cliente al puerto del servidor, y necesita aclarar.
Cada paquete TCP/IP tiene básicamente cuatro campos para direccionamiento; estos son:
source_ip source_port destination_ip destination_port
< client > < server >
el interior de la pila TCP, estos cuatro campos se utilizan como una clave compuesta de hacer coincidir los paquetes a las conexiones (por ejemplo, los descriptores de fichero).
Si un cliente tiene muchas conexiones al mismo puerto en el mismo destino, tres de esos campos serán los mismos: solo source_port
varía para diferenciar las diferentes conexiones. Los puertos son números de 16 bits, por lo tanto, la cantidad máxima de conexiones que un cliente determinado puede tener con un puerto de host determinado es de 64 K.
Sin embargo, varios clientes pueden tener hasta 64K conexiones con el puerto de cada servidor, y si el servidor tiene múltiples puertos o cualquiera de ellos es multi-hogar, puede multiplicarlo aún más.
Así que el límite real 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 realmente el número de descriptores de archivo que el sistema ha sido configurado para permitir y los recursos manejar. El límite máximo suele ser superior a 300 K, pero se puede configurar, p. con sysctl.
Los límites realistas de los que se jactan para las cajas normales son alrededor de 80 K, por ejemplo, los servidores de mensajería Jabber de subproceso único.
En teoría, puede tener más de 64K conexiones salientes si (a) usa SO_REUSEADDR y (b) se dirige a diferentes direcciones IP de destino. Pero los límites de memoria del kernel probablemente te detengan primero. – Darron
@Darron ¿Pensé que SO_REUSEADDR era para servidores vinculantes cuando se reinicia? – Will
Sí, eso también. Básicamente relaja los controles tempranos para conflictos de direcciones para nuevos sockets. – Darron