In che modo i siti ad alto traffico servono più di 65535 connessioni TCP?


29

Se esiste un limite al numero di porte che una macchina può avere e un socket può essere associato solo a un numero di porta inutilizzato, in che modo i server che riscontrano quantità estremamente elevate (oltre il numero massimo di porte) delle richieste gestiscono questo? Viene fatto semplicemente distribuendo il sistema, ovvero molti server su molte macchine?

Risposte:


55

Si fraintendono i numeri di porta piuttosto gravemente: un server è in ascolto solo su una porta e può avere un gran numero di socket aperti dai client che si collegano a quella porta.

A livello TCP, la tupla (ip di origine, porta di origine, ip di destinazione, porta di destinazione) deve essere unica per ogni connessione simultanea. Ciò significa che un singolo client non può aprire più di 65535 connessioni simultanee a un server. Ma un server può (teoricamente) server 65535 connessioni simultanee per client .

Quindi in pratica il server è limitato solo dalla quantità di CPU, memoria ecc. Che deve soddisfare le richieste, non dal numero di connessioni TCP al server.


Mi chiedo come il NAT di grado carrier influirà su questo
TheLQ

@TheLQ Senza CGN ogni client non può aprire più di 65535 connessioni allo stesso server, nessun client dovrebbe aver bisogno di quasi tutte le connessioni allo stesso server. Con CGN ogni CGN non può aprire più di 65535 connessioni allo stesso server, quelle dovrebbero essere condivise tra tutti i client che usano quel CGN. Se il CGN può aprire simultaneamente 65535 connessioni a un server e 65535 connessioni a un altro server è un dettaglio dell'implementazione, che può variare tra diverse implementazioni CGN.
Kasperd,

Il limite può essere aumentato aggiungendo più indirizzi IP al CGN o implementando più CGN. Ma puoi anche distribuire il doppio stack. Quindi le connessioni ai server con supporto IPv6 non passeranno attraverso il CGN, quindi non consumeranno preziosi numeri di porta.
Kasperd,

14

Ti sbagli: l'unicità del socket è determinata da quattro fattori:

  1. l'indirizzo IP locale
  2. il numero di porta locale
  3. l'indirizzo IP remoto
  4. il numero della porta remota

Quando si offrono servizi di rete, 1. e 2. in genere sono statici (ad es. IP 10.0.0.1, porta 80) ma a meno che non ci si aspetti migliaia di connessioni da un singolo client (o da un singolo gateway NAT), non si spinge il limiti per le possibili combinazioni di 3. e 4. prima di esaurire le risorse locali.

Quindi, anche se praticamente un client non utilizzerà una porta già in uso per una connessione per aprire una connessione a un indirizzo IP di destinazione diverso, l'esaurimento del numero di porta sarà il minimo dei problemi per quasi tutte le applicazioni, sia sul server o dalla parte del cliente.

Il problema è molto reale con gateway NAT (router) che servono client con un numero elevato di connessioni in uscita aperte (ad esempio torrent) - vedrai l'esaurimento del numero di porta dopo che il pool di porte disponibile per NAT è stato svuotato. In questo caso il gateway NAT non è in grado di creare associazioni aggiuntive, tagliando in tal modo i client da Internet.


2

La domanda era: come gestire i conteggi di connessioni di grandi dimensioni (> 64k). I due metodi più comuni sono:

  • Aggiunta di più server, che aumenta il numero di indirizzi src / dst e tuple del numero di porta. Esistono diversi modi per condividere il carico su più server; Il round robin DNS è uno; ce ne sono altri

  • Distribuire "NAT di grado carrier" (che a mio avviso in modo derisorio e corretto si definisce "NAT più scadente"). Questo è essenzialmente un NAT di un NAT. Ciò ha conseguenze molto negative per le applicazioni, ma è ciò che fanno alcuni grandi provider quando esauriscono lo spazio IPv4 e / o i numeri di porta e / o non vogliono passare a IPv6.


2
Se leggi più del titolo, vedrai che questa domanda riguarda l'esaurimento delle porte e l'OP si sbagliava su come funziona. In che modo esattamente questa risposta aggiunge qualcosa di nuovo a questo?
MDMarra,

2
L'OP chiede esplicitamente (e non solo nel titolo) "come fanno i server a riscontrare quantità estremamente elevate ... di richieste". Tralasciando la confusione sul funzionamento degli zoccoli, questa è una domanda valida.
user8162,

1
Ottimo lavoro nel tagliare la domanda a metà frase. Il resto della frase dice: (more than the max port number).
MDMarra,

2
Forse ti sei perso la parte in cui ho stipulato che l'OP non capisce la meccanica delle prese. Sono dell'opinione che come superare le porte a 64k sia un argomento valido per la discussione; Mi dispiace se non sei d'accordo, ma che era la domanda e che era quello per cui ho fornito un paio di risposte. Hai chiesto come fosse reattivo; Ecco come.
user8162,

3
Questa è metà della domanda. La domanda più ampia - come supportato dall'ultima frase del PO - è come rompere la barriera 64k.
user8162,
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.