Una singola porta di ascolto può accettare più di una connessione contemporaneamente.
C'è un limite '64K' che viene spesso citato, ma quello è per client per porta del server e deve essere chiarito.
Ogni pacchetto TCP/IP ha fondamentalmente quattro campi per l'indirizzamento; questi sono:
source_ip source_port destination_ip destination_port
< client > < server >
All'interno dello stack TCP, questi quattro campi sono utilizzati come chiave composta da abbinare pacchetti ai collegamenti (ad esempio descrittori di file).
Se un client ha molte connessioni alla stessa porta sulla stessa destinazione, allora tre di questi campi saranno uguali: solo source_port
varia per differenziare le diverse connessioni. Le porte sono numeri a 16 bit, quindi il numero massimo di connessioni che un dato client può avere su una data porta host è 64K.
Tuttavia, più client possono avere fino a 64 KB di connessioni ad alcune porte del server, e se il server ha più porte o è multi-homed, è possibile moltiplicare ulteriormente.
Quindi il vero limite sono i descrittori di file. Ad ogni singola connessione socket viene assegnato un descrittore di file, quindi il limite è in realtà il numero di descrittori di file che il sistema è stato configurato per consentire e le risorse da gestire. Il limite massimo è in genere superiore a 300 K, ma è configurabile per es. con sysctl.
I limiti realistici che si possono vantare per le normali scatole sono circa 80 K per esempio i server di messaggistica Jabber a thread singolo.
È possibile avere in teoria più di 64.000 connessioni in uscita se (a) si utilizza SO_REUSEADDR e (b) si scelgono indirizzi IP di destinazione diversi. Ma i limiti della memoria del kernel probabilmente ti fermeranno prima. – Darron
@Darron pensavo che SO_REUSEADDR fosse per i server che si legavano al riavvio? – Will
Sì, anche questo. Rilassa sostanzialmente i primi controlli per i conflitti di indirizzi per i nuovi socket. – Darron