Como os sites de alto tráfego atendem a mais de 65535 conexões TCP?

29

Se houver um limite no número de portas que uma máquina pode ter e um soquete pode ser vinculado apenas a um número de porta não utilizado, como os servidores com quantidades extremamente altas (mais do que o número máximo de portas) de solicitações lidam com isso? Isso é feito apenas com a distribuição do sistema, ou seja, muitos servidores em muitas máquinas?

alh
fonte

Respostas:

55

Você entende mal os números de porta bastante: um servidor escuta apenas em uma porta e pode ter um grande número de soquetes abertos de clientes conectados a essa porta.

No nível TCP, a tupla (ip de origem, porta de origem, ip de destino, porta de destino) deve ser exclusiva para cada conexão simultânea. Isso significa que um único cliente não pode abrir mais de 65535 conexões simultâneas com um servidor. Mas um servidor pode (teoricamente) servidor 65535 conexões simultâneas por cliente .

Portanto, na prática, o servidor é limitado apenas pela quantidade de energia da CPU, memória, etc., que precisa atender a solicitações, não pelo número de conexões TCP com o servidor.

Dennis Kaarsemaker
fonte
Eu me pergunto como NAT nível de operadora irá afectar este
TheLQ
@TheLQ Sem CGN, cada cliente não pode abrir mais de 65535 conexões com o mesmo servidor, nenhum cliente deve precisar de tantas conexões com o mesmo servidor. Com o CGN, cada CGN não pode abrir mais de 65535 conexões no mesmo servidor, elas teriam que ser compartilhadas entre todos os clientes que usam esse CGN. Se o CGN pode abrir simultaneamente 65535 conexões com um servidor e 65535 com outro servidor é um detalhe da implementação, que pode variar entre diferentes implementações CGN.
Kasperd
O limite pode ser aumentado adicionando mais endereços IP ao CGN ou implantando mais CGNs. Mas você também pode implantar a pilha dupla. Portanto, as conexões com servidores com suporte a IPv6 não passarão pela CGN, portanto não consumirão números de portas preciosos.
Kasperd #
14

Você está enganado - a singularidade do soquete é determinada por quatro fatores:

  1. o endereço IP local
  2. o número da porta local
  3. o endereço IP remoto
  4. o número da porta remota

Ao oferecer serviços de rede, 1. e 2. geralmente são estáticos (por exemplo, IP 10.0.0.1, porta 80), mas, a menos que você esteja esperando milhares de conexões de um único cliente (ou um único gateway NAT), você não precisará pressionar o limites para as combinações possíveis de 3. e 4. antes de ficar sem recursos locais.

Portanto, embora praticamente um cliente não use uma porta já usada para uma conexão para abrir uma conexão com um endereço IP de destino diferente, o esgotamento do número da porta será o menor dos seus problemas para praticamente qualquer aplicativo - seja no servidor ou no servidor. lado do cliente.

O problema é bem real: os gateways NAT (roteadores) atendem a clientes com um alto número de conexões de saída abertas (por exemplo, torrents) - você verá o número de portas esgotado depois que o pool de portas disponível para NAT for esvaziado. Nesse caso, o gateway NAT não pode criar associações adicionais, cortando efetivamente os clientes da Internet.

o wabbit
fonte
2

A questão era como lidar com contagens de conexão grandes (> 64k). Os dois métodos mais comuns são:

  • Adicionando mais servidores, o que aumenta o número de endereços src / dst e as tuplas do número da porta. Existem várias maneiras de compartilhar a carga entre vários servidores; O rodízio de DNS é um; há outros

  • Implante "NAT de nível de operadora" (que um amigo, de maneira irônica e correta, na minha opinião, se refere a "NAT de grau mais crummier"). Este é essencialmente um NAT de um NAT. Isso tem implicações muito ruins para aplicativos, mas é o que alguns grandes provedores fazem quando ficam sem espaço IPv4 e / ou números de porta e / ou não desejam migrar para o IPv6.

user8162
fonte
2
Se você ler mais do que o título, verá que esta pergunta é sobre exaustão de portas e o OP estava errado sobre como ele funciona. Como exatamente essa resposta acrescenta algo novo de valor a isso?
MDMarra
2
O OP pergunta explicitamente (e não apenas no título) "como os servidores experimentam quantidades extremamente altas ... de solicitações". Deixando de lado a confusão sobre como os soquetes funcionam, essa é uma pergunta válida.
user8162
1
Excelente trabalho para interromper a pergunta no meio da frase. O resto da frase diz: (more than the max port number).
MDMarra 26/09
2
Talvez você tenha perdido a parte em que estipulei que o OP não entende a mecânica do soquete. Sou da opinião de que como exceder as portas de 64k é um tópico válido para discussão; Sinto muito se você não concorda, mas essa foi a pergunta e foi para isso que eu forneci algumas respostas. Você perguntou como isso foi responsivo; É assim que.
user8162
3
Essa é a metade da questão. A questão mais abrangente - como apoiada na sentença final do OP - é como quebrar a barreira dos 64k.
user8162