Qual è il numero massimo teorico di connessioni TCP aperte che un sistema Linux moderno può avere

StackOverflow https://stackoverflow.com/questions/2332741

Domanda

Considerato il rendimento infinita dall'hardware, in grado di un supporto Linux> 65536 connessioni TCP aperte?

Mi risulta che il numero di porte temporanee (<65536) limita il numero di connessioni da un IP locale su un attacco su un IP remoto.

La tupla (ip locale, porta locale, ip remoto, porta remota) è ciò che definisce univocamente una connessione TCP; questo implica che più di 65K connessioni possono essere supportati se più di uno di questi parametri sono gratuiti. per esempio. connessioni a un unico numero di porta su più host remoti da più IP locali.

C'è un altro limite di 16 bit nel sistema? Numero di descrittori di file, forse?

È stato utile?

Soluzione

Una singola porta di ascolto può accettare più di una connessione simultaneamente.

C'è un limite '64K' che viene spesso citato, ma che è per client per porta del server , e ha bisogno di chiarire.

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 della stack TCP, questi quattro campi sono utilizzati come chiave composta da abbinare pacchetti ai collegamenti (ad esempio descrittori di file).

Se un cliente ha molti collegamenti con la stessa porta sulla stessa destinazione, poi tre di questi campi sarà lo stesso - solo source_port varia per differenziare le varie connessioni. Le porte sono numeri a 16 bit, quindi il numero massimo di connessioni un dato cliente può avere a qualsiasi porta host è 64 KB.

Tuttavia, più client possono avere ciascuno fino a 64K connessioni alla porta un po 'di server e se il server dispone di più porte o uno è multihomed allora si può moltiplicare ulteriormente.

Quindi, il limite reale è descrittori di file. Ogni connessione socket individuo è dato un descrittore di file, in modo che il limite è in realtà il numero di descrittori di file che il sistema è stato configurato per consentire e risorse per gestire. Il limite massimo è tipicamente fino oltre 300K, ma è configurabile per esempio con sysctl .

I limiti realistici essere vantavano per le caselle normali sono intorno 80K per singoli server di messaggistica Jabber filettati esempio.

Altri suggerimenti

Se state pensando di esecuzione di un server e cercando di decidere quante connessioni possono essere serviti da una macchina, si consiglia di leggere su il problema C10K ei potenziali problemi coinvolti nel servire molti clienti contemporaneamente.

Se è stato utilizzato un raw socket (SOCK_RAW) e TCP ri-implementato in spazio utente, credo che la risposta è limitata in questo caso solo per il numero di tuple (local address, source port, destination address, destination port) (~ 2 ^ 64 per l'indirizzo locale).

Sarebbe ovviamente prendere un sacco di memoria per mantenere lo stato di tutti quei collegamenti, e penso che si dovrebbe impostare alcune regole di iptables per mantenere lo stack TCP kernel da arrabbiarsi e / o rispondere a vostro nome.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top