TCP: Número máximo de conexões (cliente e servidor)

2

Na descrição do TCP na Wikipedia, afirma-se que

The number of sessions in the server side is limited only by memory and can grow as new connections arrive, but the client must allocate a random port before sending the first SYN to the server.

A primeira parte parece lógica: o servidor simplesmente usa a porta à qual os clientes se conectaram como porta de origem e, portanto, é limitada apenas por (número de IPs do cliente) * (número de portas efêmeras do cliente) - um grande número .

Mas por que os clientes não podem fazer basicamente a mesma coisa? Se o soquete A se conecta ao servidor1 usando a porta efêmera 12345 (por exemplo, cliente: 12345 - > servidor1: 80), por que o soquete B não pode se conectar ao servidor 2 reutilizando a mesma porta de origem (cliente: 12345 - > server2: 80) ? Isso permitiria mais do que (número de portas) conexões TCP de saída de um único host.

Existe alguma coisa na especificação TCP que proíbe esse tipo de reutilização de porta, ou a limitação é apenas um resultado prático de implementações TCP comuns? Em caso afirmativo, o primeiro caso é realmente tratado de uma maneira diferente da segunda, ou o número de conexões TCP de entrada em uma única porta do servidor praticamente também é limitado a 65535?

Para esclarecer, estou procurando os limites teóricos (de acordo com as especificações) e práticos (implementações; especialmente Linux) para:

  • Conexões de saída de um único cliente para QUALQUER servidor / porta. %código%
  • Conexões de um único cliente para o MESMO servidor e porta (client:* -> *:*) - isso obviamente não pode ser maior que 65535.
  • Conexões de entrada para uma porta de servidor único de QUALQUER cliente (client:* -> server:port) - Suspeito que seja maior que 65535 de acordo com o parágrafo citado e as razões declaradas acima.
por lxgr 21.11.2012 / 12:10

2 respostas

5

Uma sessão tcp é definida por todas as quatro partes do endereço, e apenas as quatro partes em combinação precisam ser únicas.

Então

client ip : source port  -> server ip : destination port

Contanto que sejam diferentes da próxima sessão, a próxima sessão é válida, mesmo que use a mesma porta de origem e o ip do cliente.

Se isso é possível, na realidade, depende da implementação da pilha de rede do sistema operacional e da biblioteca TCP que está sendo usada.

Claramente para conexões de entrada, a contagem de entrada pode ser muito maior do que 65535 - um site ocupado pode facilmente ter muito mais concorrência do que 65000 conexões.

    
por 21.11.2012 / 12:41
0

Os clientes são limitados pela pilha de rede do sistema operacional. É improvável que qualquer sistema operacional permita que vários processos usem a mesma porta de origem em uma conexão de soquete. É teoricamente possível permitir conexões ilimitadas, mesmo em sistemas operacionais cliente existentes, usando um serviço intermediário para protocolos conhecidos, como HTTP, semelhante a como o HTTP.SYS funciona para vários servidores HTTP (em diferentes processos!) Na porta 80 no Windows.

    
por 10.07.2013 / 10:39

Tags