Qual è il numero massimo di connessioni TCP che posso avere in Windows Server 2008?


11

Vorrei avere quante più connessioni possibili (connessioni singole da molti client diversi) in un server in esecuzione su Windows Server 2008, al fine di supportare un'applicazione in stile Comet. L'applicazione è scritta in C #. Le connessioni non saranno loquaci, devono solo essere aperte (e rimanere aperte). L'acquisto di carichi di memoria e CPU veloci non è un problema.

Per quanto ne so, sarò limitato a 65k connessioni aperte simultanee per NIC, il numero massimo di porte. È preciso? O posso andare oltre 65k connessioni / NIC in qualche modo? Sembra che ci siano almeno prodotti server per Linux che supportano centinaia di migliaia di connessioni. Come lo fanno?

Risposte:


9

Puoi andare ben oltre 65k connessioni; poiché puoi avere più connessioni per porta (una volta accettato, l'ascoltatore può connettersi a un altro client). Un'estremità o l'altra deve avere qualche differenza, di solito il client sceglie una porta casuale. Windows è limitato per impostazione predefinita a poche più di 3000 di queste porte casuali; quindi il tuo cliente tipico lo farà al massimo. Tuttavia, è possibile configurare il client in modo diverso e molti * nix sono limitati a molti più di Windows.

C'è un'impostazione del registro che limita il numero massimo di connessioni a 16 milioni. Ma ci sono altri problemi più pratici che di solito ti limitano a meno (puoi cambiare il valore del registro).

  • Windows occupa circa 1 KB di RAM per connessione (che è ~ 16 GB per connessioni 16 M); e la tua app dovrà anche tenere traccia delle sue connessioni attive in qualche modo (più memoria).
  • Windows verificherà anche le connessioni non responsive ogni 2 ore. A 16 M connessioni questo è circa ogni 0,5 ms; occuperebbe una larghezza di banda significativa solo facendo quei controlli.

1
@evilfred: le porte effimere sono per le connessioni TCP in uscita, il che significa che una macchina client utilizzerà una porta effimera quando si connette al tuo server Web sulla porta 80. Come affermato da Chris S, una volta stabilita quella sessione il server Web è in grado di stabilire un altro connessione sulla porta 80 da un client diverso. Inoltre, penso che abbia menzionato il limite di porta effimero del client nel tentativo di essere esaustivo nella sua risposta, questo limite di porta effimero del client non è una tua preoccupazione, è la preoccupazione dei clienti. @ Chris S: Spero di non aver dichiarato male ciò che intendevi nella tua risposta.
joeqwerty,

1
Quindi non esiste un limite reale al numero di connessioni in entrata che un server può supportare su un singolo IP? Come fa il server a sapere dove inviare i dati che riceve da un client se la porta di destinazione è condivisa?

1
Non mi interessa il cliente.

1
@evilfred: ogni sessione TCP viene "gestita" tramite quella che viene chiamata 4 tuple, ovvero porta client ip | porta client <> server ip | porta server. Ecco come il server gestisce il traffico tra ogni sessione su una porta "condivisa", come la porta 80 su un server web.
joeqwerty,

1
Lo so. Ci sono solo 65k possibili porte server per IP. Pertanto vi è un massimo di 65k socket attivi per IP.
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.