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

17

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

    
por alh 25.08.2013 / 16:40

3 respostas

40

Você entendeu mal os números de porta severamente: um servidor escuta apenas em uma porta e pode ter um grande número de soquetes abertos de clientes que se conectam a essa porta.

No nível TCP, a tupla (ip de origem, porta de origem, ip de destino, porta de destino) deve ser única para cada conexão simultânea. Isso significa que um único cliente não pode abrir mais de 65535 conexões simultâneas para um servidor. Mas um servidor pode (teoricamente) server 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 às solicitações, não pelo número de conexões TCP ao servidor.

    
por 25.08.2013 / 16:51
11

Você está enganado - a exclusividade 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. normalmente 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 NAT gateway), você não vai empurrar os limites para as possíveis combinações de 3. e 4. antes de ficar sem recursos locais.

Portanto, embora praticamente um cliente não use uma porta já em uso 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 em o servidor ou o lado do cliente.

O problema é muito real com gateways NAT (roteadores) atendendo clientes com um alto número de conexões de saída abertas (por exemplo, torrents) - lá você verá o esgotamento do número da porta após o pool de portas disponível para NAT ter sido esvaziado. Neste caso, o gateway NAT é incapaz de criar associações adicionais, reduzindo efetivamente os clientes da Internet.

    
por 25.08.2013 / 16:52
1

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 tuplas de números de porta. Existem várias maneiras de compartilhar a carga em vários servidores; DNS round robin é um deles; existem outros

  • Implante "NAT carrier-grade" (que um amigo ironicamente e corretamente, a meu ver, refere-se a "NAT mais crummier"). Este é essencialmente um NAT de um NAT. Isso tem implicações muito ruins para os aplicativos, mas é o que alguns grandes provedores fazem quando ficam sem espaço IPv4 e / ou números de portas e / ou não querem migrar para o IPv6.

por 26.09.2013 / 20:46