Più di 65536 connessioni TCP su Linux


11

Sono bloccato nel tentativo di configurare più di 65536 connessioni TCP in uscita da una scatola Linux (RedHat5).

Ho già configurato caselle in uscita e accettate per consentire descrittori di file sufficienti.

Non credo che ci sia un problema sul lato accettante: ho più caselle di destinazione, ognuna con più indirizzi IP e sto usando più porte.

Sul lato estroverso non credo di avere un limite per indirizzo IP - sto usando più indirizzi IP e porte (sto aprendo connessioni dalle porte 30.000 - 60.000 per ciascuno dei diversi indirizzi IP).

C'è qualche parametro sintonizzabile del kernel Linux che mi manca? O qualche limite fondamentale in TCP?

L'errore è che la mia app per l'apertura delle connessioni è bloccata nella chiamata connect ().

Grazie per l'aiuto NickB


Quale limite hai raggiunto? Qual è stato l'errore quando hai raggiunto quel limite?
nn.

connect () si blocca.
NickB,

1
Cosa c'è tra i tuoi IP di origine e di destinazione? Stai forse riempiendo la tabella NAT di alcuni dispositivi?

Risposte:


10

Ecco un blog in cui qualcuno ha ottenuto> 1.000.000 di outbound da una scatola.

Nella parte 1, impostiamo l'intervallo su "1024 65535", ovvero sono disponibili 65535-1024 = 64511 porte non privilegiate. Alcuni di questi verranno utilizzati da altri processi, ma non supereremo mai le connessioni client 64511, perché le porte resteranno a corto.

...

Quindi tiriamo fuori 17 nuovi indirizzi IP, con l'intenzione di effettuare 62.000 connessioni da ciascuno - dandoci un totale di 1.054.000 connessioni


Grazie! Per me va bene. In particolare, le estensioni di sistema di metabrew.com/article/… mi hanno permesso di configurare oltre 65.536 connessioni TCP.
NickB,

1

Il protocollo TCP utilizza solo 16 bit sia per la porta di destinazione che per quella di origine. Non ci sarà modo di aprire contemporaneamente più di 65536 porte, nemmeno con Linux.


3
Questo vale solo per un singolo indirizzo IP. Se ne usi più di uno, ogni indirizzo IP dovrebbe avere 65536 porte aperte.
Giobbe

1
corretto, è necessaria una porta locale per ogni connessione in uscita. IIRC, le porte già in uso non possono essere utilizzate per queste connessioni. quindi, ad esempio, se si utilizza telnet / ftp / http, le porte numerate il 21/23/80 non sono disponibili come porte locali.
KevinDTimm,

1
Puoi anche avere più connessioni alla stessa porta.
gtrak,

@Job - Sì, poiché TCP è sovrapposto a IP - Sto parlando di un solo indirizzo IP.

4
Ogni connessione è identificata da una tupla composta dall'indirizzo e dalla porta remoti e dall'indirizzo e dalla porta locali. Quindi è possibile> 65536 connessioni in entrata da diversi host remoti. > 65536 connessioni in uscita da una singola interfaccia su un host non è possibile e verrai limitato a un po 'meno di quello in quanto ci saranno sempre alcune porte in uso.
Len Holgate,

0

In questo contesto, una "singola interfaccia" indica una singola rete a cui è assegnato un singolo indirizzo IP. Ogni connessione TCP in uscita è associata a una porta separata, quindi il tuo esempio non è possibile.

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.