65536 +1 Connessione su un sistema


35

Ci sono 65536 porte per ogni sistema nella rete e ogni connessione o Invia / Ricevi utilizzerà una di quelle.

La mia domanda è: cosa succede se abbiamo 65536 + 1 connessioni ?!

So che non succede in modo normale, ma sono curioso di sapere come gestiscono i sistemi operativi.


12
La connessione verrebbe rifiutata. Ma realisticamente avrai problemi molto, molto prima che 65535 aprano connessioni.
ChrisInEdmonton,

1
@ChrisInEdmonton No. Se si tratta di una connessione in uscita, verrà visualizzato un errore di associazione in quanto non è possibile allocare una porta locale. Se si tratta di una connessione in entrata, il limite della porta non si applica.
user207421

se la connessione è in corso, si riceverà una connessione rifiutata, se è in uscita, la chiamata del socket avrà un errore. Non lo inserirò come risposta perché non ne sono sicuro.
Jorge Aldo,

Risposte:


61

Si noti che un sistema è in grado di gestire più di 65536 connessioni simultanee, poiché ciascuna di esse non utilizza necessariamente una porta separata.

Una connessione TCP o flusso UDP è definita dalla 4 tupla:

(source IP address, source port, destination IP address, destination port)

Pertanto, anche se si dispone di un computer server Web con un solo indirizzo IP e un singolo pacchetto software server HTTP in ascolto solo sulla porta 80, in teoria potrebbe gestire 65536 connessioni per indirizzo IP client che si collegano ad esso . Quindi connessioni 64 Ki dall'indirizzo IP client 1, più connessioni 64 Ki dall'indirizzo IP client 2, ecc.

Quindi i protocolli supportano, per prima approssimazione, 2 48 connessioni / flussi verso una singola porta TCP o UDP su un singolo indirizzo IPv4. Considera insieme sia TCP che UDP, sia lo spazio degli indirizzi di IPv4 sia lo spazio degli indirizzi cosmicamente / comicamente di IPv6 di grandi dimensioni, e puoi vedere che i protocolli stessi non sono probabilmente la fonte del limite al numero di connessioni simultanee che un host in grado di gestire.

Allo stesso modo, non c'è nulla nei protocolli TCP o UDP che impedisca a una macchina client di utilizzare una singola porta di origine su un singolo indirizzo IP per effettuare più connessioni in uscita a vari indirizzi e porte del server. A volte le API di rete di un determinato sistema operativo potrebbero non essere così facili, ma è importante ricordare che, diciamo, la venerabile vecchia API "[BSD] Socket" è solo un'API per TCP e UDP. TCP e UDP potrebbero avere funzionalità non esposte dall'API Socket tradizionale.

Quindi il numero di connessioni TCP o flussi UDP simultanei che un determinato host è in grado di gestire è limitato non tanto dai numeri di porta, ma dalle risorse di sistema come lo spazio RAM e il tempo della CPU necessari per tenere traccia di tutte quelle connessioni e servirle tutte. Anche i dettagli specifici dell'implementazione di un sistema operativo possono imporre limiti artificiali. Ad esempio, nella filosofia Unix "tutto è un file", potrebbe esserci un descrittore di file per ogni connessione TCP o flusso UDP. Se il tuo kernel Unix ha un limite al numero di descrittori di file di cui può tenere traccia, quel limite di descrittori di file è un limite artificiale sul numero di connessioni TCP o flussi UDP simultanei che il tuo kernel può gestire.


2
Potrebbe valere la pena collegarsi a en.wikipedia.org/wiki/C10k_problem in questa eccellente risposta.
ChrisInEdmonton,

1
Ho implementato un server TCP in grado di ospitare 65.534 connessioni da ogni possibile indirizzo IP contemporaneamente. Non fa molto - fa semplicemente eco al testo in arrivo con poche sostituzioni di caratteri - ma funziona su una piattaforma hardware molto piccola. Non credo sia abbastanza conforme a RFC, ma sembra funzionare abbastanza bene, nonostante non sappia né si preoccupi di quante connessioni TCP siano aperte sulla maggior parte delle sue porte.
supercat

2
Se hai davvero bisogno di connettere più di 65536 connessioni tra due macchine, puoi configurare le macchine per usare più indirizzi IP. Ogni indirizzo IP che aggiungi alle due macchine aumenta il numero massimo di connessioni in modo quadratico (almeno in teoria, più probabilmente incontrerai prima altri problemi).
Lie Ryan,
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.