Esiste un limite rigido di 65536 connessioni TCP aperte per indirizzo IP su Linux?


23

Esiste un limite rigido di 65536 connessioni TCP aperte per indirizzo IP su Linux? Ho letto da qualche parte che c'era, ma qualcuno chiede conferma e non riesco proprio a trovarlo.

Mi sembra di ricordare che i descrittori di file fossero qualcosa di intero a 16 bit che lo limita in qualche modo?

O è questo hokum, e non c'è semplicemente alcun limite oltre a quanto sia robusto il server?

Risposte:


35

Potresti pensare al numero di porte. Ci sono 65536 porte disponibili nel TCP nelle versioni correnti di IPv4. Questa non è solo una limitazione di Linux, fa parte del protocollo. Il tuo indirizzo IP identifica la tua macchina e la porta identifica un programma sulla tua macchina.

Ma il numero di connessioni non è limitato da questo. Una connessione è composta da 5 pezzi di informazioni, in geek parlano una 5 tupla. È determinato dal protocollo (TCP, UDP), dall'indirizzo IP e dalla porta locali, nonché dall'indirizzo IP e dalla porta remoti. Quindi, prendi un server web. Può servire molte connessioni sulla stessa porta (molto probabilmente 80). Il tuo server web può persino supportare più connessioni allo stesso computer client. Dì, ti stai collegando a google.com da due finestre. Il dispositivo sceglierà una porta non utilizzata per ogni connessione. Quindi, il server di Google dovrà tenere traccia di (TCP, google.com, 80, yourmachine, someport1) e (TCP, google.com, 80, yourmachine, someport2). Ad un certo punto ti imbatteresti in limiti, ma non è un limite rigido ed è molto dipendente dal sistema.

E sì, ogni socket è un descrittore di file, ma non tutte le macchine usano short per la tabella fd. Sul mio sistema, un sistema non completamente sintonizzato, cat /proc/sys/fs/file-maxfornisce 323997. Sono sicuro che potrei potenziarlo se necessario.

Quindi, c'è un limite di 65336, ma ha a che fare con l'indirizzamento, non con il numero di connessioni. Il numero di connessioni è limitato, ma di più dalla configurazione del sistema e da quanta memoria ha.


2
Quindi, con riferimento alla 5-tupla: anche se sono limitato a 65536 porte, ciò mi limita a 64k connessioni per indirizzo IP in entrata , giusto? Quindi l'unico limite sono i descrittori di file, ma non sono necessariamente a 16 bit? Quindi in pratica quello che stai dicendo è che non ci sono limiti?
Chris

1
sì. Vedi anche: en.wikipedia.org/wiki/Transmission_Control_Protocol sezione "Utilizzo delle risorse"
user12889

3
@Chris: 64k connessioni per indirizzo IP in entrata su una singola porta locale , sì.
Grawity

@Chris cosa ha detto Grawity. La 5 tupla avrà fino a (ma mai raggiungendo) 65536 combinazioni con l'altra macchina. In realtà, non ci arriverai mai perché una macchina non può usare alcuna vecchia porta per una connessione - alcuni sono riservati per motivi specifici.
Rich Homolka
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.